[問題] BCB撰寫hook問題

看板C_and_CPP作者 (低調中....)時間15年前 (2010/11/26 14:44), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 想要使用BCB開發利用hook去攔截鍵盤滑鼠訊息,但我不想要用DLL injection的方式, 想要把hook寫在一整個專案模組裡(compile後就只要有一個exe檔執行), 但是查詢相關資料只有用DLL寫法來達到而已... 我有先測試這個hook: g_kb_hook = SetWindowsHookEx (WH_KEYBOARD_LL, (HOOKPROC)kb_proc, GetModuleHandle(NULL),0); (其中g_kb_hook一開始就有宣告的HHOOK g_kb_hook = NULL; kb_proc 裡面寫得是抓取訊號後要做得事) 那這個程式我可以順利的擷取到keyboard的訊號,然後輸出到我的表單裡, 但是此程式對於其它OS上的processes同樣也會有訊息傳入, 但今天我想要的是你電腦裡的滑鼠鍵盤完全不能輸入訊號到OS裡(可能除了系統快截鍵), 都會先被我的程式攔截住再去處理(或許就可以自訂熱鍵再解除鎖定) 我嘗試使用Hook功能中的WH_JOURNALRECORD,執行巨集功能,程式改成: g_kb_hook = SetWindowsHookEx (WH_JOURNALRECORD, (HOOKPROC)kb_proc, GetModuleHandle(NULL),0); OK!好極了! 雖然發現鍵盤滑鼠都沒有作用了,但是我的程式表單根本攔截不到訊息, 不能用自訂的快捷鍵解除(只能Ctrl+ALT+DEL) 希望得到的正確結果: 主要希望不要用到DLL, 只要寫在同一個專案裡,只產生一個exe 然後程式執行可以攔截掉所有鍵盤滑鼠要輸入的訊息,並且可以對這些訊息去做處理 此時鍵盤滑鼠輸入的訊息完全不能對windows 其它的processes有所作用 程式跑出來的錯誤結果: 要滿足不要用到DLL, 只要寫在同一個專案裡,只產生一個exe 的hook 我只做到可以攔截鍵盤訊號,但是windows其它process還是可以有作用 (也就是開個筆記本還是可以打字上去) 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) BCB, Windows7 64bit 有問題的code: (請善用置底文標色功能) g_kb_hook = SetWindowsHookEx (WH_JOURNALRECORD, (HOOKPROC)kb_proc, GetModuleHandle(NULL),0); 這樣寫只會卡死住,但是輸入的訊息程式根本不理 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.101.191 ※ 編輯: ColdFunction 來自: 163.25.101.191 (11/26 14:45)

11/26 23:54, , 1F
不要用的DLL可以考慮用sys
11/26 23:54, 1F

11/27 00:01, , 2F
把SYS掛在鍵盤驅動之上,監視IRP_MJ_READ
11/27 00:01, 2F

11/27 00:08, , 3F
滿足了原PO不想用到DLL,這樣應該是可以的吧
11/27 00:08, 3F

11/27 15:43, , 4F
樓上的大大這個方法我就完全不熟了@@ 我會就關鍵字
11/27 15:43, 4F

11/27 15:44, , 5F
查查相關資料,或是大大有提供可參考的方向也很感激
11/27 15:44, 5F
文章代碼(AID): #1CxrTIu3 (C_and_CPP)