Я пытаюсь создать программу, которая может быть выполнена из терминала командной строки, но также и другими программами (ну, в моем случае, это визуальная студия, когда я запускаю другой проект: отладка в условиях проекта), и и и и Поддержите либо обычный режим, в котором он распечатывает на консоли: либо консоль терминала командной строки, из которой она была запущена, либо новое окно терминала командной строки, если она выполнена другими программами, а также поддерживает Silent Mode, когда он выполняется другими программами: Don 'T показываете окно консоли вообще. Аргументы строки. Из консоли он использует окно консоли, из которого оно было начато. /> Программа может быть принята аргументом командной строки -silent , и в этом случае она не порождает свою собственную консоль при выполнении из другой программы. Я не хочу видеть консоли даже для 1 кадра. несмотря ни на что. Решение, которое я нашел здесь, так что так: #pragma Comment (Linker, "/subsystem: Windows/intry: maincrtStartup") . Теперь, когда программа начинается, она сама по себе не появляется. Так что я сделал, так это то, что я породил консоль и перенаправляю в нее: Allocconsole (); freopen ("conout $", "w", stdout); .
Последняя проблема, которую я имею сейчас, заключается в том, что когда эта программа запускается из консоли, она всегда порождает свою собственную консоль, и нет никакого способа использовать консоль, из которой была запущена программа. Я попытался использовать getConsoleWindow () и _isatty (_fileno (stdout)) , которые я также нашел здесь, но оба возвращают ложь при запуске программы из окна консоли. Вот полная программа из моей попытки: < /p>
Код: Выделить всё
#include
#include
#include
#include
#include
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
void main(int argc, char* argv[]) {
bool SilentMode{};
if(argc == 1)
SilentMode = false;
else
SilentMode = std::string(argv[1]) == "silent";
bool IsRunningFromInsideConsole = GetConsoleWindow();
bool IsRunningFromInsideConsole2 = _isatty(_fileno(stdout));
if(!SilentMode && !(IsRunningFromInsideConsole || IsRunningFromInsideConsole2)) {
AllocConsole();
freopen("CONOUT$", "w", stdout);
}
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79443435/how-to-make-a-program-that-takes-command-line-arguments-outputs-to-console-and[/url]