【问题标题】:Using Windows raw_input in NPAPI windowed plugin in Chrome在 Chrome 的 NPAPI 窗口插件中使用 Windows raw_input
【发布时间】:2012-10-15 17:08:35
【问题描述】:

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

【问题讨论】:

    标签: c windows google-chrome npapi


    【解决方案1】:

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

    【讨论】:

    • 确实有效。 Arr 但现在我必须自己处理窗口的样式、位置和大小。我仍然想知道为什么我们不能随心所欲地操纵提供的窗口。无论如何感谢您的帮助!
    • 如果您将窗口设为另一个窗口的子窗口并正确执行,您应该会自动获取位置和大小。不过,我是根据其他人所说的话来说话的;我自己从来没有做过,所以我不能 100% 确定。
    • 很有趣,我会试试的。在测试解决方案时,我只是在创建窗口后设置了父级,但是是的,我可以尝试在创建窗口时指定父级。
    • 嗯对我不起作用,位置不正确并且总是在浏览器的顶部,也许我做的事情不正确。我使用 SetWindowPlacement 回到 SetParent,并从 NPAPI 窗口获取位置,它工作正常。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多