c# - 为什么 user32.dll mouse_event 方法不执行鼠标按下事件?
问题描述
我正在设置一个简单的 C# 应用程序,它将窗口设置为前台并在循环中执行点击。
(几年前我在 Windows 7 上编写了相同的程序。当时一切都运行良好。)我现在在 Windows 10 上工作。
private const int MOUSEEVENTF_LEFTDOWN = 0x0002;
private const int MOUSEEVENTF_LEFTUP = 0x0004;
private const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
private const int MOUSEEVENTF_RIGHTUP = 0x0010;
public void DoMouseClick()
{
int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
Thread.Sleep(150);
mouse_event(MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
除了 MOUSEEVENTF_LEFTDOWN 的第一部分之外,一切似乎都有效。如果我手动按住左键,我可以看到程序在下一步中释放它,即 MOUSEEVENTF_LEFTUP。
我怎样才能使鼠标按下也能执行?
解决方案
我认为你做 mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) 并使用 SetCursorPos(int x, int y) 与 x 是 Cursor.Position.X 和 y Cursor.Position.Y
int X = Cursor.Position.X;
int Y = Cursor.Position.Y;
SetCursorPos(X, Y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Thread.Sleep(150);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
这对我有用。
推荐阅读
- mysql - MySQL 错误代码:在 UPDATE 期间出现 1175,其中包括从 IN 语句中选择的行 KEY
- html - 制作一个模糊其背景的 div
- javascript - 当用户输入某个值时,如何标记复选框已选中?
- amazon-web-services - 弹性搜索 v5 模板到 v6
- c# - AWS Lambda 访问本地资源或存储 C#
- vue.js - nuxt js 商店在新鲜时丢失 id
- php - 如何使用 php ajax 和 jquery 从数据库中检索数据并在文本框中显示?
- c - 如何计算双二阶滤波器系数?
- unit-testing - 进行单元测试未找到所需文件
- python - 从 pandas DataReader 导入数据时,x 轴日期未显示在 matplotlib 上