我有一个独立运行的应用程序。它使用原始输入处理所有键盘/鼠标输入。当切换到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中,任何人都有成功运行的原始输入键盘吗?
答案 0 :(得分:0)
我会尝试在浏览器提供的内容中创建自己的子HWND,以便您可以更好地控制正在发生的事情。