我有一个USB触摸屏,收集输入。默认情况下,当我按下触摸屏时,它会生成回车返回 (Enter),当我尝试将它作为鼠标使用时,它实际上进入了拖放状态。
我想要做的是将回车返回转换为鼠标单击事件,并将拖动状态为游标移动,而不使用初始单击部分。
我找到了原始输入的替代方案。但是,我不知道如何将其转换为鼠标,单击并移动鼠标。
下面是鼠标“读取”的代码:
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);
}然后键盘部分:
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);
}然后是日志记录部分:
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;
}注意:我不知道这是否相关,但我想使用HID在windows系统上的Chromium实例中播放。
发布于 2015-07-07 11:27:30
当您向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);或者使用mouse_event和MOUSEEVENTF_LEFTUP注入左侧按钮的发布。
我不认为原始输入替代方案是个好主意。我认为这是最后的手段。
发布于 2015-06-25 14:00:34
对于鼠标单击和鼠标移动-当您处理来自HID的输入时,使用SendInput方法。
单击很容易,因为鼠标移动,尝试获取缩放的拖动坐标,并将其转换为当前屏幕缩放坐标,并使用SendInput方法。
还可以跟踪x,y中的位移,并进行适当的校准,将它们转换为屏幕x,y。
发布于 2015-07-06 20:08:34
触控板和其他任何鼠标一样,只是一只鼠标。它生成标准的鼠标事件。使用全局WH_MOUSE钩子通过SetWindowsHookEx()捕获全局鼠标事件。若要重播它们,请使用mouse_event()。或者,分别使用WH_JOURNALRECORD和WH_JOURNALPLAYBACK钩子进行捕获和播放。
https://stackoverflow.com/questions/31051979
复制相似问题