[英]Global low level keyboard hook - Race Condition
我編寫了一個包含WinAPI低級鍵盤鈎子的ac#應用程序,我用它來阻止除字母數字鍵以外的所有鍵盤。
問題是 - 其他程序(那些從登錄開始的程序)也有鍵盤鈎子(啟動計算器,瀏覽器等應用程序)。 在我的鈎子回調到達之前,這些程序已經打開了這些應用程序,因此,我無法停止操作。
有沒有辦法確保我的鈎子在其他人之前被調用?
編輯
清除混淆 - 我的應用程序是一個沒有安裝程序的可執行文件。 它按需運行。
我需要能夠接管其他鈎子 - 或者只是強制我的鈎子回調首先被調用 - 盡管其他人已經調用了SetWindowsHookEx
方法。
雖然它沒有以編程的方式回答如何做到這一點,但如果我們從不同的角度來看待你的具體問題,可能會有一個可接受的解決方案......
怎么樣去二手商店,買一個便宜的USB鍵盤,然后剪斷你不想讓你兒子使用的鑰匙的連接? 然后,您可以將USB連接到現有鍵盤的USB端口,只需在兒子玩耍時將鍵盤推開即可。
完成后,斷開兒子的鍵盤並將其移回原位。
否則,我認為您可能需要安裝WH_DEBUG掛鈎以獲取鍵盤消息,然后才能將其傳遞給任何其他掛鈎。
DebugProc函數
系統在調用與任何類型的掛鈎相關聯的掛鈎過程之前調用此函數。 系統將有關要調用的鈎子的信息傳遞給DebugProc鈎子過程,該過程檢查信息並確定是否允許調用鈎子。
DebugProc將傳遞在wParam中調用的鈎子類型(在您的情況下為WH_KEYBOARD_LL ),以及lParam中的DEBUGHOOKINFO結構,其中包含將傳遞給鈎子鏈的實際WH_KEYBOARD_LL鈎子信息。
你不能使用你的安裝程序來編輯
[HKEY_CURRENT_USER \\軟件\\微軟\\的Windows \\ CurrentVersion \\運行]
注冊表值? 我沒有明確地試圖完成你正在嘗試做的事情......我不確定你是否可以從安裝程序重新排序這些鍵值,但這應該足夠早地抓住它...
或者其中之一:[HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Run] [HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ RunOnce] [HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ RunServices] [HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ RunServicesOnce] [HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ Windows NT \\ CurrentVersion \\ Winlogon \\ Userinit]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.