我继承了一些相当狭隘的屏幕抓取"工作中的代码。在一些Windows XP机器上似乎工作正常,其中点击事件从未进入我们希望以编程方式按下的按钮"点击"。
我们的代码的各个部分使用以下代码段来"点击"一个按钮。
[DllImport("user32.dll")]
public extern static int SendMessage(IntPtr hwnd, uint msg, uint wParam, uint lParam);
[DllImport("user32.dll")]
public extern static int SendNotifyMessage(IntPtr hwnd, uint msg, uint wParam, uint lParam);
static public void SendClick(SystemWindow w, bool WAIT = true, int delay=100)
{
if (w != null)
if (WAIT == true)
SendMessage(w.HWnd, 0x00F5, 0, 0);
else
{
SendNotifyMessage(w.HWnd, 0x00F5, 0, 0);
System.Threading.Thread.Sleep(delay);
}
}
令我困惑的是SendMessage和SendNotifyMessage之间的区别。知道为什么你会想要一个超过另一个吗?
答案 0 :(得分:2)
0x00F5
是BM_CLICK
。其文档包含以下注释:
如果按钮位于对话框中且对话框未激活, BM_CLICK消息可能会失败。为确保在这种情况下取得成功,请在将BM_CLICK消息发送到按钮之前调用SetActiveWindow功能激活对话框。