如何使用PeekMessage检索除输入(鼠标+键盘)之外的所有消息

时间:2012-05-13 01:57:06

标签: c++ winapi events input

我的代码中有一个循环函数,它调用PeekMessage来检索事件。

目前它看起来像这样:

while (PeekMessage(&Message, NULL, 0, 0, PM_REMOVE))
{
    // Process events
}

现在我想在不同的位置管理输入,这意味着我想在不同的地方,在不同的位置检索诸如WM_KEYDOWNWM_MOUSEMOVE(鼠标和键盘事件)之类的消息我的主循环的时间。

PeekMessage的第三个和第四个参数允许定义要返回的消息范围,因此我可以使用提供的宏WM_KEYFIRSTWM_KEYLASTWM_MOUSEFIRSTWM_MOUSELAST。但它不方便,因为我有两个范围来检查输入,因此剩下的一切都有三个范围。

最后一个参数是一个标志,我可以传递PM_REMOVE | PM_QS_INPUT作为输入。但是,我应该在另一个循环中传递什么,我想要获取所有其他消息?没有PM_QS_EVERYTHING_EXCEPT_INPUT宏...

这样做最优雅的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用“过滤器”。 Win32调用“钩子”,看看msdn的SetWindowsHookEx函数。您可以为键盘和鼠标消息安装特定于线程的过滤器。然后,您可以将消息推送到维护队列并稍后手动访问它(知道如果您从钩子中选择了该线程的公共队列中的相关消息,那么只有您的用户队列将具有消息)。 但是,在您感兴趣的每种情况下,您也可以直接从PeekMessage开关直接推送到此use-queue。