Geo*_*etu 8 c++ events winapi hid
我有一个USB HID触摸板,可以收集输入.默认情况下,当我按下触摸板时,它会生成回车符(回车),当我尝试将其用作鼠标时,它实际上会进入拖动状态.
我想要做的是将回车转换为鼠标单击事件,并将拖动状态转换为光标移动而不使用初始单击部件.
我找到了原始输入替代品.但是,我不知道如何将其转换为鼠标单击和光标移动.
以下是负责鼠标"阅读"的代码:
LRESULT CALLBACK mouseProc (int nCode, WPARAM wParam, LPARAM lParam)
{
MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
if (pMouseStruct != NULL)
{
if(wParam == WM_LBUTTONDOWN)
{
cout<<"clicked"<<endl;
}
printf("Mouse position X = %d Mouse Position Y = %d\n", pMouseStruct->pt.x,pMouseStruct->pt.y);
stringstream sx, sy;
sx << (int) pMouseStruct->pt.x << endl;
sy << (int) pMouseStruct->pt.y << endl;
}
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
那么键盘部分:
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode < 0)
return CallNextHookEx(NULL, nCode, wParam, lParam);
tagKBDLLHOOKSTRUCT *str = (tagKBDLLHOOKSTRUCT *)lParam;
cout<<str->vkCode<<endl;
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
然后记录部分:
DWORD WINAPI MyLogger(LPVOID lpParm)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
hMouseHook = SetWindowsHookEx( WH_MOUSE_LL, mouseProc, hInstance, NULL );
hKeyHook = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, NULL );
MSG message;
while (GetMessage(&message,NULL,0,0))
{
TranslateMessage( &message );
DispatchMessage( &message );
}
UnhookWindowsHookEx(hMouseHook);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:我不知道这是否相关,但我想使用HID在Windows系统上的Chromium实例中播放.
当您使用 WH_MOUSE_LL 注册挂钩时,wparam的可能值为:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE、WM_MOUSEWHEEL、WM_MOUSEHWHEEL、WM_RBUTTONDOWN 或 WM_RBUTTONUP。
我期望一旦发出WM_LBUTTONDOWN ,就必须发出相应的WM_LBUTTONUP以防止光标进入拖动状态。
我没有测试这个的设备,但我会尝试下面的调用以防止进入拖动状态。
CallNextHookEx(hMouseHook, nCode, WM_LBUTTONUP, lParam);
Run Code Online (Sandbox Code Playgroud)
或mouse_event与MOUSEEVENTF_LEFTUP一起使用来注入左按钮的释放。
我认为原始输入替代方案不是一个好主意。我认为这是最后的手段。
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |