2010-08-24 51 views
1

我需要編寫一個程序來修改輸入某個 usb hid鍵盤(條形碼掃描器)在Windows下。以下工作流程應適用:Win32:在WH_KEYBOARD_LL ||中獲取設備信息當使用原始輸入時,WM_INPUT上的塊輸入

從設備聽輸入 - >記錄輸入 - >停止輸入從獲取到活動的應用程序 - >過程記錄輸入和輸出結果爲主動申請

所以,我做搜索這但現在我卡住了!

有明顯爲「記錄輸入」兩個選項:低電平鉤WH_KEYBOARD_LL和反應中原始輸入到WM_INPUT事件

問題是: - 與WH_KEYBOARD_LL我發現沒有方法來確定從哪個設備輸入來到 - 在WM_INPUT事件中,我發現無法停止按鍵 - 如果使用WH_KEYBOARD_LL來停止按鍵,它將不會進入原始輸入,因此不會觸發WM_INPUT,因此我無法確定按鍵的來源

我在用戶模式下的選項是什麼?

問候, 多米尼克

+1

你需要一個全局鉤子。不能用C#編寫。 – 2010-08-24 15:13:53

回答

1

@Hans帕桑特:WH_KEYBOARD_LL是全球唯一的鉤子,它可以建立在C#

1

可悲的是有沒有簡單的方法來做到這一點。您與您的WH_KEYBOARD_LLWM_INPUT。雖然可能有選項的機會:

您是否測試過WM_INPUT是否在掛鉤之前發生?如果是這樣的話,您可以記住WM_INPUT中的字符,並且 - 在鉤子中 - 只刪除來自您的條形碼掃描器的字符。

1

@邁克爾:看來WM_INPUT鉤之後發生,這就是問題所在......

PS:對不起,不使用意見......我決定發佈這個問題後創建一個帳戶,所以我甚至不能評論我的OP或任何答案,除了我自己的:/

-1

我相信RAWINPUT是你最好的選擇,這是微軟必須說的。

原始輸入模型與鍵盤和鼠標的原始Windows輸入模型不同。在原始輸入模型中,應用程序以發送或發佈到其窗口的消息的形式接收與設備無關的輸入,例如WM_CHAR,WM_MOUSEMOVE和WM_APPCOMMAND。相反,對於原始輸入,應用程序必須註冊它想從中獲取數據的設備。此外,應用程序通過WM_INPUT消息獲取原始輸入。

有幾個優點將原始輸入模型:

  • 應用程序不必檢測或打開輸入裝置。
  • 應用程序直接從設備中獲取數據,並根據需要處理數據 。
  • 應用程序可以區分來自同一類型設備的輸入源,即使它是 。例如,兩個鼠標設備。
  • 應用程序通過指定來自 設備集合的數據或僅指定特定設備類型來管理數據通信。

HID設備可以在市場上銷售時使用,無需等待新的消息類型或更新的操作系統在WM_APPCOMMAND中添加新命令。

你可以研究它here

另外我有一個例子here