• 鉤子(HOOK)函數教程(一)

    時間:2010年04月21日 點擊:3767

     
    第一步。了解什么是鉤子。

    我們可以首先從字面上了解鉤子,鉤子是干什么的呢?日常生活中,我們的鉤子是用來鉤住某種東西的,比如,說,魚鉤是用來釣魚的,一旦魚咬了鉤,鉤子就一直鉤住魚了,任憑魚在水里怎么游,也逃不出魚鉤的控制。同樣的,Windows的鉤子Hook也是用來鉤東西的,比較抽象的是他是用來鉤Windows事件或者消息的。最常見的就是鼠標和鍵盤鉤子,用Hook鉤子鉤住鼠標、鍵盤,當你的鼠標、鍵盤有任何操作時,通過Hook就能知道他們都做了什么了,多么形象啊,把老鼠Mouse鉤住了,不管你干什么,都逃不過我鉤子Hook的手掌心。
    技術上講,鉤子(Hook)是Windows消息處理機制的一個很重要的內容,誰叫Windows是基于消息的呢。應用程序可以通過鉤子機制截獲處理Window消息或是其他一些特定事件。
    我們可以在同一個鉤子上掛很多東西。
    想起參加工作前要求被體檢的時候,當你被登記之后,按照你的登記表上的順序,就等著到各個科室一個一個的去檢查吧。每一個科室都有決定你是否繼續的可能,只有通過了這個,你才可以到下一個去,如果沒有通過,那么,你是看不到最后的大夫了,可以直接over回家了。
    如果把體檢比喻為事件的話,當事件發生時,應用程序(體檢過程)可以在相應的鉤子Hook上設置多個鉤子子程序(Hook Procedures)(多個科室的檢查),由其組成一個與鉤子相關聯的指向鉤子函數的指針列表(鉤子鏈表)(體檢表,確定了你要走的順序)。當鉤子所監視的消息出現時(你拿著表格來體檢了),Windows(導診員)首先將其送到調用鏈表中所指向的第一個鉤子函數中(體檢表上第一個科室,一般是身高體重吧,呵呵),鉤子函數將根據其各自的功能(每個科室檢查的項目不一樣?。ο⑦M行監視(有的大夫就隨便看看了事),、修改(碰到好心的大夫還可以幫你往好里添點呢,呵呵)和控制(有的大夫好嚴格?。?,并在處理完成后(當然有的大夫就直接把你刷下了,回家吧,沒有下一個了)把消息傳遞給下一鉤子函數(下一個項目的科室,當然,也可以強制消息的傳遞,直接打發你回家)直至到達鉤子鏈表的末尾(檢查完了?。?。在鉤子函數交出控制權后,被攔截的消息最終仍將交還給窗口處理函數(好了,拿著表去上班吧)。
    雖然鉤子函數對消息的過濾將會略加影響系統的運行效率,但在很多場合下通過鉤子對消息的過濾處理可以完成一些其他方法所不能完成的特殊功能。
    哦,想起來了,金山詞霸的屏幕取詞是不是就是使用Hook實現的吧?
    2007-4-4 Helios

    贊助商鏈接

    熱門內容

    相關內容

    聯系我們

    聯系方式
    亚洲AV口工动漫在线观看无码