消息队列 - WinAPI

时间:2014-07-01 17:46:59

标签: c++ winapi keyboard keypress

消息队列是否存在于任何类型的程序中,或者Unix仅存在于用Windows界面编写的程序中?

例如这个程序:

int main()
{
    short int n;
    while(1)
    {
        if (n = GetKeyState(VK_UP))
        {   
            cout << n;
        }
        else
        {
            cout << n;
        }

    Sleep(150);
    }

    return 0;
}

是否有消息队列?如果是,则GetKeyState函数从消息队列中检索键盘消息?

2 个答案:

答案 0 :(得分:0)

是的,您必须致电PeekMessageGetMessage以使GetKeyState返回新值,以便进一步阅读:

http://blogs.msdn.com/b/oldnewthing/archive/2004/11/30/272262.aspx

在这里:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646301%28v=vs.85%29.aspx

如果您不希望使用消息循环GetAsyncKeyState

答案 1 :(得分:0)

GetKeyState是一个Windows功能,它与Windows消息队列密切交互。该功能在Unix中不存在。

正如我在上一个问题中所解释的那样,GetKeyState提供了有关与最近检索到的消息相关联的密钥状态的信息。由于您的控制台应用程序没有消息队列,并且没有消息,GetKeyState不会产生有用的信息。

同样,正如您在上一个问题中所解释的那样,您可以使用GetAsyncKeyState在API调用发生的瞬间获取有关状态的信息

最后,再次重复上一个问题的陈述,通过检查负返回值来测试按下的键。例如:

if (GetAsyncKeyState(VK_UP) < 0)
    ....

我最重要的建议是,当你在Stack Overflow上提问时,你会看到答案!如果您不理解它们,请留下评论,要求澄清。