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でraw入力キーボードが正常に機能している人はいますか?

4

1 に答える 1

0

ブラウザーが提供する子HWND内に、何が起こっているかをより細かく制御できる独自の子HWNDを作成してみます。

于 2012-10-15T21:46:49.773 に答える