SetKeyboardState无法正常工作

时间:2014-02-10 17:48:50

标签: c++ winapi

我有程序,然后它运行它询问东西然后用户必须按1继续我使用GetKeyState()函数来决定是否按下了数字而SetKeyboardState()将键状态设置回原始状态,但它在第二次尝试后不起作用。怎么了?

代码:

BYTE States[256];
GetKeyboardState(States); 

cout << press 1 << endl;

while(!Started)
{
    if(GetKeyState(VK_NUMPAD1))
    {
        Started = true;
    }
}

SetKeyboardState(States);

cout << "press 1" << endl;

while(!Name)
{
    if(GetKeyState(VK_NUMPAD1))
    {
        Name = true;
    }
}

SetKeyboardState(States);

cout << "press 1" << endl;

while(!Located)
{
    if(GetKeyState(VK_NUMPAD1))
    {
        Located = true;
    }
}

2 个答案:

答案 0 :(得分:1)

我不是专家,但就我所知, 你的while(!Name)检查变量是否为false。在循环内部,您将它们设置为true,循环结束,这使您无法再检查一次键。

答案 1 :(得分:1)

代码对我来说有点奇怪。我觉得你没有找到解决问题的最佳方案。但是我不确定你的问题是肯定的。

但有一件事情很突出。您对GetKeyState()的返回值的测试是错误的,您应该像这样测试它:

if(GetKeyState(VK_NUMPAD1)<0)

来自文档:

  

如果高位为1,则键为关闭;否则,它就结束了。

测试高阶位为1的简单方法是该值为负。您的代码将测试所设置的任何位,该值将针对除关键字以外的其他状态评估为真。