前言:學習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.
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.
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