1

我有一个可以独立运行的应用程序。它使用原始输入处理所有键盘/鼠标输入。切换到 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 中都有一个成功工作的原始输入键盘?

4

1 回答 1

0

我会尝试在浏览器给你的地方创建你自己的子 HWND,你可以更好地控制正在发生的事情。

于 2012-10-15T21:46:49.773 回答