[問題] BCB撰寫hook問題
( *[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
11/26 23:54, 1F
→
11/27 00:01, , 2F
11/27 00:01, 2F
→
11/27 00:08, , 3F
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