Delphi监控CapsLock密钥的状态

 df0134330 发布于 2022-12-08 19:27

我的程序在后台运行,并使用计时器定期检查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;

David Heffer.. 6

用低级键盘钩子做到这一点WH_KEYBOARD_LL.安装挂钩SetWindowHookEx.您将收到hook proc中每个键盘事件的通知.通过调用检测原始状态GetKeyboardState.

请注意,您必须更仔细地阅读文档.因为GetKeyboardState它说:

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

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

1 个回答
  • 用低级键盘钩子做到这一点WH_KEYBOARD_LL.安装挂钩SetWindowHookEx.您将收到hook proc中每个键盘事件的通知.通过调用检测原始状态GetKeyboardState.

    请注意,您必须更仔细地阅读文档.因为GetKeyboardState它说:

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

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

    2022-12-11 02:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有