2012-04-26 303 views
0

我正在用C#編寫一個程序,它必須模擬鍵盤的按鍵命令。區分鍵盤的真實和虛擬按鍵

問題是 - 我需要模擬「逼真」的鍵盤按鈕點擊,而不是假的。例如,據我的理解:

  • 當用戶按下鍵盤上的任意鍵

    - 上的信號通過USB發送,然後通過鍵盤的驅動程序進行。

  • 時API的使用(SendInput,任何的SendKeys,的KeyboardEvent,或) - 我們繞過USB和驅動程序,所以基本上這幾樣印刷機可以通過全局鉤子的方法來跟蹤..

如何你模擬真實的按鍵?

  • 我沒有C++知識,所以編寫自定義驅動程序不是一種選擇。

  • 我不介意使用微控制器或任何其他硬件「解決方案」,只要它的價格便宜..

  • 也許是可能的PC通過USB線連接兩臺發送現實的鍵盤按鈕的用途按下從PC2到PC1的信號?

那麼這是什麼方法?

+0

我無法理解你在這裏的意思。如果您準備好有硬件解決方案,是不是隻是一個鍵盤? – 2012-04-26 21:17:36

+0

使用SendInput()注入的鍵盤事件與驅動程序生成的鍵盤事件無法區分。所以它模擬了現實的按鍵,無法通過任何方式或手段來區分差異。 – 2012-04-27 00:19:54

+0

DavidHeffernan我需要能夠遠程控制一臺PC的鍵盤 - 從另一臺(通過局域網,更精確)。所有按鍵都將由軟件(C#WinForms)生成,而不是硬件(即鍵盤)。無論如何, @HansPassant你百分百肯定嗎?因爲如果這就是事實 - 我建議你把這個評論寫成我的問題的「答案」。我會很樂意接受它。 – Alex 2012-04-27 07:01:50

回答

2

您可以通過全局鍵盤鉤子(WH_KEYBOARD_LL)來識別與SendInput()一起發送的鍵盤事件。 它的回調方法LowLevelKeyboardProc收到KBDLLHOOKSTRUCT作爲參數。

如果在KBDLLHOOKSTRUCT.flags鍵盤事件中使用SendInput()注入了LLKHF_INJECTED標誌。