2017-10-18 70 views
0

我希望模擬鼠標左鍵單擊另一個窗口,並按住該按鈕約2秒。我曾嘗試下面的代碼:如何模擬鼠標按鈕並保持在C#

 int WM_LBUTTONDOWN = 0x0201; 
     int WM_LBUTTONUP = 0x0202; 
     SendMessage(hd, WM_LBUTTONDOWN, new IntPtr(1), lParam);   
     Thread.Sleep(2000); 
     SendMessage(hd, WM_LBUTTONUP, new IntPtr(1), lParam); 

參數「HD」是另一個窗口的句柄和「lParam的」包含座標信息來源。但它沒有像我的期望那樣工作。我使用斷點來調試代碼。當「WM_LBUTTONDOWN」消息發送到另一個窗口時,立即單擊另一個窗口中的按鈕,而不是等待消息「WM_LBUTTONUP」。

當我用鼠標點擊並按住按鈕時,spy ++顯示「WM_LBUTTONDOWN」和「WM_LBUTTONUP」之間除「WM_MOUSEMOVE」之外沒有任何其他消息。 Picture of Spy++ showed

那麼,如何模擬鼠標按鈕並保持在C#中?任何建議將是有益的,謝謝!

+2

[你不能模擬與PostMessage的鍵盤輸入(https://blogs.msdn.microsoft.com/oldnewthing/20050530-11/?p=35513)。 – IInspectable

+1

想要做一件很奇怪的事......爲什麼? – DonBoitnott

+0

@DonBoitnott我想在Android模擬器上模擬鼠標點擊以自動播放Android網絡遊戲。但是遊戲會衡量遊戲中的按鈕需要多少時間來判斷它是否是人類玩遊戲。人類使用手指或鼠標點擊一個按鈕需要大約100毫秒,而模擬點擊的軟件僅花費2毫秒。 – Alleria

回答

0

「mouse_event」 API函數就可以解決問題。但副作用是鼠標poiter實際上會移動,當程序運行時,你不能移動你的鼠標或意外的錯誤的位置會被點擊。

+0

您不能使用'mouse_event'(或'SendInput')來定位特定的窗口。輸入總是進入前景窗口。 – IInspectable