Как узнать, находимся ли мы в консольном или оконном приложении?
контекст: Программирование C / C++ win32-MFC library
Как узнать, находимся ли мы в консольном или оконном приложении?
2 ответов
вы можете определить, есть ли консоль, подключенная в настоящее время к процессу, вызвав функцию win32 GetConsoleWindow. Если он возвращает NULL, то консоль не подключена к процессу. Однако это не обязательно скажет вам, работаете ли вы в оконном приложении или нет. Например, у меня может быть оконное приложение, которое использует AllocConsole при запуске выделить консоль для вывода отладки, в этом случае у вас будет и то и другое одновременно. Другой проблема я вижу, что с тем, что вы описываете, приложение может не иметь окон и консоли (например, служба windows).
Я должен согласиться с litb и Мартин на этот один также. Если ваша библиотека должна знать это, то она, вероятно, недостаточно развязана. Если вы используете это, чтобы определить, куда отправлять выходные данные отладки, например, лучшим подходом было бы использовать cout или cerr и позволить приложению, использующему библиотеку, заниматься перенаправлением поток туда, куда он хочет.
Я не уверен в этом (не попробовав сам), но вы можете вызвать функцию GetStartupInfo, которая завершает структуру STARTUPINFO.
возможно, консольные и windows-приложения устанавливают флаг STARTF_USESHOWWINDOW члена dwFlags по-разному, и вы можете различать их так.
Как упоминалось в комментариях к вашему вопросу, это обычно не хороший знак, когда библиотеке нужно знать такие вещи - тем более развязанный вы можете сохранить его лучше.
надеюсь, это поможет.