c++ - 如何在鼠标钩子进程中发送鼠标输入时避免延迟?
问题描述
这是我的代码:
#include <Windows.h>
void InputRButtonDown()
{
INPUT inp;
inp.type = INPUT_MOUSE;
inp.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
SendInput(1, &inp, sizeof(INPUT));
}
void InputRButtonUp()
{
INPUT inp;
inp.type = INPUT_MOUSE;
inp.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
SendInput(1, &inp, sizeof(INPUT));
}
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
WORD button;
switch (wParam)
{
case WM_LBUTTONDOWN:
break;
case WM_LBUTTONUP:
break;
case WM_RBUTTONDOWN:
break;
case WM_RBUTTONUP:
break;
case WM_XBUTTONDOWN:
button = HIWORD(((MSLLHOOKSTRUCT*)lParam)->mouseData);
if (button == XBUTTON2) {
InputRButtonDown();
}
break;
case WM_XBUTTONUP:
button = HIWORD(((MSLLHOOKSTRUCT*)lParam)->mouseData);
if (button == XBUTTON2) {
InputRButtonUp();
}
break;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main()
{
SetWindowsHookExW(WH_MOUSE_LL, MouseProc, NULL, 0);
MSG msg;
while (GetMessageW(&msg, NULL, 0, 0) != NULL) {
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
}
当我单击鼠标侧键之一时,它应该模拟右键单击。问题是鼠标右键单击会在短暂延迟(约 400 毫秒)后触发,而不是立即触发。如果我修改此代码以调用InputRButton...
键盘挂钩 proc 而不是鼠标挂钩 proc 中的函数,则它可以毫无延迟地工作。我的错误在哪里以及如何解决?
解决方案
推荐阅读
- c# - 如何查找电子邮件转发到的电子邮件地址(在 MimeKit 中)
- xml - Markdown:如何在 xml 代码部分中使文本变为粗体
- python - 使用 Model Mommy 创建反向关系对象
- java - 杰克逊用原始类型数组反序列化包装类
- css - 如何将字体系列样式添加到 Html 电子邮件模板
- css - Angular 材质网格列表排列内容到顶部
- java - 负载均衡器没有可供客户端使用的服务器:会议
- sql - ORA-01427: SELECT * FROM TABLE 给出错误单行子查询返回多于一行
- c# - C# 反编译器如何在没有 PDB 文件的情况下工作?
- python - 使用python获取二叉树中给定级别上的所有节点