2008-09-18 152 views
12

我有一個系統,我有多個鍵盤,真的需要知道哪個鍵盤的鍵擊來自哪裏。爲了解釋設立:多個鍵盤和低級掛鉤

  1. 我有一個正常的PC和USB鍵盤
  2. 我有一些硬鍵
  3. 硬鍵映射爲一個標準的USB鍵盤外接VGA屏幕,發送的鍵碼數量有限(F1,F2,返回,+和 - )

我有一個低級別掛鉤(在C#中,但實際上呼籲Win32的功能),它甚至能夠應對輸入時我的申請沒有集中。

問題是,當使用普通鍵盤時,應用程序在外部屏幕上驅動時拾取的某些映射鍵碼。由外部屏幕發送的用於確認的按鍵之一是VK_RETURN。除非我能夠識別「設備」並對其進行過濾,否則用戶可能正在執行操作並在屏幕上確認他們甚至沒有看到。

如何知道哪個鍵盤負責按鍵?

+0

我已經在這裏回答了這個問題:[如何檢測輸入設備,如果鼠標和觸摸板都啓用](http://stackoverflow.com/a/8804862/1000282)。答案使用我創建的c庫和驅動程序。 – 2012-02-16 19:23:02

+0

不嚴格地回答我的問題。被標記爲正確的答案在幾年內運行良好。 – 2012-02-24 11:28:41

+0

@ ray-haves您是否可以確認您是否可以阻止其他應用程序的_making_輸入,即使您已經過濾它。也就是說,一旦按鍵通過原始輸入進行過濾,您是否能夠阻止它被其他操作系統處理? – 2012-02-24 19:14:26

回答

14

是的我糾正了,我的壞,每天都在學習新的東西。

這是我在彌補吧:)嘗試:

  • 註冊要使用原始輸入(兩個鍵盤)與:: RegisterRawInputDevices()的設備。

  • 你可以從GetRawInputDeviceList)這些裝置(

  • 您已經註冊了設備後,你就會開始WM_INPUT消息。

  • 的WM_INPUT消息的lParam中包含RAWKEYBOARD結構,你可以用它來確定,其中輸入來自的鍵盤,再加上虛擬鍵碼和消息的類型(WM_KEYDOWN,WM_KEYUP,...)

  • 因此,您可以設置最後一條消息來自哪裏的標誌,然後將其分派給常規鍵盤輸入處理程序。

-3

沒辦法做到這一點。 Windows爲你抽象。如前所述,您需要編寫/修改設備驅動程序。