none
Вывод в командную строку. RRS feed

  • Вопрос

  • Вид запроса в консольном приложение из командной строки:

    Вид запроса в Win forms приложение из командной строки:

    Как в Win forms приложение достигнуть аналогичного вида как в запросе консольного приложения? То есть после ввода команды чтоб не отображалась строка C:\TestConsole. 

    Возможно ли это вообще, что мне подсказывает что нет. Так как я использую AttachConsole()

    Но тех директор просит именно данного поведения...



    • Изменено MacroMax 5 июня 2017 г. 12:00
    5 июня 2017 г. 11:58

Ответы

Все ответы

  • Попробуйте выполнять операции с консолью до вывода формы (файл Program.cs).

    Так же если консоль уже есть (вызов GetConsoleWindow() для проверки) то не надо вызывать AttachConsole().


    This posting is provided "AS IS" with no warranties, and confers no rights.

    5 июня 2017 г. 16:41
    Модератор
  • "Как в Win forms приложение достигнуть аналогичного вида как в запросе консольного приложения?"

    WinForms приложение - это всего лишь шаблон, проекта, генерирующий определенную структуру программы для удобства. Реальное поведение определяется параметром "Тип выходных данных" в свойствах проекта:

    1. Консольное приложение. В этом случае приложение автоматически получает при старте консоль запускающего процесса, если она есть. Тем не менее, впоследствии ничто не мешает приложению создавать формы, скрывать окно консоли, запускать цикл обработки сообщений и вести себя как обычное WinForms-приложение.

    2. Приложение Windows. В этом случае консоль при запуске приложения не создается. Приложение может присоединиться к консоли родительского процесса и "выдавать" себя за консольное, однако его работа при этом не будет аналогична "правильному" консольному приложению, так как приложение не владеет консолью по-настоящему. В данный момент, я не вижу способа, как избавиться от вывода лишней строки приглашения при вызове AttachConsole. Скорее всего, это фундаментальное ограничение.

    3. Библиотека классов. Ну, тут все ясно, нам это не подходит.

    Таким образом, вам надо со своим тех. директором задать себе вопрос, что же вы на самом деле хотите получить в результате. Консольное приложение, притворяющееся WinForms-приложением, наоборот, или вообще что-то третье.

    5 июня 2017 г. 18:36
  • По поводу второго пункта я ему не однократно пытался объяснить, но не нашел документированного подтверждения того что не коем образом нельзя убрать лишнею строку. 

    По этому тут исходя из его убеждения, где то видел это и хочу чтоб у нас было так...

    Честно скажу, думал консольное приложение прошлый век и по этому не когда не углублялся в данную тематику. И вот это функция вызова из командной строки 100% это лишь его хотелка, ибо основной потребитель программы бухгалтера которые будут создавать отчеты для 1с программы. 

  • Так я и пытаюсь объяснить, что эта "хотелка" на 100% возможна, нужно лишь понять что именно вы хотите. "Win Forms приложение" и "консольное приложение" - не взаимоисключающие понятия. Возможно, вам нужно просто переключить тип вывода в свойствах проекта на "Консольное приложение", в функции Main вызвать GetConsoleWindow и если прога вызвана без параметров, сделать ShowWindow(hWnd, SW_HIDE); 
  • На текущий момент три режима запуска

    1. Без параметров

    2. С заданными параметрами 

    3. Выполнение функции программы с заданными параметрами в командной строке. 

    Все это сейчас хорошо работает, проблема лишь только в лишней строке что описал выше при выводе строк.

    Компиляция приложение в консольном режиме и с дальнейшем использованием ShowWindow(hWnd, SW_HIDE), данный метод один из первых использовал. Но там я столкнулся с визуальными проблемами... От несколько долей секунды и более при запуске программы в GUI режиме, консоль отображается и это визуально не очень хорошо выглядит. 

  • Могу предложить для запуска в GUI режиме сделать вспомогательную программу, которая будет основную программу запускать вызовом ShellExecute с параметром SW_HIDE. Тогда окно консоли изначально не должно появляться.