【发布时间】: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