Как узнать, находимся ли мы в консоли или в оконном приложении? - PullRequest
7 голосов
/ 15 января 2009

Контекст: программирование библиотеки win32-mfc на c / c ++

Как узнать, находимся ли мы в консоли или в оконном приложении?

Ответы [ 2 ]

13 голосов
/ 15 января 2009

Вы можете определить, есть ли консоль, подключенная к процессу в данный момент, вызвав функцию win32 GetConsoleWindow . Если он возвращает NULL, тогда к процессу не подключена консоль. Однако это не обязательно скажет вам, работаете ли вы в оконном приложении или нет. Например, у меня может быть оконное приложение, которое при запуске использует AllocConsole , чтобы выделить консоль для вывода отладочной информации, и в этом случае вы будете использовать оба одновременно. Другая проблема, которую я вижу в том, что вы описываете, состоит в том, что приложение может не иметь окон и не иметь подключенной консоли (например, служба Windows).

Я собираюсь согласиться с Литбом и Мартином и по этому вопросу. Если вашей библиотеке нужно это знать, то, вероятно, она недостаточно разделена. Если вы используете это, чтобы определить, куда отправлять выходные данные отладки, например, лучшим подходом было бы использовать cout или cerr и позволить приложению, использующему библиотеку, иметь дело с перенаправлением потока туда, куда он хочет.

2 голосов
/ 15 января 2009

Я не уверен в этом (не попробовав сам), но вы можете вызвать функцию GetStartupInfo, которая завершает структуру STARTUPINFO.

Возможно, консольные и windows-приложения по-разному устанавливают флаг STARTF_USESHOWWINDOW члена dwFlags, и вы можете различить их следующим образом.

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...