2012-07-13 97 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

相关问题