=========================================================
модуль
=========================================================
unit
Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Novator, StdCtrls;
type
TForm1 =
class
(TForm)
procedure
FormCreate(Sender: TObject);
procedure
FormDestroy(Sender: TObject);
private
procedure
WndProc(
var
Msg: TMessage); override;
public
end
;
var
Form1: TForm1;
Par:ParamConnect;
hDLL: THandle;
WM_MYKEYHOOK:
Cardinal
;
implementation
{$R *.dfm}
procedure
TForm1
.
FormCreate(Sender: TObject);
var
Hook:
procedure
(switch :
Boolean
; hMainProg: HWND) stdcall;
begin
Par
.
Host :=
'localhost'
;
Par
.
Port :=
1067
;
Par
.
AOwner := Self;
WM_MYKEYHOOK:= RegisterWindowMessage(
'WM_MYKEYHOOK'
);
@hook:=
nil
;
hDLL:= LoadLibrary(
PChar
(
'keyhook.dll'
));
@hook:=GetProcAddress(Hdll,
'hook'
);
hook(
true
, Form1
.
Handle);
end
;
procedure
TForm1
.
WndProc(
var
Msg: TMessage);
begin
inherited
;
if
Msg
.
Msg = WM_MYKEYHOOK
then
begin
If
Msg
.
wParam = VK_F8
then
Begin
Exit;
End
;
If
Msg
.
WParam = VK_F5
then
Begin
Exit;
End
;
If
Msg
.
WParam = VK_ESCAPE
then
Begin
Exit;
End
;
End
;
end
;
procedure
TForm1
.
FormDestroy(Sender: TObject);
var
Hook:
procedure
(switch :
Boolean
; hMainProg: HWND) stdcall;
begin
@hook:=
nil
;
@hook:=GetProcAddress(Hdll,
'hook'
);
hook(
false
, Form1
.
Handle);
end
;
end
.
==========================================================
библиотека
==========================================================
library
keyhook;
uses
SysUtils,
Windows,
Messages,
Forms;
var
CurHook:HWND;
WM_MYKEYHOOK:
Cardinal
;
function
KeyboardProc(code :
integer
; wParam :
word
; lParam :
longint
) :
longint
; stdcall;
Var
AppWnd:HWND;
Begin
if
code <
0
then
begin
Result:= CallNextHookEx(CurHook, Code, wParam, lParam);
Exit;
end
;
CallNextHookEx(CurHook, Code, wParam, lParam);
Result:=
0
;
if
((lParam
and
KF_UP)=
0
)
and
((wParam=VK_F5)
or
(wParam=VK_F8)
or
(wParam=VK_ESCAPE))
then
begin
AppWnd:= GetForegroundWindow();
SendMessage(HWND_BROADCAST, WM_MYKEYHOOK, wParam, AppWnd);
end
;
end
;
procedure
hook(switch :
Boolean
; hMainProg: HWND) export; stdcall;
begin
if
switch=
true
then
begin
CurHook:= SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance,
0
);
if
CurHook <>
0
then
MessageBox(
0
,
'KEYBOARD HOOK установлен !'
,
'Message from keyhook.dll'
,
0
)
else
MessageBox(
0
,
'HOOK установить не удалось !'
,
'Message from keyhook.dll'
,
0
);
end
else
begin
if
UnhookWindowsHookEx(CurHook)
then
MessageBox(
0
,
'HOOK снят !'
,
'Message from keyhook.dll'
,
0
)
else
MessageBox(
0
,
'HOOK снять не удалось !'
,
'Message from keyhook.dll'
,
0
);
end
;
end
;
exports
hook;
begin
WM_MYKEYHOOK:= RegisterWindowMessage(
'WM_MYKEYHOOK'
);
end
.