簡單全局HOOK攔截大部分鍵盤消息


前言:學習HOOK中,
萬一老師講解HOOK入門教程:http://www.cnblogs.com/del/category/124150.html

http://www.cnblogs.com/del/category/124150.html

正題:全局HOOK攔截大部分鍵盤消息,Ctrl+alt+del 同Num Lock 目前測試無法截獲。

寫全局Hook基本步驟:
因為為全局Hook,要用到dll,以后就不知道需要不…………

一.創建dll
1.聲明同實現回調函數
2.創建安裝鈎子函數
3.創建卸載鈎子函數
4.按照dll格式輸出函數

二、創建exe調用dll


源代碼:

///////////////////////////dll代碼////////////////////////////////////
//Delphi代碼: dll代碼

library MyHook;
uses
 SysUtils,
 Windows,
 Messages,
 Classes;

{$R *.res}
var
hook: HHOOK; {鈎子變量}

//聲明實現回調函數
function KeyHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := 1; //1為殺掉,0為放過
end;

//創建安裝鈎子函數
function SetHook: Boolean; stdcall;
begin
 hook := SetWindowsHookEx(WH_KEYBOARD, @keyHook, HInstance, 0);
 Result := hook <> 0;
end;


//創建卸載鈎子函數
function DelHook: Boolean; stdcall;
begin
 Result := UnhookWindowsHookEx(hook);
end;

{按 DLL 的要求輸出函數}
exports
 SetHook name 'SetHook',
 DelHook name 'DelHook',
 keyHook name 'keyHook';

end.


///////////////////////////EXE代碼////////////////////////////////////

//Delphi代碼: EXE
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
 Button1: TButton;
 Button2: TButton;
 Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;

{DLL 中的函數聲明}
function SetHook: Boolean; stdcall;
function DelHook: Boolean; stdcall;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{DLL 中的函數實現}
function SetHook; external 'MyHook.dll' name 'SetHook';
function DelHook; external 'MyHook.dll' name 'DelHook';

{安裝鈎子}
procedure TForm1.Button1Click(Sender: TObject);
begin
 SetHook;
end;

{卸載鈎子}
procedure TForm1.Button2Click(Sender: TObject);
begin
 DelHook;
end;


{載次卸載鈎子}
procedure TForm1.FormDestroy(Sender: TObject);
begin
 DelHook;
end;

end.

 

 

//看了這么多例程,只有這個最讓人懂~ 全文:http://www.cnblogs.com/piaohun/archive/2008/07/06/1237031.html


免責聲明!

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



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