键盘hook问题 本帖最后由 qdtity 于 2010-08-17 19:10:41 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最近我的笔记本F2 F3键坏了,我写了个键盘钩子,改成了F5 F6, 你可以参考一下代码:library HookKeyboard;uses SysUtils, Windows, Messages;{$R *.res}type PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; KBDLLHOOKSTRUCT = record vkCode: DWORD; ScanCode: DWORD; Flags: DWORD; Time: DWORD; dwExtraInfo: DWORD; end;const WH_KEYBOARD_LL = 13;var hHook: Integer;function keyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;//调用键盘钩子,把F2改成F5 F3改成F6var p: PKBDLLHOOKSTRUCT;begin if nCode < 0 then Result:= CallNextHookEx(hHook,nCode,WParam,LParam) else begin p := PKBDLLHOOKSTRUCT(Lparam); case WParam of WM_KEYDOWN,WM_SYSKEYDOWN: //按键后判断所按键 begin if p^.vkCode = VK_F5 then keybd_event(VK_F2, 0, 0, 0); if p^.vkCode = VK_F6 then keybd_event(VK_F3, 0, 0, 0); end; WM_KEYUP,WM_SYSKEYUP: //松开按键后判断所按键 begin if p^.vkCode = VK_F5 then keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0); if p^.vkCode = VK_F6 then keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0); end; end; Result:= CallNextHookEx(hHook,nCode,WParam,LParam); //其他键放下一个钩子 endend;procedure LoadDestroyWndHook; //设置系统挂钩begin hHook:=SetWindowsHookEx(WH_KEYBOARD_LL, keyHookProc, Hinstance,0);end;procedure UnLoadDestroyWndHook; //注销系统挂钩begin UnHookWindowsHookEx(hHook); hHook := 0;end;exports LoadDestroyWndHook, UnLoadDestroyWndHook;end. WH_KEYBOARD_LL这个在哪里定义的 你没看我代码? const WH_KEYBOARD_LL = 13;delphi里没有,翻MSDN翻出来的 看到了,不过不知道怎么回事,使用了WH_KEYBOARD_LL 这个之后连本窗口都没有反应了。使用od调试都没有反映。使用WH_KEYBOARD至少在本窗口好用。 WH_KEYBOARD_LL 不好用,还是WH_KEYBOARD好用问题找到了,是sendmessage的事情,主窗口最小化以后没有接收到消息 我想把INI文件搞成这样,然后根据换行符或者其他办法读出它的行数! 急!!!excel2000控件问题 重分求解:BDE连接Oracle的应用程序打包, 请问在adotable中如何用这种查找?? delphi6如何用程序修改chart1.series[0]的Axis? 有关考勤处理的问题? 求Delphi面向对象编程的中文电子书,下完给分。 移动窗口触发的是哪个消息?? ADOQuery进行查询,内存不足的问题。 如何将一个文件另存为文本文件,急!!! TEdit控件的简单疑问!! delphi 获得cpu硬件信息
SysUtils, Windows, Messages;{$R *.res}type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end;const WH_KEYBOARD_LL = 13;var
hHook: Integer;function keyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
//调用键盘钩子,把F2改成F5 F3改成F6
var
p: PKBDLLHOOKSTRUCT;
begin
if nCode < 0 then
Result:= CallNextHookEx(hHook,nCode,WParam,LParam)
else
begin
p := PKBDLLHOOKSTRUCT(Lparam);
case WParam of
WM_KEYDOWN,WM_SYSKEYDOWN: //按键后判断所按键
begin
if p^.vkCode = VK_F5 then keybd_event(VK_F2, 0, 0, 0);
if p^.vkCode = VK_F6 then keybd_event(VK_F3, 0, 0, 0);
end;
WM_KEYUP,WM_SYSKEYUP: //松开按键后判断所按键
begin
if p^.vkCode = VK_F5 then keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0);
if p^.vkCode = VK_F6 then keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0);
end;
end;
Result:= CallNextHookEx(hHook,nCode,WParam,LParam); //其他键放下一个钩子
end
end;
procedure LoadDestroyWndHook; //设置系统挂钩
begin
hHook:=SetWindowsHookEx(WH_KEYBOARD_LL, keyHookProc, Hinstance,0);
end;procedure UnLoadDestroyWndHook; //注销系统挂钩
begin
UnHookWindowsHookEx(hHook);
hHook := 0;
end;exports
LoadDestroyWndHook,
UnLoadDestroyWndHook;
end.
这个在哪里定义的
delphi里没有,翻MSDN翻出来的
使用od调试都没有反映。
使用WH_KEYBOARD至少在本窗口好用。
问题找到了,是sendmessage的事情,主窗口最小化以后没有接收到消息