【问题标题】:Why isn't the mouse clicking when I am telling it to?为什么我告诉它时鼠标没有点击?
【发布时间】:2012-07-13 19:38:16
【问题描述】:

我正在使用来自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...,但仍然没有运气。其他人已经成功了...为什么我没有?

【问题讨论】:

  • 您运行的操作系统是什么版本/位深度?
  • MOUSEEVENTF_LEFTDOWN 和 MOUSEEVENTF_LEFTUP 一次通话??
  • @AlexFarber 是的,否则鼠标只会向下而不是向上,因此什么也不做
  • 我的意思是:试试 mouse_event(MOUSEEVENTF_LEFTDOWN ...); mouse_event(MOUSEEVENTF_LEFTUP ...);

标签: c# winapi cursor mouse emulation


【解决方案1】:

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

这是有充分理由的,mouse_event() 的返回类型是 void。 Windows 没有任何方法可以告诉您您做错了。 SendInput 返回 UINT 并通过返回 0 并通过 GetLastError 暴露错误代码来报告错误。

而且你肯定做错了。发送同时向上和向下按钮的鼠标事件没有意义。你需要调用它两次;先下后上。

【讨论】:

    猜你喜欢
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多