Delphi监控CapsLock密钥的状态

时间:2014-12-01 07:31:25

标签: delphi winapi

我的程序在后台运行,并使用计时器定期检查Capslock是ON还是OFF。

我的问题是,是否存在比使用计时器更好的解决方案?

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;

1 个答案:

答案 0 :(得分:6)

使用低级键盘钩WH_KEYBOARD_LL执行此操作。使用SetWindowHookEx安装挂钩。您将收到hook proc中每个键盘事件的通知。通过调用GetKeyboardState来检测原始状态。

请注意,您必须仔细阅读文档。对于GetKeyboardState,它说:

  

如果该键是切换键,例如CAPS LOCK,则当切换键时低位为1,如果键未被去除则为0。

因此,将整个字节测试为零是错误的。只测试低位。使用and $1来挑选该位。