- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
声明:本贴是转的,例子不错,适合新手。找了好长时间才找到的。
-
- Hook32.dpr 源代码:
- library Hook32;
-
- uses
- SysUtils,
- Forms,
- Classes,
- myDLl in 'myDLl.pas' {Form1};
-
-
- {$R *.res}
-
- exports
- HookOn,HookOff;
-
- begin
- {Application.Initialize;
- Application.Run; }
- end.
-
- 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
- myDLl.pas 源代码:
- unit myDLl;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Memo1: TMemo;
-
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- function HookProc(nCode:Integer;WParam: WPARAM;LParam:LPARAM):LRESULT;stdcall;
- function HookOn(lpHwnd:HWND;lpType:Longint):Longint;stdcall;export;
- function HookOff:Boolean;stdcall;export;
-
- implementation
-
- var
- hHk: HHOOK=0;
- mhwnd:HWND=0;
- bShow:Integer=1;
- hThread: Cardinal;
- hmod: Pointer; //Hinstance
- hProcessId: Cardinal;
- mMode:Integer;
-
- {$R *.dfm}
-
- function HookProc(nCode:Integer;WParam: WPARAM;LParam:LPARAM):LRESULT;stdcall;
- begin
- //接收按键F8开始挂钩DLL
- if (bShow=1) And (wParam=VK_F8) then
- begin
- bShow:=5;
- Form1:=TForm1.Create(Application);
- Form1.Show;
- ShowCursor(true);
- end;
- if (bShow=2) And (wParam=VK_F8) then
- begin
- bShow:=6;
- Form1.Free;
- end;
-
- if (bShow=3) And (wParam=VK_F8) then
- begin
- bShow:=2;
- end;
-
- if (bShow=4) And (wParam=VK_F8) then
- begin
- bShow:=1;
- end;
- if (bShow=5) then bShow:=3;
- if (bShow=6) then bShow:=4;
- Result := CallNextHookEx(hHk,nCode,WParam,LParam);
- end;
-
- function HookOn(lpHwnd:HWND;lpType:Longint): Longint;stdcall; export;
- begin
- hThread :=GetWindowThreadProcessId(lpHwnd,hmod);
- //注入开始
- if lpHwnd<>0 then hHk :=SetWindowsHookEx(lpType,@HookProc,hInstance,hThread); // WH_KEYBOARD
- Result :=hHk
- end;
-
- function HookOff:Boolean;stdcall; export;
- begin
- if hHk<>0 then
- begin
- //移除挂钩
- UnHookWindowsHookEx(hHk);
- hHk :=0;
- Result :=true;
- end
- else
- Result :=false;
- end;
-
- end.
-
- 》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
- 调用DLL的执行文件Unit1.pas源代码:
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
-
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- function HookOn(lpHwnd:HWND;lpType:Longint):Longint;stdcall;external 'Hook32.dll' name 'HookOn';
- function HookOff:Boolean;stdcall;external 'Hook32.dll' name 'HookOff';
- implementation
-
- {$R *.dfm}
-
-
-
- procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- hookoff;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
-
- h1:HWND;
- begin
-
- h1:=FindWindow(NIL,'无标题 - 记事本');//这是窗口的句柄,要自己找到后,填写入。
- if h1=0 then showmessage('没找到进程!');
- if h1>0 then showmessage('找到进程!');
- sleep(2000);
- HookOn(h1,WH_KEYBOARD);
-
-
- end;
-
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- HookOff;
- end;
-
- end.
复制代码 |
|