在Windows上模拟原始输入
Simulating Raw Input on Windows
我有一个应用程序,用原始输入做一些复杂的事情,我想对它进行一些自动化测试。这是发送输入的代码,尽管为了更容易理解,它被删减了一点。
发送:GetRawInputDeviceList(nullptr, &numDevices, sizeof(RAWINPUTDEVICELIST));
rawInputDeviceList = new RAWINPUTDEVICELIST[numDevices];
GetRawInputDeviceList(rawInputDeviceList, &numDevices, sizeof(RAWINPUTDEVICELIST));
HGLOBAL hRaw = ::GlobalAlloc(GHND, sizeof(RAWINPUT));
RAWINPUT *pRaw = reinterpret_cast<RAWINPUT*>(::GlobalLock(hRaw));
pRaw->data.keyboard.MakeCode = 30;
pRaw->data.keyboard.Flags = 0;
pRaw->data.keyboard.Reserved = 0;
pRaw->data.keyboard.VKey = 0x43;
pRaw->data.keyboard.Message = WM_KEYDOWN;
pRaw->data.keyboard.ExtraInformation = 0;
pRaw->header.dwType = RIM_TYPEKEYBOARD;
pRaw->header.dwSize = sizeof(RAWINPUT);
pRaw->header.hDevice = rawInputDeviceList[0].hDevice;
pRaw->header.wParam = (WPARAM)RIM_INPUT;
::GlobalUnlock(hRaw);
SendMessage(hWnd_, WM_INPUT, (WPARAM)RIM_INPUT, (LPARAM)hRaw);
接收:case WM_INPUT:
UINT size = 0;
if(GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)))
return GetLastError();
GetLastError()的返回值是ERROR_INVALID_HANDLE(6)。然而,如果我自己使用GlobalLock,我可以很好地读取句柄。
根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms645596(v=vs.85).aspxlParam: RAWINPUT结构的句柄。这来自于WM_INPUT中的lParam。"
我试过只是使用一个指针,我得到相同的错误信息。我尝试过/没有解锁,以及使用LocalAlloc/LocalLock代替。我已经尝试过与PostMessage和它都是相同的结果,我现在没有主意了。
不能在进程间发送WM_INPUT
消息。像WM_PAINT
一样,它是一个只能由系统本身正确生成的合成消息。lParam
不只是包含数据的HGLOBAL
,它是一个只有原始输入代码才能理解的不透明句柄。
原始输入消息由GetMessage
/PeekMessage
内部直接生成,相关对象由DefWindowProc
清理。SendMessage
不会为WM_INPUT
封送LPARAM
,因为没有编写这样做的代码,因为它不打算以这种方式使用。
相关文章:
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 如何重复使用原始输入缓冲区内存?
- 鼠标跟踪的原始输入始终返回 0 作为增量值
- #defined 函数只能接受原始输入而不接受变量?
- Zlib 放气输入大于原始输入字符串的字符
- TensorFlow模型:如何从原始爱好文件中识别输入/输出节点名称
- 在原始输入之后,我不断得到零
- 我的代码怎么了?带有QT的原始输入API
- X和Y坐标来自带有原始输入的Precision触摸板
- Windows C - 需要想法 - 在同一应用/窗口中将鼠标输入和原始输入组合在一起
- C++ 重载运算符>>(输入)不会更改原始运算符
- 如何模拟原始输入/以正确的方式向应用程序发送WM_INPUT消息
- 如何在OpenSceneGraph中使用windows原始输入
- 将原始输入值打印到屏幕
- 以非阻塞方式读取Linux中的原始输入
- 多个原始输入窗口接收器
- 使用原始输入同时获取两个鼠标的数据
- C++-WINAPI-缺少原始输入特定的函数和结构
- UWP中的鼠标和键盘挂钩:原始输入VS KeyEvents VS全局挂钩
- 在Windows上模拟原始输入