首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

对提示框发送回车, sendmessage 跟 postmessage 的区别

2013-04-26 
对提示框发送回车, sendmessage 和 postmessage 的区别google了很多, 好像没怎么见到类似的提问一个外部程

对提示框发送回车, sendmessage 和 postmessage 的区别
google了很多, 好像没怎么见到类似的提问
一个外部程序的消息框发送回车, 这个消息框上有个确定按钮,外部程序被hook
send是等回应再返回 和 post是不管如何执行马上返回, 请问前辈们, 这里一定不能用send吗?
应该跟被hook无关的, 我弄个临时工程发送也是同样效果

还就是, 用post发送消息后就不管了, 这个消息应该也是迟早都要被执行的吧, 有没有什么情况会被忽视?
当然我也可以找到这个按钮句柄再发送点击, 但此贴就想知道这个疑问的答案, 谢谢各位路过的前辈

sendmessage没反应
SendMessage(消息框Handle, WM_KEYDOWN, VK_RETURN, 0);
SendMessage(消息框Handle, WM_KEYUP, VK_RETURN, 0);

postmessage可以响应
PostMessage(消息框Handle, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(消息框Handle, WM_KEYUP, VK_RETURN, 0);
[解决办法]
看你要不要返回.

不返回的话, 当然是 POST啦.

比如你要等他返回了, 再干其他的事情.  就用Send


另外, 你post的是个指针,   刚好引用了你的一个局部地址,    这个时候如果函数执行完毕的话, 这一块地址就可能乱码了.  但是用send等返回 函数才能执行完毕,就不会乱


[解决办法]
主要的区别,postmessage 返回值只是一个bool,只用来确认消息是否发送到达;
而 sendmessage返回值是个DWORD,那这作用就多了,意味着可以返回32位的无符号整数,或指针...

例如下面的sendmessage可以获取一个句柄:


procedure TForm1.dtp1DropDown(Sender: TObject);
var
  hwn: HWND;
begin
  // 需要返回一个窗口句柄,必须用sendemessage
  hwn := SendMessage(dtp1.Handle, $1000 + 8, 0, 0);
  if hwn > 0 then
    // 最后使用这个返回的句柄做为参数,但是接下来我不再需要返回什么信息了,post即可
    PostMessage(hwn, $1000 + 15, 0, ord(dowMonday));
end;


结论:post发出去就不管了,send还要等它回馈一个信息,这个信息接下来还要用。

热点排行