:如何通过截取消息判断键盘的不同按键,在线等待,立刻给分。 多谢各位回答我的问题。我就是要HOOK键盘,但是记录不下来用户敲了哪个键。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可去搜索一下以前的hook问题,说了很多的,慢慢看!以后有怎么问题也可先搜索一下,避免重复提问! 谢谢各位,我就是因为HOOK键盘记录不了才提这个问题的。 大富翁离线数据里也有一些hook,说的很具体1. 将以下的文字剪贴存成 HKTest.DPR--- Cut Here ---library HKTest;usesHKProc in 'HKProc.pas';exportsEnableHotKeyHook,DisableHotKeyHook;beginhNextHookProc := 0;procSaveExit := ExitProc;ExitProc := @HotKeyHookExit;end.--- Cut Here ---2. 将以下的文字剪贴存成 HKProc.PAS(Note: HKTest.DPR 与 HKProc.PAS 建议储存在同一个目录)--- Cut Here ---unit HKProc;interfaceusesWindows, Messages;varhNextHookProc: HHook;procSaveExit: Pointer;function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;function EnableHotKeyHook: BOOL; export;function DisableHotKeyHook: BOOL; export;procedure HotKeyHookExit; far;implementationfunction KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;const_KeyPressMask = $80000000;beginResult := 0;If iCode < 0 ThenbeginResult := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);Exit;end;// 侦测 Ctrl + B 组合键if ((lParam and _KeyPressMask) = 0) and(GetKeyState(vk_Control) < 0) and (wParam = Ord('B')) thenbeginResult := 1;WinExec('Notepad.exe', sw_Normal); // 记事本end;end;function EnableHotKeyHook: BOOL; export;beginResult := False;if hNextHookProc <> 0 then Exit;// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下// 来, 免得 HOOK 呼叫链结断掉hNextHookProc := SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);Result := hNextHookProc <> 0;end;function DisableHotKeyHook: BOOL; export;beginif hNextHookProc <> 0 thenbeginUnhookWindowshookEx(hNextHookProc); // 解除 Keyboard HookhNextHookProc := 0;MessageBeep(0);MessageBeep(0);end;Result := hNextHookProc = 0;end;procedure HotKeyHookExit;begin// 如果忘了解除 HOOK, 自动代理解除的动作if hNextHookProc <> 0 then DisableHotKeyHook;ExitProc := procSaveExit;end;end. 用键盘购子时,第一个参数要使用WH_KEYBOARD_LL,而不是WH_KEYBOARD。在钩子的回调函数里,参数lParam是一个指向结构KBDLLHOOKSTRUCT的指针。每个键被纪录两次,那是因为键按下和松开你都记录了的缘故。判断结构KBDLLHOOKSTRUCT的成员 flags,如果有标志 LLKHF_UP,表示键松开,就不要纪录了。 怎么下载多张网络图片显示在程序里 如何是Adoquery的查询速度加快!详细请看下文。。 Delphi程序打包问题 求助~用Delphi如何实现分布式多层电子地图啊??UP者都有分!!! 分辨率问题!! 很不爽遇到这样一个女的!!!散分! 深夜求救! 看不明白的小程序!!!(等待中) 制作什么样的共享软件,会受到欢迎?(在线结分) 连接SYBASE数据库 出现汉字乱码 数码相机与DELHI…50分求 想做个Turbo Browser 那样的资源管理器,可是有点问题,好像挺难的
1. 将以下的文字剪贴存成 HKTest.DPR--- Cut Here ---
library HKTest;uses
HKProc in 'HKProc.pas';exports
EnableHotKeyHook,
DisableHotKeyHook;begin
hNextHookProc := 0;
procSaveExit := ExitProc;
ExitProc := @HotKeyHookExit;
end.
--- Cut Here ---
2. 将以下的文字剪贴存成 HKProc.PAS
(Note: HKTest.DPR 与 HKProc.PAS 建议储存在同一个目录)--- Cut Here ---
unit HKProc;interfaceuses
Windows, Messages;var
hNextHookProc: HHook;
procSaveExit: Pointer;function KeyboardHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
function EnableHotKeyHook: BOOL; export;
function DisableHotKeyHook: BOOL; export;
procedure HotKeyHookExit; far;implementationfunction KeyboardHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
const
_KeyPressMask = $80000000;
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
// 侦测 Ctrl + B 组合键
if ((lParam and _KeyPressMask) = 0) and
(GetKeyState(vk_Control) < 0) and (wParam = Ord('B')) then
begin
Result := 1;
WinExec('Notepad.exe', sw_Normal); // 记事本
end;
end;function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit;
// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下
// 来, 免得 HOOK 呼叫链结断掉
hNextHookProc := SetWindowsHookEx(WH_KEYBOARD,
KeyboardHookHandler,
HInstance,
0);
Result := hNextHookProc <> 0;
end;function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc); // 解除 Keyboard Hook
hNextHookProc := 0;
MessageBeep(0);
MessageBeep(0);
end;
Result := hNextHookProc = 0;
end;procedure HotKeyHookExit;
begin
// 如果忘了解除 HOOK, 自动代理解除的动作
if hNextHookProc <> 0 then DisableHotKeyHook;
ExitProc := procSaveExit;
end;end.
在钩子的回调函数里,参数lParam是一个指向结构KBDLLHOOKSTRUCT的指针。
每个键被纪录两次,那是因为键按下和松开你都记录了的缘故。判断结构
KBDLLHOOKSTRUCT的成员 flags,如果有标志 LLKHF_UP,表示键松开,就
不要纪录了。