0

我在 Visual C++ 中有应用程序,它在程序终止时捕获窗口消息,例如通过按下右上角的“X”关闭窗口。在这里,它遵循常规过程:WM_CLOSE-> WM_DESTROY-> WM_QUIT

long FAR PASCAL MAIN_WindowProc( HWND     hWnd, 
                                 UINT     message, 
                                 WPARAM   wParam, 
                                 LPARAM   lParam ) 
{

...
case WM_CLOSE:
{

    if ( Game() && pcgaming()->active ) 
    {

         if ( Game()->MainStatus != MAINSTATUS_SHUTTINGDOWN ) 
        {

            Game()->Exit_To_Windows = true;

            Game()->ExitNow( EXIT_ESCAPE );

        }

    }

    return (long) 0;

}break;
...

当您通过按下按钮或选择 Shift + F5 在 Visual Studio 中停止运行应用程序时,程序实际上是如何终止的?有没有像 WM_XXX 这样的消息要捕获?

4

1 回答 1

1

当您按下 Shift+F5 时(假设您是从 Visual Studio 开始的),调试器会直接并立即终止子进程。不会向该程序发送任何消息或通知。

如果您从 Ctrl+F5 开始,然后手动附加,则 Shift+F5 将分离并且程序将继续运行。然后您可以轮询IsDebuggerPresent(),因为您不会关闭。虽然目前尚不清楚您为什么要这样做。

您可以查看调试器和被调试者可以用来通信的所有函数的列表,但基本上都是由被调试者向调试器发送额外的调试信息。被调试者可以知道调试器是否被附加,但在它即将分离(或杀死它)时不会得到通知。

于 2018-09-27T19:49:05.643 回答