0
我在工作中继承了一些相当狭隘的“屏幕抓取”代码。它似乎一切正常,除了在某些Windows XP机器上,点击事件永远不会让它进入我们希望以编程方式“点击”的按钮。SendMessage vs SendNotifyMessage user32.dll api
以下片段用于我们代码的各个部分中,以“单击”按钮。
[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的区别。任何想法为什么你会想要一个在另一个?
SendMessage阻塞,直到消息被处理; SendNotifyMessage立即返回(除非窗口属于同一个线程)。 – Blorgbeard 2015-04-01 22:58:50
另请参见['SendMessageTimeout()'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952.aspx)。 – 2015-04-02 01:27:38
@本州:你确认'SystemWindow w'是按钮的正确窗口,而'w.HWnd'是有效的吗?当按钮没有响应时,发送(通知)消息()的返回值是什么?只有当WAIT是真或假,或者两者都发生时,才会发生故障吗?您是否尝试过使用Spy ++或类似工具来监控窗口消息并确保您的消息([[BM_CLICK]](https://msdn.microsoft.com/en-us/library/windows/desktop/bb775985.aspx) - 不要硬编码它的数值)到达按钮? – 2015-04-02 01:31:15