C++如何在Windows钩子中破解消息循环

C++如何在Windows钩子中破解消息循环,c++,winapi,C++,Winapi,我需要在win32键盘挂钩中中断消息循环。这个循环看起来像这样 MSG msg; while (GetMessage(&msg, NULL, NULL, NULL)) { TranslateMessage(&msg); DispatchMessage(&msg); } 我用了脱钩法,但不起作用。我还有一个问题,如果我把while循环参数改为!GetMessage它的工作原理与以前相同。如果我在循环中添加pri

我需要在win32键盘挂钩中中断消息循环。这个循环看起来像这样

MSG msg;
    while (GetMessage(&msg, NULL, NULL, NULL))  
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg);
    }
我用了脱钩法,但不起作用。我还有一个问题,如果我把while循环参数改为!GetMessage它的工作原理与以前相同。如果我在循环中添加printf,它不会打印任何东西。 我只想为键盘挂钩制作一个dll。和dll中的方法需要结束。有了这个消息循环,我不能用这个方法返回一些东西

对不起,我的英语不好


谢谢。

使用PostQuitMessage0中断产品。您可以将它放在窗口过程中,例如,在WM_DESTROY消息中。

@ÖTiib事实上,这个循环永远不会返回-1,请参阅前面的许多讨论如果您需要基于外部状态中断循环,请使用偶数MsgWaitForMultipleEvents,并根据需要从钩子过程中设置事件@ÖöTiib:对GetMessage的调用不能失败。它正在传递一个清晰可见的有效指针,并且没有应用任何筛选器。@getek:您必须捕获按键的WM_uuu消息,我不知道这是否是目的。和创建/调用一个函数。更正,该函数应读取event和MsgWaitForMultipleObjects。在DLL中泵送消息循环可能会破坏很多东西。唯一真正可行的方法是在单独的线程上运行此代码。您可以在DllMain中创建该线程。但是,不要这样做是唯一真正好的建议。