簡體   English   中英

全球低級鍵盤鈎 - 比賽條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM