GetAsyncKeyState(int vKey)中的点逗号减号

Posted

技术标签:

【中文标题】GetAsyncKeyState(int vKey)中的点逗号减号【英文标题】:Dot Comma Minus Plus in GetAsyncKeyState(int vKey) 【发布时间】:2013-12-13 18:07:49 【问题描述】:

我正在尝试使用 GetAsyncKeyState(int vKey) 函数,但我有一个小问题: 它适用于字母、数字和键(如 Enter 或空格),但当我尝试使用例如逗号“,”时,该功能不起作用。

    #include <myHead.h>

    int main()
    
    char i = 44;

        while(1)
        
            Sleep(5);
            if(GetAsyncKeyState(i)<0)
            
                cout << "Got it!";
            
        

    

我应该补充一点,我使用的是 Windows 7 膝上型电脑

【问题讨论】:

44 是打印屏幕键的 VK 代码... 我在ascii表里查了一下,44是","? VK 码 != ASCII 码(那么打印屏幕的代码是什么?)msdn.microsoft.com/en-us/library/windows/desktop/… 但是为什么 ascii 码可以使用数字和字母呢? 因为他们故意让那些和 ASCII 码一样。 【参考方案1】:

使用VkKeyScanEx 函数了解给定字符的 VK 代码。

如果您只是对用户按下键盘上的相应键感兴趣,那应该可以解决问题。但是,如果你想区分移位/非移位,或者使用 ALT(作为法语键盘上的欧元符号,Alt+E),事情就变得更复杂了。

简单示例:

SHORT sRet = VkKeyScanEx( ',', 0 );
BYTE vk = LOBYTE( sRet );

在我的笔记本电脑上,vk 为 188 (0xBC),当我按下“,”键盘键(法语键盘)时,GetAsyncKeyState(188) 返回

(是的,VK_OEM_COMMA 是 0xBC)

【讨论】:

@HansPeter Hum... 接受答案和支持答案是两件事。

以上是关于GetAsyncKeyState(int vKey)中的点逗号减号的主要内容,如果未能解决你的问题,请参考以下文章

使用 GetAsyncKeyState() 的键监听器/记录器

将 GetAsyncKeyState() 重置为默认值

“getAsyncKeyState”是不是会触发防病毒程序 c++

杂文虚拟键码表(供函数GetAsyncKeyState()使用)

GetKeyState(), GetAsyncKeystate(), GetKeyboardSlate()

为啥在 Win32 中使用 `GetAsyncKeyState()` 时我的热键会出错?