当我告诉它时,为什么鼠标没有点击?

时间:2012-07-13 19:38:16

标签: c# winapi cursor mouse emulation

我正在使用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...,但仍然没有运气。其他人在这方面取得了成功......我为什么不这样做?

1 个答案:

答案 0 :(得分:5)

你不应该使用mouse_event(),它已被SendInput()取代。

有一个很好的理由,mouse_event()的返回类型是 void 。 Windows没有任何方法可以告诉您,您做错了。 SendInput返回UINT并通过返回0并通过GetLastError公开错误代码来报告错误。

你肯定做错了。发送同时上下按钮的鼠标事件没有意义。你需要打两次电话;首先是下一个。