1,183
社区成员
发帖
与我相关
我的任务
分享
var
Form1: TForm1;
hhk: HHOOK;
function GetMsgProc(nCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
implementation
{$R *.dfm}
function GetMsgProc(nCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
begin
result := 1;
if nCode<>HC_ACTION then exit;
MessageBox(0,'ok','ok',MB_OK);
result := CallNextHookEx(hhk,nCode,wParam,lParam);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hwnd,pid:dword;
begin
try
hwnd := FindWindow('Notepad',nil);
if hwnd=0 then exit;
GetWindowThreadProcessId(hwnd,pid);
if pid=0 then exit;
hhk := SetWindowsHookEx(13,@GetMsgProc,HINSTANCE,pid);
//这里pid改为0就没问题,可以成功HOOK,如果设置为找到的pid,就HOOK失败,这个pid和任务管理器的pid是一致的。
//请问为什么HOOK失败呢?
if hhk=0 then exit;
Caption := 'hook on';
except
Caption := '出错';
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if (hhk<>0) and UnHookWindowsHookEx(hhk) then Caption := 'unhook';
end;