ИНФОРМАЦИЯ: Препятствует исчезновение окна консоли

Обзор

При запуске консольного приложения из окна проводника Windows NT диспетчер файлов, диспетчер программ, или путем ввода в командной строке запуска < progname > , он выполняет свои собственные консоли. Эта консоль исчезает, как только приложение завершает работу, и поэтому пользователь не может читать ничего записано на экране между последним Пауза и выход из программы. Существует два подхода для предотвращения исчезновение окна консоли.

Дополнительные сведения

Метод 1: Пауза, если процесс выполняется в отдельной консоли

Первый способ заключается в реализации консольного приложения для не завершается немедленно при работе в окне отдельной консоли. Маловероятно, что нужно приложение всегда паузы после отображения информации в окне консоли при запуске в командной строке. Однако нет никаких API (интерфейс прикладного программирования), который непосредственно определяет, использует ли приложение консоли с CMD. EXE. Метод ищет в текущем положении курсора консоли и если он является (0,0), программа считает что он работает в окне отдельной консоли.

Пример кода

   #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();
}
}

ПРИМЕЧАНИЕ: Этот метод не работает, если пользователь объединяет Очистить экран (CLS) и выполнение приложения в одно действие (например, [C:\] CLS & < progname >), поскольку положение курсора будет быть (0, 0), но в приложении используется консоль, которая принадлежит CMD. EXE.

Метод 2: Запустите консоль с cmd.exe/k

Этот метод предназначен для запуска консольного приложения в отдельном окне и принудительного окна остается после завершения приложения. С WinExec() CreateProcess(), или в пакетном файле, приложение может использовать следующую командную строку:
CMD /K consoleapp.exe
После завершения consoleapp.exe параметром /k позволяет оставаться на экране в окно консоли. Пользователь приложения затем можно ввести команду exit, чтобы закрыть окно консоли.
Свойства

Номер статьи: 99115 — последний просмотр: 12 янв. 2017 г. — редакция: 1

Отзывы и предложения