为啥我的模拟鼠标点击没有做任何事情?

Posted

技术标签:

【中文标题】为啥我的模拟鼠标点击没有做任何事情?【英文标题】:Why isn't my simulated mouse click doing anything?为什么我的模拟鼠标点击没有做任何事情? 【发布时间】:2012-02-21 21:37:29 【问题描述】:

我有这个代码:

[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);

[Flags]
public enum MouseEventFlags

    Move = 0x0001,
    LeftDown = 0x0002,
    LeftUp = 0x0004,
    RightDown = 0x0008,
    RightUp = 0x0010,
    MiddleDown = 0x0020,
    MiddleUp = 0x0040,
    Absolute = 0x8000


public void SimMouseEvent(MouseEventFlags e, int x, int y)

    mouse_event((uint)e, (uint)x, (uint)y, 0, UIntPtr.Zero);


public void SimLeftClick(int x, int y)

    SimMouseEvent(MouseEventFlags.LeftUp | MouseEventFlags.RightUp, x, y);

我的表单如下所示:

当你点击“按钮”时,它会运行:

private void button3_Click(object sender, RoutedEventArgs e)

    SimLeftClick(50, 50);

在我的窗口上我也有这个:

private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)

    MessageBox.Show("click");

当我点击窗口时,它按预期显示“点击”,但当我点击“按钮”时,它似乎没有做任何事情。

坐标是绝对的还是相对的?多显示器怎么样?它们是否只适用于重点应用程序?

我希望 50,50 要么在某个地方点击我的窗口并触发“点击”处理程序,要么点击某个随机窗口,因为它完全错过了我的应用程序并专注于它......为什么没有任何事情发生?

【问题讨论】:

【参考方案1】:

您处理鼠标按钮按下消息,但发送鼠标按钮按下消息。单击需要按下按钮,然后再按下相同的按钮。

坐标被忽略,因为您没有传递Move 标志。

尝试阅读the documentation。

【讨论】:

我看了看,但无法弄清楚。我想我把它作为 LeftDown|LeftUp 但后来在某个地方搞砸了。似乎现在可以工作了。谢谢! 公平地说,文档非常糟糕;它并没有说需要MOUSEEVENTF_MOVE @Ian: "如果鼠标移动了,由设置的MOUSEEVENTF_MOVE 表示,dxdy 保存关于那个动作。” @BenVoigt: "dx [in] 类型:DWORD 鼠标沿 x 轴的绝对位置或其自上次鼠标事件生成以来的运动量,取决于 MOUSEEVENTF_ABSOLUTE 的设置。绝对数据被指定为鼠标的实际 x 坐标;相对数据被指定为移动的 mickey 的数量。一个 mickey 是鼠标必须移动的量才能报告它已经移动。" @Ian:但主要是我假设 .NET 开发人员不了解 Win32 API 文档,并且可能从 pinvoke.net 或某个博客获取 p/invoke 签名。其中的信息比我链接的 MSDN 页面还要少。【参考方案2】:

根据 Ben 的建议已修复。

public void SimLeftClick(int x, int y)

    var scr = Screen.PrimaryScreen.Bounds;
    SimMouseEvent(MouseEventFlags.LeftDown | MouseEventFlags.LeftUp | MouseEventFlags.Move | MouseEventFlags.Absolute,
        (int)(x / (double)scr.Width * 65535),
        (int)(y / (double)scr.Height * 65535));

【讨论】:

以上是关于为啥我的模拟鼠标点击没有做任何事情?的主要内容,如果未能解决你的问题,请参考以下文章

在表格视图中点击单元格不会做任何事情

为啥json没有做任何事情?

为啥 .catch() 没有做任何事情?

为啥这个正则表达式替换语句没有做任何事情? [复制]

iOS 11.3 WKWebView:input.focus() 没有做任何事情

FragmentTransaction 没有做任何事情