GetKeyState 函数返回错误值

问题描述 投票:0回答:3

我按下方向箭头ON后,为什么函数

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;
}
c++ winapi keyboard keypress
3个回答
6
投票

来自文档

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

由于您不处理消息,因此您需要拨打

GetAsyncKeyState

测试按下的按键如下:

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

2
投票

GetKeyState 不会返回“类似布尔值”。 看一下文档:

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;如果结果为字符,则为 -127/-128。检查文档的“返回值”部分,看看你想要什么


0
投票

此外,GetKeyState() 函数可用于普通字符键,如 'a' ~ 'Z'。 (不区分大小写)

    if (GetKeyState('A' & 0x8000)
    {
        // code for Pressed
    }
    else
    {
        // code for Not Pressed
    }
© www.soinside.com 2019 - 2024. All rights reserved.