我在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这样的消息可以捕获?
答案 0 :(得分:1)
当您按Shift + F5键(假设您从Visual Studio开始)时,调试器将直接并立即终止子进程。不会有任何消息或通知发送到该程序。
如果您先按Ctrl + F5组合键,然后手动附加,则Shift + F5组合键将断开,程序将继续运行。然后您可以轮询IsDebuggerPresent(),因为您不会关闭。尽管目前尚不清楚为什么要这么做。
您可以检查调试器和被调试者可以用来通信的list of all functions,但是基本上所有的事情都由被调试者向调试器发送额外的调试信息。被调试者可以知道调试器是否已附加,但是在将要分离(或杀死它)时不会收到通知。