日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用钩子函数[3] - 建立一个全局的鼠标钩子

發布時間:2025/7/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用钩子函数[3] - 建立一个全局的鼠标钩子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分兩步:
一、建立 DLL, 并在 DLL 實現鉤子的設置、釋放和鉤子函數;
二、再建一個工程調用測試.

第一步: 做 DLL



先建立一個 DLL 工程, 自動初始的代碼如下(去掉注釋了):
library Project1;usesSysUtils,Classes;{$R *.res}begin end.//把工程保存為 MyHook.dpr, 并實現如下:library MyHook;usesSysUtils,Windows, {鉤子函數都來自 Windows 單元}Messages, {消息 WM_LBUTTONDOWN 定義在 Messages 單元}Classes;{$R *.res}varhook: HHOOK; {鉤子變量}{鉤子函數, 鼠標消息太多(譬如鼠標移動), 必須要有選擇, 這里選擇了鼠標左鍵按下} function MouseHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; beginif wParam = WM_LBUTTONDOWN thenbeginMessageBeep(0);end;Result := CallNextHookEx(hook, nCode, wParam, lParam); end;{建立鉤子} function SetHook: Boolean; stdcall; beginhook := SetWindowsHookEx(WH_MOUSE, @MouseHook, HInstance, 0);Result := hook <> 0; end;{釋放鉤子} function DelHook: Boolean; stdcall; beginResult := UnhookWindowsHookEx(hook); end;{按 DLL 的要求輸出函數} exportsSetHook name 'SetHook',DelHook name 'DelHook',MouseHook name 'MouseHook';//SetHook, DelHook, MouseHook; {如果不需要改名, 可以直接這樣 exports}begin end. 注意: SetWindowsHookEx 的第一個參數 WH_MOUSE 說明這是個鼠標鉤子; 第四個參數 0 說明是全局的.
鼠標鉤子回調函數的格式在 這里

然后按 Ctrl+F9 編譯, 在工程目錄下會生成一個和工程同名的文件, 這里是: MyHook.dll.

第二步: 調用

新建工程后, 保存, 并把剛才制作的 MyHook.dll 復制到這個工程目錄下;
然后添加兩個按鈕, 實現如下:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;{DLL 中的函數聲明}function SetHook: Boolean; stdcall;function DelHook: Boolean; stdcall;varForm1: TForm1;implementation{$R *.dfm}{DLL 中的函數實現, 也就是說明來自那里, 原來叫什么名} function SetHook; external 'MyHook.dll' name 'SetHook'; function DelHook; external 'MyHook.dll' name 'DelHook';{建立鉤子} procedure TForm1.Button1Click(Sender: TObject); beginSetHook; end;{銷毀鉤子} procedure TForm1.Button2Click(Sender: TObject); beginDelHook; end;end. 測試: 點擊第一個按鈕后, 鉤子就啟動了; 這是不管鼠標在哪點一下鼠標左鍵都會 "呯" 的一下; 點擊第二個按鈕可以收回鉤子.

下面是動態調用的方法, 功能和上面完全一直:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}{要先要定義和 DLL 中同樣參數和返回值的的函數類型} typeTDLLFun = function: Boolean; stdcall;{現在需要的 DLL 中的函數的格式都是這樣, 定義一個就夠了}varh: HWND; {聲明一個 DLL 句柄}SetHook, DelHook: TDLLFun; {聲明兩個 TDLLFun 變量}{載入 DLL 并調用其函數} procedure TForm1.Button1Click(Sender: TObject); beginh := LoadLibrary('MyHook.dll'); {載入 DLL 并獲取句柄}if h<>0 thenbeginSetHook := GetProcAddress(h, 'SetHook'); {讓 SetHook 指向 DLL 中相應的函數}DelHook := GetProcAddress(h, 'DelHook'); {讓 DelHook 指向 DLL 中相應的函數}end else ShowMessage('Err');SetHook; {執行鉤子建立函數, 這里的 SetHook 和它指向的函數是同名的, 也可以不同名} end;{銷毀鉤子, 并釋放 DLL} procedure TForm1.Button2Click(Sender: TObject); beginDelHook; {執行鉤子釋放函數}FreeLibrary(h); {釋放 DLL 資源} end;end. 為什么全局鉤子非要在 DLL 中呢?
因為每個 EXE 都是一個獨立而封閉的進程; 而 DLL 則是面向系統的公用資源.
如果一個鉤子不是面向系統的, 恐怕意義不大; 所以在實用中, 鉤子是離不開 DLL 的.

