【问题标题】:GetKeyState function?GetKeyState 函数?
【发布时间】:2014-08-21 18:17:08
【问题描述】:

为什么我按下方向箭头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


    【解决方案1】:

    来自documentation

    从这个函数返回的键状态随着线程读取而改变 来自其消息队列的关键消息。状态不反映 与硬件相关的中断级状态。使用 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 如果结果是 short 或 -127/-128 如果结果是 char。检查文档的“返回值”部分,看看你想要什么

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 欢迎来到 Stack Overflow!请确保您的答案直接回应了 OP 设置的问题。
        猜你喜欢
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2012-02-19
        • 2021-12-04
        相关资源
        最近更新 更多