DetailPage-MSS-KB

Microsoft small business knowledge base

Article ID: 99115 - Last Review: November 21, 2006 - Revision: 4.1

This article was previously published under Q99115

On This Page

SUMMARY

When a console application is started either from the File Manager, the Program Manager, Windows NT Explorer, or by typing start <progname> from the command prompt, it executes in its own console. This console disappears as soon as the application terminates, and therefore the user can't read anything written to the screen between the last pause and program exit. There are two approaches to keep the console window from disappearing.

MORE INFORMATION

Method 1: Pause if Process is Running in Separate Console

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

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 the application 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 and forcing the window to remain after the application has terminated. An application 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 window remain on the screen. The application user can then type the exitcommand to close the console window.

APPLIES TO
  • Microsoft Win32 Application Programming Interface, when used with:
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • Microsoft Windows 2000 Standard Edition
    • the operating system: Microsoft Windows XP
Keywords: 
kbinfo kbconsole kbprogramming kbkernbase KB99115
Share
Additional support options
Ask The Microsoft Small Business Support Community
Contact Microsoft Small Business Support
Find Microsoft Small Business Support Certified Partner
Find a Microsoft Store For In-Person Small Business Support