Как скрыть консольное приложение c
Я хочу знать, как скрыть окно консоли при его запуске.
Я хочу быть честным и сказать вам, что это для программы keylogger, но это не мое намерение взломать кого-то. Это для маленького школьного проекта, который я хочу сделать, чтобы показать опасности хакеров. (Я подумал, что это может быть довольно круто, чтобы показать что-то вроде этого в школе.)
Надеюсь, вы мне в этом поможете.
Так. Вот код, который я написал, посмотрев его на google. (Не обращайте внимания на все заметки о намерениях.)
Как вы можете видеть, я включил окна.h И написал FreeConsole (); в основном.
Поэтому я хочу знать, почему он открывает новую консоль, а не только создает и скрывает первую.
Поэтому я хочу знать, почему он открывает новую консоль, а не только создает и скрывает первую.
Консольное приложение на самом деле не само создает консоль, оно просто работает в одной из них. Если исполняемый файл запускается из Проводника, Windows создает консоль для его запуска. При вызове FreeConsole он не закрывает новую консоль , а просто отсоединяет от нее процесс.
Как отметил WhozCraig в комментариях, создайте обычное приложение Windows и не создавайте окно.
Это просто. Freeconsole () api сделает это волшебство за вас
Просто сделайте это при запуске
Это вернет дескриптор windows (HWND) ShowWindow() , который, в свою очередь, скроет его. Это решение предназначено только для систем windows.
Это правильный ответ на вопрос, даже если он не отмечен как это.
Чтобы буквально Скрыть / показать окно консоли по требованию, можно использовать следующие функции:
Можно скрыть/показать консоль с помощью ShowWindow . GetConsoleWindow получает дескриптор окна, используемый консолью.
IsWindowVisible можно использовать, чтобы проверить, является ли окно (в этом случае консоль) видимым или нет.
На мой взгляд, этот подход лучше, чем использование WinMain , потому что он работает надежно, и вы не делаете вашу платформу кода C++ зависимой.
Я хочу быть честным и сказать вам, что это для программы кейлоггер, НО я не собираюсь взломать кого-то. Это для маленького школьного проекта, который я хочу сделать, чтобы показать опасности хакеров. (Я думал, что было бы очень круто показать что-то подобное в школе.)
Я надеюсь, что вы поможете мне с этим.
Так. Вот код, который я написал, посмотрев его в Google. (Не обращайте внимания на все заметки о намерениях.)
Как видите, я включил Windows.h и написал FreeConsole (); в основном.
Да, я вижу появившееся окно и сразу исчезаю. Но, похоже, сразу после этого открывается новая консоль, которая просто пуста. (С пустым, я имею в виду: «Нажмите любую клавишу, чтобы продолжить ..» Я думаю о том, имеет ли это какое-либо отношение к «system (« PAUSE »)»)
Поэтому я хочу знать, почему он открывает новую консоль, а не просто создает и скрывает первую.
Решение
Чтобы буквально скрыть / показать окно консоли по требованию, вы можете использовать следующие функции:
Можно скрыть / показать консоль, используя Витрина . GetConsoleWindow извлекает дескриптор окна, используемый консолью
IsWindowVisible может использоваться для проверки, является ли окно (в этом случае консоль) видимым или нет.
Другие решения
Поэтому я хочу знать, почему он открывает новую консоль, а не просто создает и скрывает первую.
Консольное приложение фактически не создает консоль, оно просто запускается в одной. Если вы запускаете исполняемый файл из Проводника, Windows создает консоль для его запуска. Когда вы вызываете FreeConsole , она не закрывает новую консоль, просто отсоединяет ваш процесс от нее.
Как отмечалось в комментариях к WhozCraig, создайте обычное приложение для Windows и не создавайте окна.
На мой взгляд, такой подход лучше, чем использование WinMain потому что он работает надежно, и вы не делаете свою платформу C ++ Code зависимой.
Это просто. FreeConsole () API сделает эту магию для вас
Просто сделайте это при запуске
Это вернет дескриптор окна (HWND) ShowWindow() который, в свою очередь, будет скрывать это. Это решение только для систем Windows.
Это правильный ответ на вопрос, даже если он не помечен как он.
редактировать: возможное решение / взлом может быть установить (в Visual Studio) Linker-> System-> SubSystem на «Windows (/ SUBSYSTEM: WINDOWS)» вместо «Консоль (/ SUBSYSTEM: CONSOLE)». Это, вероятно, не оптимально, однако.
Я поискал в Google информацию о том, как скрыть собственное окно консоли. Удивительно, но единственными решениями, которые я смог найти, были хакерские решения, в которых FindWindow() находил окно консоли по его заголовку . Я немного углубился в Windows API и обнаружил, что есть гораздо лучший и простой способ, поэтому я хотел опубликовать его здесь, чтобы другие могли найти.
Просто перейдите в Свойства приложения и измените Тип вывода с Консольное приложение на Приложение Windows .
Зачем вам консольное приложение, если вы хотите скрыть саму консоль? знак равно
Я рекомендую установить для типа вывода проекта значение Приложение Windows вместо Консольного приложения. Он не покажет вам консольное окно, но выполнит все действия, как это делает консольное приложение.
Вы можете сделать обратное и установить тип вывода приложения: Приложение Windows. Затем добавьте этот код в начало приложения.
Этот код отобразит консоль, если showConsole равно true
Смотрите мой пост здесь:
Вы можете создать приложение Windows (с окном или без него) и отображать консоль по своему усмотрению. При использовании этого метода окно консоли никогда не появляется, если вы не показываете его явно. Я использую его для двухрежимных приложений, которые я хочу запускать в консольном или графическом режиме, в зависимости от того, как они открываются.
«Просто чтобы спрятаться» вы можете:
Измените тип вывода с Консольное приложение на Приложение Windows ,
И вместо Console.Readline/key вы можете использовать new ManualResetEvent(false).WaitOne() в конце, чтобы приложение продолжало работать.
Если вы не хотите зависеть от заголовка окна, используйте это:
Если у вас нет проблем с интеграцией небольшого пакетного приложения, существует программа под названием Cmdow.exe , что позволит вам скрыть окна консоли на основе заголовка консоли.
Добавьте exe в решение, установите для действия сборки значение «Content», установите для параметра «Копировать в выходной каталог» то, что вам подходит, и cmdow скроет окно консоли при запуске.
Есть ли способ скрыть окно консоли при выполнении консольного приложения?
В настоящее время я использую приложение Windows Forms для запуска консольного процесса, но я не хочу, чтобы окно консоли отображалось во время выполнения задачи.
Если вы написали консольное приложение, вы можете сделать его скрытым по умолчанию.
Если вы используете Process Class, вы можете написать
до yourprocess.start(); , и процесс будет скрыт
Вы можете использовать API FreeConsole, чтобы отсоединить консоль от процесса:
(конечно, это применимо только в том случае, если у вас есть доступ к исходному коду приложения)
Если вы заинтересованы в выходе, вы можете использовать эту функцию:
Он запускает заданную программу командной строки, ждет ее завершения и возвращает результат как строку.
Если вы создаете программу, которая не требует ввода пользователя, вы всегда можете просто создать ее как службу. Служба не будет показывать какой-либо пользовательский интерфейс.
Я знаю, что не отвечаю точно, что вы хотите, но мне интересно, задаете ли вы правильный вопрос.
Почему бы вам не использовать:
- служба Windows
- создайте новый поток и запустите процесс на
Звучат как лучшие параметры, если вы хотите только запустить процесс.
Добавьте это в свой класс, чтобы импортировать DLL файл:
И затем, если вы хотите скрыть его, используйте следующую команду:
И если вы хотите показать консоль:
Основываясь на ответе Адама Марковица выше, после меня работало:
У меня есть общее решение, которым можно поделиться:
Просто включите этот класс в свой проект и вызовите Magician.DisappearConsole(); ,
Консоль будет мигать при запуске программы, нажав на нее. При выполнении из командной строки командная строка исчезает вскоре после выполнения.
Я делаю это для Discord Bot, который работает вечно на заднем плане моего компьютера как невидимый процесс. Это было проще, чем заставить TopShelf работать на меня. Несколько учебников TopShelf не помогли мне, прежде чем я написал это с помощью кода, который я нашел в другом месте. ;П
Я искал информацию о том, как скрыть собственное окно консоли. Удивительно, но единственными решениями, которые я смог найти, были хакерские решения, в которых FindWindow() находилось окно консоли по его названию. Я углубился в Windows API и обнаружил, что есть намного лучший и простой способ, поэтому я хотел бы опубликовать его здесь, чтобы другие могли найти.
ОТВЕТЫ
Ответ 1
Ответ 2
Просто зайдите в приложение "Свойства" и измените тип вывода из Консольного приложения на Приложение Windows.
Ответ 3
Зачем вам консольное приложение, если вы хотите скрыть консоль? =)
Я рекомендую установить для Project Output типа Приложение Windows вместо приложения Консоль. Он не покажет вам консольное окно, но выполните все действия, например, приложение консоли.
Ответ 4
Вы можете сделать обратное и установить тип вывода приложения: Windows Application. Затем добавьте этот код в начало приложения.
Этот код покажет Консоль, если showConsole есть true
Ответ 5
Смотрите мой пост здесь:
Вы можете создать приложение Windows (с окном или без него) и показать консоль по желанию. Используя этот метод, окно консоли никогда не появляется, если вы явно не показываете его. Я использую его для двухрежимных приложений, которые я хочу запускать в режиме консоли или gui в зависимости от того, как они открываются.
Ответ 6
Если вы не хотите, чтобы это зависит от названия окна, используйте это:
Ответ 7
Если у вас нет проблемы с интегрированием небольшого пакетного приложения, есть эта программа под названием Cmdow.exe, которая позволит вам скрыть консольные окна на основе на заголовке консоли.
Добавьте exe в решение, установите действие сборки в "Содержимое", установите "Копировать в выходной каталог" на то, что вам подходит, и cmdow скроет окно консоли при его запуске.
Чтобы снова увидеть консоль, просто измените Аргументы
Ответ 8
"Чтобы скрыть", вы можете использовать:
Измените тип вывода из Консольного приложения в приложение Windows,
Читайте также: