首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CapsLock密钥的Delphi监控状态

CapsLock密钥的Delphi监控状态
EN

Stack Overflow用户
提问于 2014-12-01 07:31:24
回答 2查看 1.8K关注 0票数 4

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

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

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-01 07:42:06

用一个低级别的键盘钩子( WH_KEYBOARD_LL )来做这件事。用SetWindowHookEx安装钩子。您将收到钩子程序中每个键盘事件的通知。通过调用GetKeyboardState来检测原始状态。

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

如果键是一个切换键,例如大写锁,那么当键被切换时,低阶位是1,如果键是未切换的,则为0。

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

票数 6
EN

Stack Overflow用户

发布于 2022-06-06 13:48:04

KeyPreview:=真

代码语言:javascript
复制
    FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
     if GetKeyState(VK_CAPITAL) > 0 then
        hdrSts.Sections[0]:= 'CAPS LOCK'
      else
        hdrSts.Sections[0]:= '';
    end;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27223601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档