1:WH_KEYBOARD可以截取到键盘的按下和放起,但是WH_KEYBOARD_LL确不行,老是显示E,这是为什么?DLL里面内容如下unit HookKey_Unit;interface
uses windows,messages;
const
WM_HOOKKEY = WM_USER + $1000;
WH_KEYBOARD_LL = 13;//windows.pas里面没有这个,后来搜了一下看别人这样定义我就加上去,还是不行.
procedure HookOn; stdcall;
procedure HookOff; stdcall;implementation
var
HookDeTeclado : HHook;
FileMapHandle : THandle;
PViewInteger : ^Integer;function CallBackDelHook( Code : Integer;
wParam : WPARAM;
lParam : LPARAM
) : LRESULT; stdcall;begin
if code=HC_ACTION then
begin
FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False,'TestHook');
if FileMapHandle<>0 then
begin
PViewInteger:=MapViewOfFile(FileMapHandle,FILE_MAP_READ,0,0,0);
PostMessage(PViewInteger^,WM_HOOKKEY,wParam,lParam);
UnmapViewOfFile(PViewInteger);
CloseHandle(FileMapHandle);
end;
end;
Result := CallNextHookEx(HookDeTeclado, Code, wParam, lParam)
end;procedure HookOn; stdcall;
begin
HookDeTeclado:=SetWindowsHookEx(WH_KEYBOARD_LL, CallBackDelHook, HInstance , 0);
end;
2:如何通过枚举所有消息钩子给另一个程序里面通过DLL挂起的系统钩子?
就是我把一个程序打开了2遍,本来都市挂钩的,结果第2个钩子挂起后第一个钩子就无效了,想枚举一下当前哪些消息钩子不使用就强行脱钩
uses windows,messages;
const
WM_HOOKKEY = WM_USER + $1000;
WH_KEYBOARD_LL = 13;//windows.pas里面没有这个,后来搜了一下看别人这样定义我就加上去,还是不行.
procedure HookOn; stdcall;
procedure HookOff; stdcall;implementation
var
HookDeTeclado : HHook;
FileMapHandle : THandle;
PViewInteger : ^Integer;function CallBackDelHook( Code : Integer;
wParam : WPARAM;
lParam : LPARAM
) : LRESULT; stdcall;begin
if code=HC_ACTION then
begin
FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False,'TestHook');
if FileMapHandle<>0 then
begin
PViewInteger:=MapViewOfFile(FileMapHandle,FILE_MAP_READ,0,0,0);
PostMessage(PViewInteger^,WM_HOOKKEY,wParam,lParam);
UnmapViewOfFile(PViewInteger);
CloseHandle(FileMapHandle);
end;
end;
Result := CallNextHookEx(HookDeTeclado, Code, wParam, lParam)
end;procedure HookOn; stdcall;
begin
HookDeTeclado:=SetWindowsHookEx(WH_KEYBOARD_LL, CallBackDelHook, HInstance , 0);
end;
2:如何通过枚举所有消息钩子给另一个程序里面通过DLL挂起的系统钩子?
就是我把一个程序打开了2遍,本来都市挂钩的,结果第2个钩子挂起后第一个钩子就无效了,想枚举一下当前哪些消息钩子不使用就强行脱钩
第一个,MSDN上有,Delphi的帮助系统没有,所以还是上MSDN看吧