键盘钩子函数不能禁止WINDOWS功能键
编号:QA001602
建立日期: 1999年8月26日 最后修改日期:2002年12月22日
所属类别:
djs:
delphi4.0
win97
请问专家?我看了你一些问题后编了以下钩子函数:
function GetKeyHook( Code: Integer;wParam: WPARAM;lParam:LPARAM): LRESULT; stdcall;export;
//键盘钩子涵数.
begin
result:=1;
end;
function InstallHook() : boolean; export;
begin
Result := TRUE;
if HookCount = 0 then
HookHandle := SetWindowsHookEx(WH_KEYBOARD, @GetKeyHook, HInstance, 0);
if HookHandle <> 0 then
inc(HookCount)
else
Result := FALSE;
end;
调用后能安装了钩子,且钩子返回1后已禁止了键盘消息的发生,可是其它WINDOWS功能键(弹出"开始"菜单键和CTRL+ALT+DEL键)的消息不能禁止,不知这两个函数错在那里?
回答:
因为系统键在调用WH_KEYBOARD钩子之前就已经被处理了,你在WH_KEYBOARD钩子中无法处理。在Windows 9x下要禁用系统键可以参考QA000295 "如何封锁“CTRL+ALT+DEL”和“ALT+ESC”组合键"、QA000171 "如何封锁ALT-TAB、ALT-CTRL-DEL键以及不让Windows的任务栏出现"。
在Windows NT 4.0 SP3以后的版本可以使用WH_KEYBOARD_LL钩子。
dd的意见:
建议用日志钩子,他在系统处理前处理。
此问题由李海回答。
| |
|
|
| |
|
|