我有一个可以独立运行的应用程序。它使用原始输入处理所有键盘/鼠标输入。切换到 NPAPI 客户端窗口插件时,我通过WM_KEYDOWN
键盘接收输入,而我的设置应该禁用它们,更糟糕的是,我没有收到任何WM_INPUT
键盘的原始输入事件。其他一切正常,包括窗口中的 D3D9 渲染。
这是我大致设置窗口的方法(很长):
...
SetWindowLongPtr(Application_hWnd, GWL_WNDPROC, (LONG_PTR)&Application_WndProc);
...
DEV_BROADCAST_DEVICEINTERFACE notificationFilter;
GUID hid = { 0 };
RAWINPUTDEVICE rid[4] = { 0 };
rid[1].usUsagePage = 0x01; // HID_USAGE_PAGE_GENERIC (in WDK)
rid[1].usUsage = 0x06; // HID_USAGE_GENERIC_KEYBOARD (in WDK)
rid[1].dwFlags = RIDEV_NOLEGACY;//RIDEV_DEVNOTIFY;
rid[1].hwndTarget = Application_hWnd; // capture only for this window
RegisterRawInputDevices(rid, sizeof(rid) / sizeof(rid[0]), sizeof(rid[0]));
... other raw device detection and related HID stuff
接收:
case WM_INPUT:
{
if (GET_RAWINPUT_CODE_WPARAM(wParam) == RIM_INPUT)
{
RAWINPUT raw = { 0 };
UINT dwSize = sizeof(raw);
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, &raw, &dwSize, sizeof(RAWINPUTHEADER)) > 0)
{
switch (raw.header.dwType)
{
case RIM_TYPEKEYBOARD:
// never reaches here
为了清楚起见,此处省略了错误检查,但在任何地方都不会报告错误。然而它似乎对键盘没有影响,但我确实收到了鼠标的 WM_INPUT。
任何人在 NPAPI 中都有一个成功工作的原始输入键盘?