library Project2;
uses
SysUtils,
Classes,
uHookKeyAndMouse in 'uHookKeyAndMouse.pas'; {$R *.res} begin
StartHookKeyMouse;
end.
unit uHookKeyAndMouse;
interface uses
Windows,Messages,SysUtils; const
WH_KEYBOARD_LL =13;
WH_MOUSE_LL =14;
type
tagKBDLLHOOKSTRUCT = packed record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
type
PMSLLHOOKSTRUCT=^MSLLHOOKSTRUCT;
MSLLHOOKSTRUCT = record
pt:TPoint;
mouseData:DWORD;
flags:DWORD;
time:DWORD;
dwExtraInfo:DWORD;
end; procedure StartHookKeyMouse;
procedure StopHookKeyMouse; implementation var
hhkLowLevelKybd:HHook=0;
hhkLowLevelMouse:HHook=0; Procedure WriteTxt(sFileName,sText:String); //写txt文件
Var
F:TextFile;
Begin
AssignFile(F,sFileName);
IF FileExists(sFileName) Then
Append(F)
Else
ReWrite(F);
WriteLn(F,sText);
CloseFile(F);
End; function LowLevelKeyboardProc(nCode:Integer; WParam:WPARAM; LParam:LPARAM):LRESULT; stdcall;
var
p: PKBDLLHOOKSTRUCT;
begin
Result:=0;
p := PKBDLLHOOKSTRUCT(lParam);
if (WParam=256) or (WParam=257) then // and (p.vkCode=13) then
begin
if p.vkCode=13 then
begin
WriteTxt('c:\0.txt',inttostr(p.vkCode));
end;
end;
Result:=0;
if nCode <>0 then Result:=CallNextHookEx(0,nCode,WParam,LParam);
end; function LowLevelMouseProc(nCode:Integer; WParam:WPARAM; LParam:LPARAM):LRESULT; stdcall;
var
p:PMSLLHOOKSTRUCT;
begin
Result:=0;
p:=PMSLLHOOKSTRUCT(LParam);
if (WParam=513) or (WParam=514) then
begin
if (p.pt.X>300) and (p.pt.X <500) and (p.pt.y>100) and (p.pt.y <600) then
begin
WriteTxt('c:\0.txt',inttostr(WParam)+'////////////'+inttostr(p.pt.X)+'/'+inttostr(p.pt.y));
end;
end;
Result:=0;
if nCode <>0 then Result:=CallNextHookEx(0,nCode,WParam,LParam);
end; procedure StartHookKeyMouse;
begin
if hhkLowLevelKybd = 0 then
begin
hhkLowLevelKybd := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, Hinstance, 0);
end;
if hhkLowLevelMouse = 0 then
begin
hhkLowLevelMouse:=SetWindowsHookEx(WH_MOUSE_LL,LowlevelMouseProc,HInstance,0);
end;
WriteTxt('c:\0.txt','钩子安装成功!id:'+inttostr(hhkLowLevelKybd)+'/'+inttostr(hhkLowLevelMouse));
end; procedure StopHookKeyMouse;
begin
if hhkLowLevelKybd <> 0 then
begin
UnhookWindowsHookEx(hhkLowLevelKybd);
hhkLowLevelKybd:=0;
end;
if hhkLowLevelMouse <> 0 then
begin
UnHookWindowsHookEx(hhkLowLevelMouse);
hhkLowLevelMouse:=0;
end;
end; initialization
hhkLowLevelKybd:=0;
hhkLowLevelMouse:=0;
finalization
if hhkLowLevelKybd <> 0 then UnhookWindowsHookEx(hhkLowLevelKybd);
if hhkLowLevelMouse <> 0 then UnhookWindowsHookEx(hhkLowLevelMouse);
end.
就像发神经一样,有时候系统加载正常,有时候不行, 记录不正常的
钩子安装成功!id:7536755/2097329
就这样没了.
正常的
钩子安装成功!id:3539541/6095331
13
13
表示回车. 为什么会这样呢?得到了钩子ID就说明成功安装了啊,怎么会不行呢?
DLL是通过explorer来启动的,可以看到已经加载进去了,钩子也钩上了,但是,为什么有时候可以有时候不行
难道和系统有关系吗?
uses
SysUtils,
Classes,
uHookKeyAndMouse in 'uHookKeyAndMouse.pas'; {$R *.res} begin
StartHookKeyMouse;
end.
unit uHookKeyAndMouse;
interface uses
Windows,Messages,SysUtils; const
WH_KEYBOARD_LL =13;
WH_MOUSE_LL =14;
type
tagKBDLLHOOKSTRUCT = packed record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
type
PMSLLHOOKSTRUCT=^MSLLHOOKSTRUCT;
MSLLHOOKSTRUCT = record
pt:TPoint;
mouseData:DWORD;
flags:DWORD;
time:DWORD;
dwExtraInfo:DWORD;
end; procedure StartHookKeyMouse;
procedure StopHookKeyMouse; implementation var
hhkLowLevelKybd:HHook=0;
hhkLowLevelMouse:HHook=0; Procedure WriteTxt(sFileName,sText:String); //写txt文件
Var
F:TextFile;
Begin
AssignFile(F,sFileName);
IF FileExists(sFileName) Then
Append(F)
Else
ReWrite(F);
WriteLn(F,sText);
CloseFile(F);
End; function LowLevelKeyboardProc(nCode:Integer; WParam:WPARAM; LParam:LPARAM):LRESULT; stdcall;
var
p: PKBDLLHOOKSTRUCT;
begin
Result:=0;
p := PKBDLLHOOKSTRUCT(lParam);
if (WParam=256) or (WParam=257) then // and (p.vkCode=13) then
begin
if p.vkCode=13 then
begin
WriteTxt('c:\0.txt',inttostr(p.vkCode));
end;
end;
Result:=0;
if nCode <>0 then Result:=CallNextHookEx(0,nCode,WParam,LParam);
end; function LowLevelMouseProc(nCode:Integer; WParam:WPARAM; LParam:LPARAM):LRESULT; stdcall;
var
p:PMSLLHOOKSTRUCT;
begin
Result:=0;
p:=PMSLLHOOKSTRUCT(LParam);
if (WParam=513) or (WParam=514) then
begin
if (p.pt.X>300) and (p.pt.X <500) and (p.pt.y>100) and (p.pt.y <600) then
begin
WriteTxt('c:\0.txt',inttostr(WParam)+'////////////'+inttostr(p.pt.X)+'/'+inttostr(p.pt.y));
end;
end;
Result:=0;
if nCode <>0 then Result:=CallNextHookEx(0,nCode,WParam,LParam);
end; procedure StartHookKeyMouse;
begin
if hhkLowLevelKybd = 0 then
begin
hhkLowLevelKybd := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, Hinstance, 0);
end;
if hhkLowLevelMouse = 0 then
begin
hhkLowLevelMouse:=SetWindowsHookEx(WH_MOUSE_LL,LowlevelMouseProc,HInstance,0);
end;
WriteTxt('c:\0.txt','钩子安装成功!id:'+inttostr(hhkLowLevelKybd)+'/'+inttostr(hhkLowLevelMouse));
end; procedure StopHookKeyMouse;
begin
if hhkLowLevelKybd <> 0 then
begin
UnhookWindowsHookEx(hhkLowLevelKybd);
hhkLowLevelKybd:=0;
end;
if hhkLowLevelMouse <> 0 then
begin
UnHookWindowsHookEx(hhkLowLevelMouse);
hhkLowLevelMouse:=0;
end;
end; initialization
hhkLowLevelKybd:=0;
hhkLowLevelMouse:=0;
finalization
if hhkLowLevelKybd <> 0 then UnhookWindowsHookEx(hhkLowLevelKybd);
if hhkLowLevelMouse <> 0 then UnhookWindowsHookEx(hhkLowLevelMouse);
end.
就像发神经一样,有时候系统加载正常,有时候不行, 记录不正常的
钩子安装成功!id:7536755/2097329
就这样没了.
正常的
钩子安装成功!id:3539541/6095331
13
13
表示回车. 为什么会这样呢?得到了钩子ID就说明成功安装了啊,怎么会不行呢?
DLL是通过explorer来启动的,可以看到已经加载进去了,钩子也钩上了,但是,为什么有时候可以有时候不行
难道和系统有关系吗?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货