Delphi监控CapsLock键的状态
我的程序在后台运行,并使用计时器定期检查Capslock是否打开或关闭 我的问题是,是否存在比使用计时器更好的解决方案Delphi监控CapsLock键的状态,delphi,winapi,Delphi,Winapi,我的程序在后台运行,并使用计时器定期检查Capslock是否打开或关闭 我的问题是,是否存在比使用计时器更好的解决方案 procedure TForm1.Timer2Timer(Sender: TObject); var KeyState: TKeyboardState; begin GetKeyboardState(KeyState) ; if (KeyState[VK_CAPITAL] = 0) then CheckBox1.Checked:=False //Capslock is
procedure TForm1.Timer2Timer(Sender: TObject);
var KeyState: TKeyboardState;
begin
GetKeyboardState(KeyState) ;
if (KeyState[VK_CAPITAL] = 0) then
CheckBox1.Checked:=False //Capslock is OFF
else
CheckBox1.Checked:=True; //Capslock is ON
end;
使用低级键盘挂钩,
WH\u-keyboard\u-LL
执行此操作。使用SetWindowHookEx
安装挂钩。钩子过程中的每个键盘事件都会通知您。通过调用GetKeyboardState
检测原始状态
请注意,您必须更仔细地阅读文档。对于GetKeyboardState
它说:
如果该键是切换键,例如CAPS LOCK,则切换该键时低阶位为1,未切换该键时低阶位为0
因此,用零测试整个字节是错误的。只测试低阶位。使用和$1
选择该位