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