2012-07-13 91 views
0

我使用How to simulate Mouse Click in C#?中的以下代碼,我發現它不起作用。下面是代碼:爲什麼當我告訴它時鼠標不會點擊?

[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 

    public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo); 

    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
    private const int MOUSEEVENTF_LEFTUP = 0x04; 
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
    private const int MOUSEEVENTF_RIGHTUP = 0x10; 

    public void DoMouseClick() 
    { 
     mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 882, 554, 0, 0); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     DoMouseClick(); 
    } 

我也試圖與mouse_event(MOUSEEVENTF_LEFTDOWN & MOUSEEVENT_LEFTUP...但仍沒有運氣更換mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENT_LEFTUP...。其他人已經取得了成功...我爲什麼不是?

+0

您正在運行的是哪個版本/位深度的操作系統? – RQDQ 2012-07-13 19:39:49

+2

MOUSEEVENTF_LEFTDOWN和MOUSEEVENTF_LEFTUP在一個調用中? – 2012-07-13 19:42:26

+0

@RQDQ Windows 7 – 2012-07-13 19:42:53

回答

5

您不應該使用mouse_event(),它已被SendInput()取代。

有一個很好的理由,mouse_event()的返回類型是void。 Windows沒有任何方法可以告訴你,你做錯了。 SendInput返回UINT,並通過返回0並通過GetLastError暴露錯誤代碼來報告錯誤。

而你肯定是做錯了。發送同時具有按鈕的鼠標事件沒有意義。你需要調用它兩次;先下來,接下來。

+0

我將如何使用發送輸入? – 2012-07-13 19:53:08

+5

Google對「c#sendinput」有44,500次點擊,不要無可奈何。 – 2012-07-13 19:56:23

相關問題