1. 程式人生 > 其它 >hook函式

hook函式

鉤子(Hook),是Windows訊息處理機制的一個平臺,應用程式可以在上面設定子程以監視指定視窗的某種訊息,而且所監視的視窗可以是其他程序所建立的。當訊息到達後,在目標視窗處理函式之前處理它。鉤子機制允許應用程式截獲處理window訊息或特定事件。 

Windows系統是建立在事件驅動的機制上的,說穿了就是整個系統都是通過訊息的傳遞來實現的。而鉤子是Windows系統中非常重要的系統介面,用它可以截獲並處理送給其他應用程式的訊息,來完成普通應用程式難以實現的功能。鉤子可以監視系統或程序中的各種事件訊息,截獲發往目標視窗的訊息並進行處理。這樣,我們就可以在系統中安裝自定義的鉤子,監視系統中特定事件的發生,完成特定的功能,比如截獲鍵盤、滑鼠的輸入,螢幕取詞,日誌監視等等。可見,利用鉤子可以實現許多特殊而有用的功能。

鉤子實際上是一個處理訊息的程式段,通過系統呼叫,把它掛入系統。每當特定的訊息發出,在沒有到達目的視窗前,鉤子程式就先捕獲該訊息,亦即鉤子函式先得到控制權。這時鉤子函式即可以加工處理(改變)該訊息,也可以不作處理而繼續傳遞該訊息,還可以強制結束訊息的傳遞。

一個Hook都有一個與之相關聯的指標列表,稱之為鉤子連結串列,由系統來維護。這個列表的指標指向指定的,應用程式定義的,被Hook子程呼叫的回撥函式,也就是該鉤子的各個處理子程。當與指定的Hook型別關聯的訊息發生時,系統就把這個訊息傳遞到Hook子程。一些Hook子程可以只監視訊息,或者修改訊息,或者停止訊息的前進,避免這些訊息傳遞到下一個Hook子程或者目的視窗。最近安裝的鉤子放在鏈的開始,而最早安裝的鉤子放在最後,也就是後加入的先獲得控制權。 zdwork.cn

 Windows 並不要求鉤子子程的解除安裝順序一定得和安裝順序相反。每當有一個鉤子被解除安裝,Windows 便釋放其佔用的記憶體,並更新整個Hook連結串列。如果程式安裝了鉤子,但是在尚未解除安裝鉤子之前就結束了,那麼系統會自動為它做解除安裝鉤子的操作。

所謂的hook,就是在不使用 class的情況下,管理裡面的狀態資料,並且把一些邏輯性思維的東西抽取出來,放在一個可共用的空的函式當中。

1.使用Vue3的組合API封裝的可複用的功能函式 2.自定義hook的作用類似於vue2中的mixin(混入)技術 3.自定義hook的優勢:很清楚複用功能程式碼的來源,更清楚易懂。