INFO: Preventing the Console Window from Disappearing

This article was previously published under Q99115
When a console application is started either from the File Manager, theProgram Manager, Windows NT Explorer, or by typing start <progname> fromthe command prompt, it executes in its own console. This console disappearsas soon as the application terminates, and therefore the user can't readanything written to the screen between the last pause and program exit.There are two approaches to keep the console window from disappearing.

Method 1: Pause if Process is Running in Separate Console

The first method is for implementing a console application to not terminateimmediately when it is running in a separate console window. It is notlikely that you would want an application to always pause after displayinginformation to the console window when you started from the prompt.However, there is no API (application programming interface) that directlydetermines whether or not the application shares a console with CMD.EXE.This method looks at the current location of the console cursor, and if itis (0,0), then the program assumes it is running in a separate consolewindow.

Sample Code

   #include <windows.h>   #include <stdio.h>   #include <conio.h>   CONSOLE_SCREEN_BUFFER_INFO csbi;   HANDLE hStdOutput;   BOOL bUsePause;   void main(void)   {      hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);      if (!GetConsoleScreenBufferInfo(hStdOutput, &csbi))      {         printf("GetConsoleScreenBufferInfo failed: %d\n", GetLastError());         return;      }      // if cursor position is (0,0) then use pause      bUsePause = ((!csbi.dwCursorPosition.X) &&                   (!csbi.dwCursorPosition.Y));      printf("Interesting information to read.\n");      printf("More interesting information to read.\n");      // only pause if running in separate console window.      if (bUsePause)      {         int ch;         printf("\n\tPress any key to exit...\n");         ch = getch();      }   }				
NOTE: This method will not work if the user combines a clear screen (CLS)and execution of the application into one step (for example, [C:\] CLS &<progname>), because the cursor position will be (0, 0), but theapplication is using the console, which belongs to CMD.EXE.

Method 2: Start the console with cmd.exe /K

This method is for starting a console application in a separate window andforcing the window to remain after the application has terminated. Anapplication can use the following command line with WinExec(),CreateProcess(), or in a batch file:
cmd /K consoleapp.exe
After consoleapp.exe has terminated, the /K switch makes the console windowremain on the screen. The application user can then type the exitcommandto close the console window.

Article ID: 99115 - Last Review: 11/21/2006 15:46:00 - Revision: 4.1

Microsoft Win32 Application Programming Interface

  • kbinfo kbconsole kbprogramming kbkernbase KB99115