在Chrome中的NPAPI窗口插件中使用Windows raw_input

时间:2012-10-15 17:08:35

标签: c windows google-chrome npapi

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

1 个答案:

答案 0 :(得分:0)

我会尝试在浏览器提供的内容中创建自己的子HWND,以便您可以更好地控制正在发生的事情。