SendMessage怎么发送消息给其他程序

wwwcan 2004-11-25 12:08:44
我用SPY++抓到的消息如下:

//这是抓到的消息
<00001> 000100e2 p wm_timer wtimerid:1 tmprc:00000000


//这是消息的属性
000100e2窗口句柄
0113(wm_timer) 消息
WPARAM:00000001 参数
LPARAM:00000000 参数

我对WINDOWS消息机制一点都不懂,希望大家给写一段发送上述已知窗口句柄,消息及参数的代码。
调试通过马上结帖给分。
...全文
559 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
pressman 2004-12-23
  • 打赏
  • 举报
回复
解决了没有呀?
largewang 2004-12-23
  • 打赏
  • 举报
回复
请看:http://dev.csdn.net/develop/article/17/17197.shtm
石榴刺猬 2004-12-22
  • 打赏
  • 举报
回复
每次运行程序的时候,它的窗口句柄都是不一样的。因此必须通过FindWindow之类的函数来找到窗体句柄。FindWindow可以通过Caption或者ClassName来找,Spy++里面都可以看到的.
SendMessage(句柄,消息,参数,参数)
monklz 2004-12-22
  • 打赏
  • 举报
回复
学习中,帮忙顶
kuki84 2004-12-22
  • 打赏
  • 举报
回复
哈哈,ecom今天吃枪药啦:)
要关心小弟弟,爱护小弟弟,有耐心的原谅小弟弟。
terry6394 2004-11-29
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
h:hwnd;
begin
h:=0;
h:=findwindow(pchar('类名'),pchar('窗口标题'),);
if h<>0 then
sendmessage(h,wm_close,0,0);
end;

你可以通过类名,窗口标题来查找啊。
如果还不够,你可以配合使用getwindow findwindowex来使用.详细的请参照msdn
wwwcan 2004-11-28
  • 打赏
  • 举报
回复
谢谢lianshaohua(永远深爱一个叫“然”的好女孩儿!),但是如果SHELL_TRAYWND类型的有很多个那怎么做?你这个只能找到第一个句柄,我用FINDWINDOWEX来找的,因为是子窗口,不是父窗口。问题是有很多个相同类型的子窗口,有六七个,只有窗口进程的值不同,我怎么去找到我需要的那一个呢?
ztenv 2004-11-27
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
h:hwnd;
begin
h:=0;
h:=findwindow(pchar('shell_traywnd'),nil);
if h<>0 then
sendmessage(h,wm_close,0,0);
end;
Stiven_PFan 2004-11-26
  • 打赏
  • 举报
回复
先找到Caption的窗体,然后得到句柄,句柄当然不是固定的。
wwwcan 2004-11-26
  • 打赏
  • 举报
回复
问题是用SPY++找到进程,看不到CAPTION,而且我要的窗口句柄是在进程下面的某个线程中,而且相同CLASSNAME的有五六个,我不知道去分离出我要的窗口句柄。
ehom 2004-11-26
  • 打赏
  • 举报
回复
句柄当然是会改变的?

请查询MSDN,了解句柄是什么...

总有一些东西,如Caption,Class等是不变的,通过它们用API FindWindow获得句柄,然后再进行相关操作
wwwcan 2004-11-25
  • 打赏
  • 举报
回复
以下信息是已知的,我应该怎么写?

进程ID:00000480
线程ID:0000048C
窗口句柄:000100E2
0113(wm_timer) 消息
WPARAM:00000001 参数
LPARAM:00000000 参数

最好能给发代码,这些是万象2004桌面图标刷新抓下来的消息,我想使用程序来控件图标的刷新,谢谢。
wwwcan 2004-11-25
  • 打赏
  • 举报
回复
进程ID:00000480
线程ID:0000048C
窗口句柄:000100E2
0113(wm_timer) 消息
WPARAM:00000001 参数
LPARAM:00000000 参数
wwwcan 2004-11-25
  • 打赏
  • 举报
回复
我抓的这个是一个程序中的一个线程,我不知道应该用什么来发送消息,高手帮我。
wwwcan 2004-11-25
  • 打赏
  • 举报
回复
SendMessage(000100e2,WM_timer,00000001,00000000);
我是样写的,但是提示错误,我弄不懂,能不能帮我解决一下啊?
ehom 2004-11-25
  • 打赏
  • 举报
回复
既然不懂就应该去学点,这个是必须的基础
ehom 2004-11-25
  • 打赏
  • 举报
回复
SendMessage/PostMessage

F1查帮助

那些属性分别对应各个参数
wwwcan 2004-11-25
  • 打赏
  • 举报
回复
顶上去
bee2518 2004-11-25
  • 打赏
  • 举报
回复
先获得其他程序的输入框的句柄代替
SendMessage(Richedit1.Handle, EM_EXLINEFROMCHAR, 0, Richedit1.SelStart)
中的Richedit1.Handle

可以使用WindowFromPoint函数,该函数得到鼠标所在处的窗口的句柄
constantine 2004-11-25
  • 打赏
  • 举报
回复
SendMessage(其实这里应该是你要发送对象的窗体的句柄,WM_timer,1,0)
HWND 可以通过FindWindow去获得
加载更多回复(6)

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