只要注入a.exe就可以,拦截他里面的一个按钮button1应该不要全局钩子吧? 这样会占很多资源吗?
这是按键钩子, 拦截按钮的要怎么做呢?var
HookH:HHook; //钩子句柄
fileM:THandle; //内存映射文件句柄
PI:^Integer; //映射到主程序句柄变量
function keyhook(Code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var
k:longint;
begin
Result:=1;
if code=HC_ACTION then
begin
if ((GetKeyState($C0) and $8000)<>0) then //~键按下状态
begin
FileM:=OpenFileMapping(FILE_MAP_READ,False,'TestHook');//打开内存映射文件
if (FileM<>0) and (((LParam shr 31)and 1)=0) then //打开成功 and ((LParam shr 31)and 1)=0)有键按下
begin
PI:=MapViewOfFile(FileM,FILE_MAP_READ,0,0,0);
PostMessage(PI^,WM_HookKEY,wParam,lParam);//发送消息 WM_HookKEY
UnmapViewOfFile(PI); //取消映射
CloseHandle(FileM); //关闭内存映射文件
end;
end
else
begin
k:=LParam and $ff0000;
k:=k shr 16;
if k<>41 then
Result:=CallNextHookEx(HookH,code,Wparam,lParam);
end;
end
else
Result:=CallNextHookEx(HookH,code,Wparam,lParam);
end;
这是按键钩子, 拦截按钮的要怎么做呢?var
HookH:HHook; //钩子句柄
fileM:THandle; //内存映射文件句柄
PI:^Integer; //映射到主程序句柄变量
function keyhook(Code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var
k:longint;
begin
Result:=1;
if code=HC_ACTION then
begin
if ((GetKeyState($C0) and $8000)<>0) then //~键按下状态
begin
FileM:=OpenFileMapping(FILE_MAP_READ,False,'TestHook');//打开内存映射文件
if (FileM<>0) and (((LParam shr 31)and 1)=0) then //打开成功 and ((LParam shr 31)and 1)=0)有键按下
begin
PI:=MapViewOfFile(FileM,FILE_MAP_READ,0,0,0);
PostMessage(PI^,WM_HookKEY,wParam,lParam);//发送消息 WM_HookKEY
UnmapViewOfFile(PI); //取消映射
CloseHandle(FileM); //关闭内存映射文件
end;
end
else
begin
k:=LParam and $ff0000;
k:=k shr 16;
if k<>41 then
Result:=CallNextHookEx(HookH,code,Wparam,lParam);
end;
end
else
Result:=CallNextHookEx(HookH,code,Wparam,lParam);
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货