我要做个DLL来HOOK键盘消息,大部分已经做出来了思路大概就是这样的比如用户对记事本输入字符"abcd",必须全截下来,并且保证字符不会输入到记事本里.(Result:=0)if code = HC_ACTION then begin
//if GetKeyState(VK_LCONTROL)>0 then begin
if (AllowHook = 'Yes') then begin
FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False,'KeyLib');
if FileMapHandle<>0 then begin
Pint:=MapViewOfFile(FileMapHandle,FILE_MAP_READ,0,0,0);
PostMessage(pint^,WM_HOOKKEY,wParam,lParam);
UnmapViewOfFile(Pint);
CloseHandle(FileMapHandle);
end; //end filemaphande<>0
end;//end getkeystate if
end
else
begin
//Result:=CallNextHookEx(0, Code, wParam, lParam);
Result:=0;
end;我希望不截取任何关于系统的消息,只是截取全部字母和标点符号",./\[]';",如何实现?写了个
if wParam = WM_SYSKEYDOWN 也不管用..请高手指点.
//if GetKeyState(VK_LCONTROL)>0 then begin
if (AllowHook = 'Yes') then begin
FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False,'KeyLib');
if FileMapHandle<>0 then begin
Pint:=MapViewOfFile(FileMapHandle,FILE_MAP_READ,0,0,0);
PostMessage(pint^,WM_HOOKKEY,wParam,lParam);
UnmapViewOfFile(Pint);
CloseHandle(FileMapHandle);
end; //end filemaphande<>0
end;//end getkeystate if
end
else
begin
//Result:=CallNextHookEx(0, Code, wParam, lParam);
Result:=0;
end;我希望不截取任何关于系统的消息,只是截取全部字母和标点符号",./\[]';",如何实现?写了个
if wParam = WM_SYSKEYDOWN 也不管用..请高手指点.
vkCode就是键盘按下的键值。
如果需要,给个邮箱,我给你发个我写的hook.dll你看看。
KBDLLHOOKSTRUCT=record
vkCode:DWORD;
scanCode:DWORD;
flags:DWORD;
time:DWORD;
dwExtraInfo:ulong;
end;
LPKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;function CallBackKeyLib( code:Integer;
wParam:WPARAM;
lParam:LPARAM):LRESULT;stdcall;
var KyCode:LPKBDLLHOOKSTRUCT;
begin
KyCode:=lpkbdllhookstruct(lParam); if code = HC_ACTION then begin
case wParam of
WM_SYSKEYDOWN,WM_SYSKEYUP :
Result:=CallNextHookEx(0,code,wParam,lParam);
end;
if (AllowHook = 'Yes') then begin
FileMapHandle:=OpenFileMapping(FILE_MAP_READ,False,'KeyLib');
if FileMapHandle<>0 then begin
Pint:=MapViewOfFile(FileMapHandle,FILE_MAP_READ,0,0,0);
PostMessage(pint^,WM_HOOKKEY,wParam,lParam);
UnmapViewOfFile(Pint);
CloseHandle(FileMapHandle);
end; //end filemaphande<>0
end;//end getkeystate if
end //end first if
else
begin
//Result:=CallNextHookEx(0, Code, wParam, lParam);
Result:=0;
end;
end;
但是现在,基本上单按系统键不截取了...只是不知道为什么HOOK第一个字符的时候不返回0,而是直接输出第一个字符了..以后的字母都HOOK了,奇怪...第一次写HOOK.不懂...我的信箱:[email protected]