【问题标题】:WinAPI: How to get the caps lock state?WinAPI:如何获取大写锁定状态?
【发布时间】:2012-12-04 00:40:52
【问题描述】:

如何知道 Caps Lock 是打开还是关闭? 我试图搜索它,但我发现的只是如何切换或打开/关闭它,这与我正在寻找的完全相反。

我正在尝试在 C++ 和 Delphi 中做到这一点。
请帮忙

【问题讨论】:

    标签: winapi state capslock


    【解决方案1】:

    使用GetAsyncKeyState 和 VK_CAPITAL (0x14)

    【讨论】:

    • "如果函数成功,则返回值指定自上次调用GetAsyncKeyState以来是否按下键,以及当前键是向上还是向下。如果设置了最高有效位,则键已关闭,并且如果设置了最低有效位,则在上一次调用 GetAsyncKeyState 之后按下了键。但是,您不应依赖最后一种行为;有关详细信息,请参阅备注。"
    【解决方案2】:

    我发现了这个link 和下面的代码 sn-p 可能会对你有所帮助

    if ((GetKeyState(VK_CAPITAL) & 0x0001)!=0)
      AfxMessageBox("Caps Lock ON!");
    else
      AfxMessageBox("Caps Lock OFF!");
    

    【讨论】:

    • 也适用于 VK_SCROLL 滚动锁定和 VK_NUMLOCK 数字锁定。
    • 其中一个重要的部分是 & 0x0001 因为信息是以低位返回的。
    【解决方案3】:

    你想要 GetKeyState() 函数:

    http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx

    使用 VK_CAPITAL 密钥代码。其余的虚拟键码在这里:

    http://technet.microsoft.com/en-us/subscriptions/index/dd375731(v=vs.85).aspx

    【讨论】:

    • 不就是获取密钥的状态吗?大写锁定通常用作拨动开关。这真的会给你整个机器的切换状态吗?
    • 是的,它确实为您提供了切换状态。这不是那么直观,这种方法为您提供了用户的按键以及整体按键切换状态。
    • "当线程从其消息队列中读取关键消息时,从该函数返回的关键状态会发生变化。该状态不反映与硬件相关的中断级状态。使用 GetAsyncKeyState 函数检索该状态信息。” --msdn
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 2021-10-30
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多