請教大家: 全局鉤子可以做在 "包" 里嗎? 我還沒試過.

轉載于:https://www.cnblogs.com/del/archive/2008/02/26/1082254.html

總結

以上是生活随笔為你收集整理的使用钩子函数[3] - 建立一个全局的鼠标钩子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 疯狂撞击丝袜人妻 | 欧美 日韩 精品 | 日韩一区欧美一区 | 亚洲黄色一区二区 | 国产经典久久 | 亚洲理论片在线观看 | 杏导航aⅴ福利网站 | 亚洲天堂2016 | 国产网站大全 | 国产一区二区中文字幕 | 强开小受嫩苞第一次免费视频 | 天天综合网天天综合色 | 日韩麻豆| 久久久婷 | 少妇性色av| 国产精品自拍区 | 久久久久亚洲AV成人无码国产 | 亚洲高清网站 | 插插插日日日 | 午夜成人免费视频 | 天天视频天天爽 | 国产精品久久久久久久一区二区 | 在线免费看a | 欧洲性生活视频 | 国产探花精品在线 | 美腿丝袜亚洲综合 | 国产极品视频在线观看 | 婷婷激情五月 | 日本成人一区二区 | 久久在线免费视频 | 亚洲人成人网 | 国产黄色自拍视频 | 日韩在线观看免费 | 丰满岳妇乱一区二区三区 | 国产手机在线视频 | 美女被草视频在线观看 | 在线观看wwww | 福利国产视频 | 日日夜夜综合 | 美女扒开腿让男人操 | 女人做爰全过程免费观看美女 | 成人xxx视频| 91视频影院 | 91不卡视频 | 免费激情网址 | 又黄又刺激的视频 | 中文字幕在线播 | 91视频高清 | 一本大道综合伊人精品热热 | 人人干干 | 国产粉嫩呻吟一区二区三区 | 日本高清视频在线 | 国产成人免费电影 | 好吊一区二区三区视频 | 久久精品噜噜噜成人 | 800av在线视频 | 日韩少妇一区二区三区 | 欧美在线一级视频 | 日韩极品在线 | 欧美在线性视频 | 久久国产乱 | 国产亚洲欧美精品久久久www | 毛片基地在线播放 | 一区影视| 亚洲在线视频播放 | 99在线小视频 | 囯产精品久久久久久 | 免费观看黄一级视频 | 欧美在线不卡 | 中文字幕日韩在线播放 | 男女交性视频播放 | 成人做爰69片免费 | 醉酒壮男gay强迫野外xx | 黄网站色 | 色综合图片区 | 小箩莉末发育娇小性色xxxx | 美女黄色一级 | 女人性高潮视频 | av噜噜 | 大肉大捧一进一出好爽 | 国内外免费激情视频 | 电影寂寞少女免费观看 | 国产精品久久久久久一区二区 | 91精品国产乱码在线观看 | 超碰天堂 | 午夜性色 | 国产高清久久 | 亚洲成人免费影院 | 国产精品综合久久久久久 | 成人女同av免费观看 | 亚洲成人精品一区 | jizzjizz视频 | 色综综| 开心激情五月婷婷 | 欧美又粗又长又爽做受 | 黑人玩弄人妻一区二区绿帽子 | 亚洲AV无码精品色毛片浪潮 | 欧美深性狂猛ⅹxxx深喉 | 久久激情小说 |