c# - 如何在不使用 Thread.Sleep 的情况下模拟鼠标单击/按键?
问题描述
现在我正在使用 PostMessage 和 MouseClick 将按键发送到应用程序。我想要的是发送 KeyPress,当按键完成时(KeyUp)然后发送鼠标点击。
代码
const UInt32 WM_KEYDOWN = 0x0100;
const UInt32 WM_KEYDOWN = 0x0101;
const int VK_F1 = 0x70;
const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
const uint MOUSEEVENTF_LEFTUP = 0x0004;
[DllImport("user32.dll")]
static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);
[DllImport("user32.dll")]
static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, UIntPtr dwExtraInfo);
private void Timer1_Tick(object sender, EventArgs e)
{
Process processes = Process.GetProcessById(_processID);
PostMessage(processes.MainWindowHandle, WM_KEYDOWN, VK_F1, 0);
Thread.Sleep(10);
PostMessage(processes.MainWindowHandle, WM_UP, VK_F1, 0);
Thread.Sleep(10);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, UIntPtr.Zero);
Thread.Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, UIntPtr.Zero);
Thread.Sleep(10);
}
此代码有效,但仅在高计时器间隔内有效。当我将计时器减少到 100 或低于此值时,它就像在鼠标单击时冻结并且不再进行按键操作。我想知道的是如何使它在较低的计时器间隔内正常工作。或者它有没有更好的解决方案来完成它。
谢谢你。
解决方案
推荐阅读
- javascript - 防止直接访问内部 URL
- javascript - Cosmos DB UDF 在 JavaScript 中将对象转换为数组
- r - 如何从 R data.frame 中删除 Jupyter 中的类型行?
- svelte - 是否可以将纤细组件的(最终结果)HTML 代码呈现为字符串(转义/显示原始 HTML 代码)?
- reactjs - 反应:“TypeError:未定义不是函数”
- php - PHP ImageMagick 脚本在通过命令行执行时不起作用
- r - 错误停止 R 代码尽管 tryCatch。我怎样才能让它继续运行?
- python - android termux上的python套接字连接错误
- github - 是否可以使用原始问题分叉 github 存储库?
- python - 尝试使用 try / except 函数更改多个变量