|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
|
Afinogen |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Суть проблемы такая, при запуске из проводника виндовс должна открыться форма и пользователь работает с ней. А при запуске из cmd информация должна выводиться и в консоль и на форму (такое есть в линуксе).
Пишу в eclipse+mingw, язык с++. В опциях линкера есть параметр -mwindows. С ним только форма, без него консоль и форма. Но консоль появляется постоянно и при запуске из cmd и просто. |
|||
|
||||
bsa |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 1 Всего: 196 |
при запуске неконсольных программ из консоли они от нее отцепляются.
|
|||
|
||||
Afinogen |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Печалька
Это сообщение отредактировал(а) Afinogen - 12.3.2013, 23:02 |
|||
|
||||
leniviy |
|
|||
Опытный Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
Вообще-то такой механизм реализован в версии Netbeans для Windows, а также таким свойством обладает сборка Gedit под Windows.
Netbeans.exe - это маленький ланчер джавы. Я думаю, разобраться в его исходниках будет не сложно. Я думаю, 'subsytem' определяет лишь, будет ли cmd.exe в интерактивном режиме ждать завершения программы. А отцепление от консоли делает, возможно, сама программа. Это сообщение отредактировал(а) leniviy - 13.3.2013, 11:21 |
|||
|
||||
bsa |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 1 Всего: 196 |
В любом случае, вопрос не соответствует разделу. Следует задавать в WinAPI.
|
|||
|
||||
Afinogen |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Пробовал разные опции -Wl,--subsystem,windows -mwindows не помогло... Вариант что программа сама отцепляется от консоли похож на правду, т.к. консольные приложения не отцепляются от cmd но куда копать пока не пойму bsa, я думал это опции линковщика, перенесите пожалуйста в нужный раздел. Это сообщение отредактировал(а) Afinogen - 13.3.2013, 13:45 |
|||
|
||||
Afinogen |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Нашел решение, возможно не совсем красивое
Узнаем позицию курсора в консоли, для не консольных приложений это х=0 у=0, для консольных у будет больше 0 |
|||
|
||||
leniviy |
|
|||
Опытный Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: 1 Всего: 5 |
В Netbeans делают не консольное приложение и используют функцию "AttachConsole", затем fopen("CON").
http://hg.netbeans.org/main-golden/file/2d...sfuncs.cpp#l343 Это сообщение отредактировал(а) leniviy - 13.3.2013, 22:50 |
|||
|
||||
Afinogen |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
leniviy, AttachConsole создает отдельное окно cmd для вызвавшей эту функцию программы, это тоже самое что и параметр линковщика -mwindows. Мне не нужно чтобы пользователь после дабл клика по ярлыку с программой видел окно с консолью, нужно чтобы данные выводились в консоль только при вызове программы из консоли.
P.S. может я чего не понял в исходнике NetBeans, время позднее... |
|||
|
||||
GremlinProg |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Afinogen, как вариант - написать консольное приложение-switch'ер, которое бы смотрело на свою строку запуска и в случае, если к GUI требовался бы дополнительный консольный вывод - создавала бы пайп и передавало бы его каким-то образом в GUI, например: через командную строку для CreateProcess, а GUI уже подхватывал этот пайп и писал в него все что надо. В таком случае, switch'ер должен редиректить вывод из пайпа в свою консоль до тех пор, пока дочерний процесс не будет завершен.
Добавлено через 42 секунды в таком случае, switch'ер - исходная точка запуска приложения Добавлено через 4 минуты и 22 секунды только при запуске из проводника придется запускать GUI-приложение напрямую (минуя switch'ер), чтобы не появлялась консоль -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GremlinProg |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
По сути, сам факт задействования switch'еа - альтернатива Вашего флага, т.е. можно ни каких проверок switch'у и не делать, достаточно в GUI проверить наличие пайпа в своей командной строке.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Dem_max |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
все легко и просто:
1. При запуске твоего процесса определить, кто вызвал CreateProcess который запустил программу. 2. Если это cmd, создать окно Windows и привязать ввод и вывод к cmd породивший твой процесс. 3. Если твою программу породил не cmd, просто создать окно Windows. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
xvr |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Если вы хотите, что бы при запуске вашего приложения из консоли оно начало выводит данные в эту же консоль, то вы обязанны сделать свое приложение консольным. В противном случае вы не сможете получить доступ к консоли родительского процесса.
При запуске консольного приложения из под Проводника всегда будет появляться новая консоль, но ее можно оперативно убить из самого приложения позвав FreeConsole() IMHO сделать по другому не получится, т.к. таков способ обработки консоли в самой Windows |
|||
|
||||
GremlinProg |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
по другому я предложил, через дополнительное консольное приложение -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
xvr |
|
||||
Эксперт Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
При этом будет кратковременно выскакивать консоль при старте из проводника. Вариант с -
требует от пользователя знать где и какое именно приложение нужно запускать. Возможно ТС это устроит, а может и нет |
||||
|
|||||
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |