- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
/* ... */
HWND mywnd = NULL;
/* ... */
#ifdef WIN32
mywnd = GetForegroundWindow();
if(GetWindowLong(mywnd, GWL_WNDPROC)) {
for(i = 1; i < argc; i++) {
if(verbose_options(argv[i]) < 0) break;
switch(argv[i][1]) {
case 'f': i++; break;
case 'F': i++; break;
case 'L': i++; break;
case 'a': i++; break;
default: break;
}
}
if(i > argc) i = argc;
i = 3 - (argc - i);
if(i > 0) {
fprintf(stderr,
"- GUI mode activated, remember that the tool works also from command-line\n"
" where are available various options like folder scanning, filters and so on\n"
"\n");
/* дальше пляски с извлечением параметров из argv */
}
}
#endif
Наткнулся на утилиту, которая умеет отличать запуск из гуев и из консоли. Полез глядеть, как сделано, а там вот такие чудеса.
PascalGovno 20.11.2012 12:15 # 0
Steve_Brown 20.11.2012 17:09 # +1
А вообще двойное использование это известная проблема. Если приложение консольное, то при старте будет всегда создаваться консоль, а если оконное, то при запуске из консоли процесс будет запускаться отдельно от нее. В Visual Studio это, помнится, решили хитро: сделали запускаемый файл не екзешником, а комом: MSDEV.COM .
absolut 21.11.2012 10:12 # +3
PascalGovno 21.11.2012 10:51 # +4
> запускаемый файл комом
Тоже отлично сочетается.
bormand 21.11.2012 11:02 # +1
PascalGovno 21.11.2012 15:07 # +1
PascalGovno 21.11.2012 15:18 # +1
Существует путь короче - http://msdn.microsoft.com/library/windows/desktop/ms683170
Steve_Brown 21.11.2012 16:53 # 0
Но GetConsoleProcessList вряд ли поможет. Потому что проблема на уровне ОС, а не программы:
- если .exe консольный (по флагу в заголовке), то при запуске ярлыком выскочит консоль. Которую, конечно, можно сразу же Free, но будет некрасиво.
- если гуевый, то консоль вернется к приглашению сразу же после запуска.
PascalGovno 21.11.2012 17:32 # 0
С другой стороны, если файл помечен для GUI, то нет никакой возможности присоединиться к консоли родителя и выводить туда трейс. Последнее было бы очень заманчиво.
Тут речь о том, как жить с вышеперечисленным взаимным недружелюбием подсистем. Например, не дать выведенному тексту пропасть если вдруг запустили из графической оболочки. Здесь как раз GetConsoleProcessList поможет.
Vindicar 20.11.2012 19:09 # +1
roman-kashitsyn 20.11.2012 19:14 # +2