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