我的程序在后台运行,并使用计时器定期检查 Capslock 是打开还是关闭。
我的问题是是否存在比使用计时器更好的解决方案?
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;
最佳答案
使用低级键盘钩子(Hook) WH_KEYBOARD_LL
执行此操作。使用 SetWindowHookEx
安装钩子(Hook)。您将收到钩子(Hook)过程中每个键盘事件的通知。通过调用 GetKeyboardState
检测原始状态。
请注意,您必须更仔细地阅读文档。对于 GetKeyboardState
它说:
因此,针对零测试整个字节是错误的。只测试低位。使用 and $1
挑选出那个位。
关于Delphi 监控 CapsLock 键的状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27223601/