2012-10-15 44 views
1

我有一個獨立工作的應用程序。它使用原始輸入處理所有的鍵盤/鼠標輸入。當切換到NPAPI客戶端窗口插件時,我通過鍵盤的WM_KEYDOWN接收輸入,而它們應該被我的設置禁用,而且我沒有收到鍵盤的任何原始輸入事件WM_INPUT事件。其他一切正在工作,包括窗口中的D3D9渲染。在Chrome中的NPAPI窗口插件中使用Windows raw_input

下面是我設置窗口粗略(這是相當漫長的):

... 
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

我會嘗試創建你自己的孩子HWND內的瀏覽器給你的地方,你將有更多的控制發生了什麼。

+0

確實有效。阿爾但現在我必須自己處理窗口的樣式,位置和大小。我仍然想知道爲什麼我們不能根據需要操縱提供的窗口。 無論如何感謝您的幫助! – g012

+0

如果你讓窗戶成爲其他窗戶的孩子,並且做得正確,你應該自動獲得位置和尺寸。儘管如此,我是基於別人所說的話講話的。我從來沒有做過,所以我不是100%確定的。 – taxilian

+0

啊有趣,我會嘗試。在測試解決方案時,我簡單地設置了窗口的父窗口,但是我可以嘗試在窗口創建時指定父窗口。 – g012