スタンドアロンで正常に動作しているアプリケーションがあります。生の入力を使用して、すべてのキーボード/マウス入力を処理します。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入力キーボードが正常に機能している人はいますか?