2009-10-01 61 views
5

我有一個系統範圍的鍵盤鉤子DLL,我已經創建了多年在Windows XP中成功運行的DLL。在Vista和更高版本上的系統寬鍵盤鉤子

但是,似乎在某些更高版本的Windows(Vista Home Premium和Windows 7,命名一對)中,掛鉤要麼根本不起作用,要麼僅在本地安裝在安裝的應用程序中它。

我看到它在互聯網上的幾個地方建議在SetWindowsHookEx的調用中將WH-KEYBOARD改爲WH-KEYBOARD-LL,但是當我嘗試它時,這似乎沒有幫助。除了將鉤子類型更改爲WH-KEYBOARD-LL之外,還有其他需要更改的內容嗎?

(PS:我必須定義WH-鍵盤LL爲13,因爲它不是在德爾福定義我假設這是正確的。)

+0

根據http://pinvoke.net/default.aspx/Enums/HookType.html,是的,WH_KEYBOARD_LL是13。 – 2009-10-01 19:43:22

回答

8

確保託管掛鉤的過程是相同的您想要掛鉤的應用程序的特權級別。鍵盤和其他掛鉤具有很高的安全風險,因此Vista和更高版本被更改爲只允許在共同的特定安全環境中進行全系統掛鉤。換句話說,如果你用用戶權限啓動鉤子主機進程,它將只鉤住處於相同特權級別的進程。如果你仔細想想,這是有道理的,因爲你不希望用戶級進程能夠將代碼注入到管理級進程中。這在很多層面上都很糟糕。