2010-08-09 80 views
5

我用一個簡單的文本框編寫了一個應用程序,該應用程序試圖從他們的打字習慣中識別用戶(按鍵之間的間隔,持續鍵被保持,鍵擊之間的時間間隔, s對於某些用戶來說比a-> v更快,對於其他用戶來說則更短,這取決於打字風格)。這遠非完美,但它確實可以確定風格的中等偏差。使用VB.Net捕獲所有鍵盤事件

我希望將其用作安全監視器的一種形式 - 如果用戶的打字風格不符合識別的模式,請向中央服務器報告。

當然,在這個測試的下一步是開始捕捉到「正規軍」的打字習慣 - 即在瀏覽時,應用程序之間的切換等

我想不出什麼如何做的是捕獲對於所有的應用程序的鍵盤輸入(包括登錄/歡迎屏幕,替代臺式機,等等 - 我沒有理由去解析,有可能不是足夠的輸入反正分析)

免責聲明:是的,我知道這危險地接近寫一個嚴格的鍵盤記錄程序,但如果我想這樣做,我會用C++寫一個鍵盤驅動程序 - 我確信它會比一個笨重的.Net MSIL程序集更容易混淆和更容易混淆。我毫不懷疑我會抵擋「這是一個鍵盤記錄」的意見,但我已經打了一堵牆,需要問一個地方...

我不需要應用程序被隱藏 - 但會理想喜歡在沒有明確的用戶確認的情況下捕獲輸入(超出管理員的安裝範圍) - 如果需要用戶確認,如果它可以是一次性的,我可以忍受(只),並且我有一些方法來監視和報告拒絕。

這在.Net中甚至可能嗎?我能夠找到的唯一例子是通過爲每個看起來笨重的鍵添加一個事件鉤子來操作,我想象的是容易出錯。 - 或者 - 他們輪詢鍵盤狀態以確定按下的鍵。這對我來說沒有好處,因爲a)我需要按鍵的確切時間,所以關鍵的上/下事件是必須的,並且b)它是討厭的。

如果框架被設計爲專門禁止這種情況,那麼我將不得不退回到一些非託管代碼來提供事件。我顯然更喜歡一直使用託管代碼。

任何幫助表示讚賞。

編輯:感謝漢斯帕桑特的答案,這是到目前爲止,我已經找到了最好的資源:http://www.codeguru.com/columns/vb/article.php/c4831

回答

5

谷歌SetWindowsHookEx + WH_KEYBOARD_LL,關鍵字

  • 查詢,谷歌好。這設置了一個低級別的鍵盤鉤子。它不是全局鉤子,因此可以在VB.NET程序中工作。

  • +0

    非常感謝,看起來正是我需要的東西 - 您是否碰巧知道這是否也會從條形碼掃描儀或讀卡器中獲取「模擬」按鍵?我最好喜歡避免捕捉那些(但我可以解決它,如果是這樣,因爲他們「鍵入」非常快速和一致的速度) – Basic 2010-08-09 17:08:38

    +0

    只要他們使用SendInput(就像他們應該),那麼,是的,我也會看到。 – 2010-08-09 17:17:52

    0

    .NET不提供那樣的任何服務,所以你將有進一步走低並使用p/invoke。選項包括:

    • 運鉤用GetAsyncKeyState
    +0

    如前所述,我不認爲輪詢是足夠的,因爲我需要最準確的時間可能的關鍵事件信息 - 而且我要麼輪詢真正的快速(即不合理的CPU用於小型後臺任務),要麼輪詢更加沉靜,在這種情況下我失去了時間分辨率。關於Win Hooks,你指的是什麼?全局鍵鉤子? – Basic 2010-08-09 16:45:23