当前位置: 代码迷 >> C# >> sendmessage发送模拟点击按钮没有反应解决办法
  详细解决方案

sendmessage发送模拟点击按钮没有反应解决办法

热度:230   发布时间:2016-05-05 02:49:19.0
sendmessage发送模拟点击按钮没有反应
使用
SendMessage(hwnd, 0x10, 0, 0)可以关闭按钮                             //VM_CLOSE
但是使用,sendmessage(hwnd, 0xF5, 0, 0)却点击不了按钮。  //BM_CLICK
求助!!!
------解决思路----------------------
那也得看人家是什么窗体。腾讯的窗体就得点击窗体坐标。 而不是去找按钮。
------解决思路----------------------
引用:
想要sendmessage接收点击的窗体,是子线程A弹出的对话框,这个子线程A正在sleep,和这个有关吗?
因为线程A sleep了,所以没法处理消息?那有没有可以处理消息的线程挂起方法?
另外,子线程A弹出的对话框是在子线程A中?还是在子线程A创建的子线程中处理?


如果是弹窗  你的sendmessage 可能会卡在这。不往下执行。 你需要异步  或者开线程去操作。

还有
SendMessage(hwnd_bt, 0x0201, 0, 0);
SendMessage(hwnd_bt, 0x0202, 0, 0);
是发送给按钮的句柄。 不是窗体。

------解决思路----------------------
引用:
不好意思,写的不清楚。
我的意思是:hwnd肯定是正确的,因为调用SendMessage(hwnd, VM_CLOSE, 0, 0)是可以关闭按钮。
但是sendmessage(hwnd, BM_CLICK, 0, 0)却点击不了按钮。
我是在新建的线程中,调用sendmessage的,和这个有关吗?


从这里看出,你的hwnd明显不对。具体看我一楼的回复。
在窗体程序里,不仅窗体有句柄,几乎每一个控件都有自己的句柄,它们都是Windows系统中所谓的Window,都有自己的消息处理函数。你能发送关闭消息关闭窗体,只能说明你的窗体句柄找对了,但这和关闭按钮的句柄对不对完全没关系。

PS1:关于对话框会线程阻塞的说法也是错误的,弹出对话框只是"阻塞"了对该消息处理的"子函数",另外会对键盘,鼠标消息做一些"额外"的处理。最简单的例子:Form1中弹出对话框Form2,在Form2中你是可以对Form1中的控件进行操作的,比如:改变TextBox中的Text属性,而不用Invoke。
 
PS2:SendMessage是同步的。它会等"对方"将消息处理完毕才返回。可以做一个实验,比如:A程序中的button1点击后会一个复杂的运算,需要10秒,那你用SendMessage向这个按钮发送点击消息,要10秒后才会返回。PostMessage才是异步的。
  相关解决方案