線程專用鈎子和全局鈎子的差別


事實上就是全局和局部的差別
假設能夠用線程Hook實現就最好用線程Hook
由於Hook技術用的不好會大大減少整個Windows系統的性能
這也是為什么WinCE不支持HOOK的原因了
至於鍵盤HOOK用SetWindowsHookEx帶WH_KEYBOARD參數就能夠了
比方你做一個全局的鍵盤HOOK,這樣無論當前激活的應用程序是什么
僅僅要有鍵盤消息,windows都會先問問你的Hook Proc,
“老第,這個鍵怎樣啊?”
完了你的Hook Proc拿過來左看右看,
最后說
“哎呀,我不要這個鍵。還給你”

你說累不累啊。


消息隊列是以線程為基礎的.一個局部HOOK勾掛的是一個進程內全部線程的消息.
此類實現因為不涉及進程CONTEXT切換,是輕量極的HOOK.
全局的HOOK會映射到全部載入USER32.DLL的進程中,事實上是USER32.DLL為這些進程調用LOADLIBRARY來載入HOOK所在的DLL.
而且在全部的消息在被送到消息處理前先調用HOOKPROC.當HOOKPROC決定該消息已經被處理完成,那么就從線程消息隊列里去除該消息.
HOOKPROC本身的調用依照被載入的先后次序從后到前備調用.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM