GetKeyState函数?

时间:2014-07-01 08:46:12

标签: c++ winapi keyboard keypress

为什么在按下方向箭头后,函数GetKeyState继续给我一个大于0的值?

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

int main()
{
    for(int i = 0; i < 1000; ++i)
    {
        if(GetKeyState(VK_UP))
        {
            cout << "UP pressed" << endl;
        }
        else
            cout << "UP not pressed" << endl;

        Sleep(150);
    }

    return 0;
}

3 个答案:

答案 0 :(得分:4)

来自documentation

  

此函数返回的键状态随线程读取而变化   来自其消息队列的关键消息。状态不反映   与硬件相关的中断级状态。使用   GetAsyncKeyState函数用于检索该信息。

由于您没有处理邮件,因此您需要拨打GetAsyncKeyState

测试按下的键是这样的:

if (GetAsyncKeyState(VK_UP) < 0)
    // key is pressed

答案 1 :(得分:2)

GetKeyState不会返回&#34;类似布尔值的&#34;。 看一下文档:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646301(v=vs.85).aspx

您似乎需要这样做:

if (GetKeyState(VK_UP) & 0x8000)
{
  //Your code
}
else
{
  // Not pressed
}

如果结果为短,则为0x8000;如果结果为char,则为-127 / -128。检查&#34;返回值&#34;文档的一部分,看看你想要什么

答案 2 :(得分:0)

,还有GetKeyState()函数,可用于普通字符键,例如'a'〜'Z'。 (不区分大小写)

    if (GetKeyState('A' & 0x8000)
    {
        // code for Pressed
    }
    else
    {
        // code for Not Pressed
    }