首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetWinEventHook和GetMessage c++

SetWinEventHook和GetMessage c++
EN

Stack Overflow用户
提问于 2016-08-10 16:25:16
回答 2查看 336关注 0票数 0

我想用SetWinEventHook设置一些事件,然后等待。在五个事件之后,我想退出消息循环。问题是代码在没有进入循环的情况下就塞在了getMessage中。无论何时发生事件,都会正确调用回调函数。

代码语言:javascript
复制
HWINEVENTHOOK hEvent = SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, NULL,
    WinEventProcCallback, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);

HWINEVENTHOOK hWinEventHook0 = SetWinEventHook(
    EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE,
    NULL, WinEventProcCallback, 0, 0,
    WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);

HWINEVENTHOOK hWinEventHook1 = SetWinEventHook(
    EVENT_OBJECT_DESTROY, EVENT_OBJECT_DESTROY,
    NULL, WinEventProcCallback, 0, 0,
    WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);

    while (ret = GetMessage(&msg, NULL, 0, 0) > 0) {
        if (ret == -1)
        {
            return;
        }
        if (cont >= 5) break;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        cont++;
        std::cout << "Reached : " << cont << std::endl;
    }

我该如何解决这个问题呢?提前谢谢你

EN

回答 2

Stack Overflow用户

发布于 2016-08-10 16:33:45

代码语言:javascript
复制
if (ret = GetMessage(&msg, NULL, 0, 0) > 0)

等于

代码语言:javascript
复制
if (ret = (GetMessage(&msg, NULL, 0, 0) > 0))
票数 1
EN

Stack Overflow用户

发布于 2016-08-10 16:30:27

代码语言:javascript
复制
while (ret = GetMessage(&msg, NULL, 0, 0) > 0) {
    if (ret == -1)
    {
        return;
    }

在这种情况下,if语句将不为真,因此您将无法获得返回值。ret不能同时大于0和-1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38867942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档