БлогNot. Как запустить консольное приложение с нужным размером окна консоли

Как запустить консольное приложение с нужным размером окна консоли

Имеется консольное приложение Windows, которое "хитрит" с окном консоли, например, в простейшем случае, такое:

#include <iostream>
#include "windows.h"
using namespace std;

int main() {
 int width = 50, height = 30;

 HWND hWnd = GetConsoleWindow();
 HMENU hm = GetSystemMenu(hWnd, FALSE);
 RemoveMenu(hm, SC_SIZE, MF_BYCOMMAND | MF_REMOVE);
 RemoveMenu(hm, SC_MAXIMIZE, MF_BYCOMMAND | MF_REMOVE);
 DrawMenuBar(hWnd);
 HANDLE b = GetStdHandle(STD_OUTPUT_HANDLE);
 SMALL_RECT DisplayArea = { 0, 0, width, height };
 SetConsoleWindowInfo(b, TRUE, &DisplayArea);
 CONSOLE_CURSOR_INFO ConCurInf;
 ConCurInf.dwSize = 10;
 ConCurInf.bVisible = false;
 SetConsoleCursorInfo(b, &ConCurInf);

 COORD p;
 p.X = 47;
 p.Y = 30;
 SetConsoleCursorPosition(b, p);
 cout << "Coo";

 cin.get();
 return 0;
}

Код проверялся в консоли имеющейся под рукой Visual Studio 2015, вот что вышло:

скриншот окна приложения
скриншот окна приложения

Увы, при запуске приложения, например, из-под файл-менеджера, выполняющего консольные приложения в своём окне (Far Manager) наше Coo может выглядеть не совсем Coo:

скриншот 2, запуск из-под Far
скриншот 2, запуск из-под Far

...да ещё и испортить размеры окна консоли файл-менеджера после выхода.

Решений минимум 2.

1. Поменять расширение .exe и целевого файла на что-нибудь, например на .ex, а потом создать (хоть в стандартном Блокноте) командный bat-файл, допустим, start.bat со следующим содержимым и считать главным его:

@echo off
start Console1.ex

Процесс будет стартовать с новым экземпляром cmd.exe в новом окне консоли, которой и станет управлять.

папка с переименованным консольным приложением и файлом .bat
папка с переименованным консольным приложением и файлом .bat

Похоже, любой файл с любым расширением и первыми двумя байтами MZ будет обрабатываться масдайкой 7, да и 10, как .EXE.

2. Если вариант 1 не работает, имеет смысл попробовать через PowerShell, заменив вторую строку bat-файла не нечто вроде

start powershell "Start-Process -FilePath .\Console1.exe -Wait -NoNewWindow" >log.txt

Будет медленнее, но, возможно, поможет. Вывод от powershell перенаправляется в текстовый файл log.txt

26.04.2021, 13:35 [591 просмотр]


теги: windows софт памятка bat studio

К этой статье пока нет комментариев, Ваш будет первым