【问题标题】:Is there anyway i can detect "~" by using GetAsyncKeyState?无论如何我可以通过使用GetAsyncKeyState检测“~”吗?
【发布时间】:2019-04-19 10:12:16
【问题描述】:

通过使用GetAsyncKeyState,它无法检测到'~' 按钮(位于键盘的左上方)。
那么有什么方法可以检测到这个按钮呢?
还是应该使用其他命令?

顺便说一句,我使用的是 c++

【问题讨论】:

  • 请展示您的尝试。为什么您无法检测到该密钥?
  • 你是如何使用GetAsyncKeyState() 来检测它的?请在此处按要求发布minimal reproducible example 重现您的问题。
  • GetAsyncKeyState( VK_OEM_3 ) 应该可以工作。

标签: c++ winapi


【解决方案1】:

“~”的虚拟键码是VK_OEM_3

更多虚拟键码可以参考:

https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes

使用方法请参考MSDN

一个简单的例子:

#include <Windows.h>
#include <iostream>
using namespace std;

int main()
{
  BOOL OEM_3 = FALSE;
  while (1)
  {
    if (GetAsyncKeyState(VK_OEM_3) < 0 && OEM_3 == false)
    {
      //Press down
      OEM_3 = true;
      cout << "Press down" << endl;
    }
    if (GetAsyncKeyState(VK_OEM_3) >= 0 && OEM_3 == true)
    {
      //Release
      OEM_3 = false;
      cout << "Release" << endl;
    }
  }
  return 0;
}

【讨论】:

  • 取决于键盘布局。 Asker 显然在键盘左上方有~ 键,这表明是美式键盘。但是,在该布局上还需要处理转换状态。那么其他布局呢?最后,&lt; 0 的反义词实际上是 &gt;= 0 而不是 == 0,正如您的回答所示。
  • @DavidHeffernan 我不确定您是否阅读了我的第一个链接,这清楚地表明了这一点。 VK_OEM_3 Windows 2000:美标键盘~键,另外我测试了我目前的代码,可以测试~的按键状态
  • 如果返回值 = 0,则密钥向上。阅读文档以了解原因。
  • @nabangkae 如果答案是您需要的,请不要忘记标记它,以帮助遇到同样问题的人。
猜你喜欢
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多