首页
/
每日頭條
/
科技
/
delphi開發中間件
delphi開發中間件
更新时间:2026-03-22 15:54:55

我的理想是能夠寫出一個可以永不封号的遊戲外G

嗯,所以需要學習Windows下編程,最近好不容易有一點點空餘時間,抓緊時間讀書【Delphi下深入Windows編程】,人醜就該多讀書

鈎子原理

定義:

消息鈎子是創建鈎子時在Windows的消息處理鍊中插入一個函數,一旦鈎子安裝成功,就可以監控消息,那麼向所有應用程序發送的消息都會先經過此函數

安裝鈎子之前的Windows消息執行流程

delphi開發中間件(Delphi下深入Windows編程之鈎子原理一)1

安裝鈎子之後

delphi開發中間件(Delphi下深入Windows編程之鈎子原理一)2

注意

系統鈎子程序必須是動态鍊接庫DLL,不能在可執行文件EXE中完成,這是因為可執行文件在其他進程(另一個可執行文件)中是不可見的,無法實現鈎子功能,然而DLL卻可以映射到其他進程的空間中去

兩個問題:鈎子的分類、鈎子安裝的順序

  • 鈎子有多種,分别用于捕獲某一特定類型或某一範圍的消息,例如鍵盤消息、鼠标消息等
  • 對于每種類型的鈎子由系統來維護一個鈎子鍊,最近安裝的鈎子放在鍊的開始,而最先安裝的鈎子放在最後,也就是後加入的鈎子先獲得控制權
挂鈎

這一步其實很容易實現,我們需要使用Windows API 函數,隻是這個函數的參數有點多,但是萬幸不需要我每一個都構造出來,挂鈎函數SetWindowsHookEx 将安裝應用程序定義的鈎子過程到鈎子鍊中

function SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc; hmod: HINST; dwThreadId: DWORD): HHOOK; stdcall;

參數說明

  • idHook:指定安裝鈎子的類型,這是最麻煩的一個參數,其取值如下

delphi開發中間件(Delphi下深入Windows編程之鈎子原理一)3

  • lpfn :指定鈎子函數的地址,與鈎子函數類型有關
  • hMod: 指定毀掉函數的實例,在Delphi中一般設置為HInstance
  • dwThreadId:參數指定了線程ID。鈎子函數能夠監視由dwThreadId參數定義的線程,或者系統中所有的線程。使用它來過濾并在系統或窗口處理之前處理特定的消息。如果該值為零,表示這個挂鈎可以在所有的線程内調用
鈎子鍊

得到控制權的鈎子在得到控制權之後,如果想要改消息繼續傳遞給下一個鈎子,那麼它必須調用CallNextHookEx函數來傳遞它,否則建議直接返回0

挂鈎函數的參數都與挂鈎函數的類型有關,但是都有一個相同點:nCode 參數的值可以用來調用挂鈎鍊中的下一個挂鈎函數,調用下一個挂鈎函數要用到 CallNextHookEx 函數,其聲明如下:

Result:=CallNextHookEx(hhk:HHook;nCode:Integer;wParam:WPARAM;lParam:LPARAM);

參數說明:

  • hhk 是當前鈎子句柄,由建立鈎子時SetWindowsHookEx的返回值
  • nCode 用于調用下一個挂鈎函數
  • wParam、lParam都是挂鈎類型和挂鈎函數有關的參數
摘鈎

如果要撤銷當前已安裝的鈎子,則要調用另外一個函數 UnhookWindowsHookEx。函數聲明如下:

UnhookWindowsHookEx( hhk:HHook{待撤銷的鈎子句柄} ):BOOL;

如果主程序調用 UnhookWindowsHookEx 函數把DLL 注入其他進程後,在不同的操作系統下有可能并不會立即退出某些不活動的進程,因此,建議使用SendMessage 向所有進程廣播一條消息,從而使DLL完全退出所有的進程,如:SendMessage(HWND,BROADCAST,WM_SETINGCNANGE,0,0)

此次分享沒有代碼實現,所有的技術都是先有理論,後有技術實現,代碼實現後續篇章補上

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
蘋果12手機鈴聲怎麼設置
蘋果12手機鈴聲怎麼設置
以Iphone12,ios14為例:打開蘋果手機中自帶的設置APP,點擊進入“聲音與觸感”一欄。在聲音與觸感界面内找到“電話鈴聲”這一個選項,點擊進入。在電話鈴聲界面中,可以看到默認鈴聲的下方有多個其他類型的系統自帶鈴聲,點擊即可設置。如果不滿意系統自帶的鈴聲,也可以點擊“鈴聲商店”按鈕選擇更多類型的鈴聲。
2026-03-22
11個月大的寶寶早教方法小技巧
11個月大的寶寶早教方法小技巧
第一、對寶寶多說話,說話時要溫聲細語,讓寶寶感受到來自外界的溫柔,平時在寶寶面前不要大吼大叫,因為寶寶的性格是和成長的環境有關系的。第二、鼓勵寶寶走路。11個月大的寶寶基本已經會在父母的攙扶下走路了,平時要多鼓勵寶寶自己扶着欄杆之類的東西走路,鍛煉寶寶行走的能力。第三、平時給寶寶聽一些兒歌,11個月的寶寶聽到歡快的兒歌會受到熏陶,這可以培養寶寶聽音樂的習慣。第四、讓寶寶拿着水彩筆在紙上塗鴉,寶寶看
2026-03-22
怎麼查文件傳輸助手記錄
怎麼查文件傳輸助手記錄
1、首先在手機桌面上點擊打開微信”。2、進入微信的主頁面,點擊搜索欄,然後輸入文件”就會自動跳出搜索項,點擊下方的文件傳輸助手”。3、接着點擊文件傳輸助手”,就會自動跳轉到文件傳輸助手”的聊天頁面了。4、最後在文件傳輸助手”聊天頁面裡即可查詢自己以往的傳輸記錄。
2026-03-22
蘋果快捷指令在哪
蘋果快捷指令在哪
以iPhone12、ios14為例。1、首先打開蘋果手機自帶的快捷指令APP;2、然後在打開的軟件頁面中,創建個人自動化;3、接着在打開的頁面中,下拉找到低電量模式;4、選擇當低電量模式關閉,點擊下一步;5、然後在打開的頁面中,輸入想提醒的文字。編輯完成後。可以點擊右下角試聽;6、将手機設置為低電量模式,然後關閉低電量模式,即可聽到提醒。
2026-03-22
蘋果手機怎麼檢測是不是新機
蘋果手機怎麼檢測是不是新機
1、首先想要查詢必須先找到自己手機的序列号,打開手機設置選項。2、在設置選項中找到【通用選項】,點擊打開【通用選項】。3、在通用中找到【關于本機選項】,點擊【關于本機選項】。4、在關于本機選項中我們就可以看到本機的序列号、版本、型号等一些信息。5、打開蘋果官網,輸入手機的序列号即可查詢手機是否是新機。
2026-03-22
Copyright 2023-2026 - www.tftnews.com All Rights Reserved