2017-04-22 126 views
0

我寫了一個C++代碼片段來模擬鼠標點擊,如下所示。SendInput不能連續工作

INPUT mouseData[2]; 
ZeroMemory(mouseData, sizeof(mouseData)); 

mouseData[0].type = INPUT_MOUSE; 
mouseData[0].mi.dx = xx; 
mouseData[0].mi.dy = yy; 
mouseData[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 
mouseData[0].mi.mouseData = 0; 
mouseData[0].mi.time = 0; 

mouseData[1].type = INPUT_MOUSE; 
mouseData[1].mi.dx = 10; 
mouseData[1].mi.dy = 10; 
mouseData[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 
mouseData[1].mi.mouseData = 0; 
mouseData[1].mi.time = 0; 

SendInput(1, &mouseData[0], sizeof(INPUT)); 
Sleep(30); 
SendInput(1, &mouseData[1], sizeof(INPUT)); 

但它不能正常工作。 前SendInput工作,但後來SendInput不起作用。 爲什麼?

另:我試過SendInput如下鼠標

  1. 調用SendInput點擊
  2. 手動點擊鼠標在屏幕上的任何位置。
  3. 來電SendInput

以上工作正常。 但沒有2,它不起作用。爲什麼?

+0

對於任何獲取鼠標通知的程序來說,這會非常令人困惑。不要同時做所有事情,先移動,然後移動,然後移動。 –

+0

您可以將這些事件放入數組中,以便它們可以以原子方式處理。不要一次發送一個。一次調用SendInput處理所有事件。每個不同的行動你都需要一個事件。閱讀文檔。 –

+0

您正在設置錯誤的標誌。你確定左邊向下和左邊的標誌可以在單個輸入中發送嗎? – SMUsamaShah

回答

2

MSDN不在有效標誌的its description超級有用

在該構件中的位可以是以下值中的任何合理的組合。

我個人不會說在同一輸入命令中同時使用向下和向上標誌是合理的。爲了最大限度地兼容所有應用程序,請像普通用戶那樣執行操作:移動,按下按鈕,最後按鈕。

如果你要做大量的鼠標操作,我會建議你創建一個幫助函數來執行這三個輸入步驟。