unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function KeyBoardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult;stdcall;
var
Form1: TForm1;implementation{$R *.dfm}
var
gHook:HHOOK;procedure SetHook;
begin
gHook:=SetWindowsHookEx(WH_KEYBOARD,KeyBoardHook,HInstance,0);
end;function KeyBoardHook(nCode:Integer; wParam: WPARAM; lParam: LPARAM): LResult;stdcall;
begin
result:=0;
if (ncode=0) then
begin
if wParam=65 then
begin
result:=1;
end
else
Result:=CallNextHookEx(gHook,nCode,wParam,lParam)
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
SetHook;
end;end.WH_KEYBOARD 钩子的回调函数,wParam参数储存的是键盘虚拟码,当是字母或数字的时候 程序能屏蔽掉按键,但是当是 WIN键 ,CAPS ctrl 等却失去作用了,请解释下是为什么呢?谢谢
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function KeyBoardHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LResult;stdcall;
var
Form1: TForm1;implementation{$R *.dfm}
var
gHook:HHOOK;procedure SetHook;
begin
gHook:=SetWindowsHookEx(WH_KEYBOARD,KeyBoardHook,HInstance,0);
end;function KeyBoardHook(nCode:Integer; wParam: WPARAM; lParam: LPARAM): LResult;stdcall;
begin
result:=0;
if (ncode=0) then
begin
if wParam=65 then
begin
result:=1;
end
else
Result:=CallNextHookEx(gHook,nCode,wParam,lParam)
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
SetHook;
end;end.WH_KEYBOARD 钩子的回调函数,wParam参数储存的是键盘虚拟码,当是字母或数字的时候 程序能屏蔽掉按键,但是当是 WIN键 ,CAPS ctrl 等却失去作用了,请解释下是为什么呢?谢谢
vkCode: DWORD;//虚拟键值
scanCode: DWORD;//扫描码值(没有用过,我也不懂^_^)
{一些扩展标志,这个值比较麻烦,MSDN上说得也不太明白,但是
根据这个程序,这个标志值的第六位数(二进制)为1时ALT键按下为0相反。}
flags: DWORD;
time: DWORD;//消息时间戳
dwExtraInfo: DWORD;//和消息相关的扩展信息
end; 在这个记录结构里 vkCode 就可以屏蔽掉所有的按键,但是wParam里的虚拟键值就不可以!