Как мне написать консольное приложение в Windows, которое свернул бы в системный трей? - PullRequest
4 голосов
/ 06 ноября 2008

У меня написано консольное приложение Visual C ++ (то есть подсистема: консоль), которое печатает полезные диагностические сообщения на консоль.

Однако я бы хотел, чтобы приложение было минимизировано в большинстве случаев, и вместо того, чтобы свернуть его на панель задач, появиться в виде симпатичного значка на панели задач. Я также хотел бы восстановить консоль при нажатии на значок в системном трее.

Как мне изменить программу, чтобы сделать это?

Ответы [ 5 ]

14 голосов
/ 06 ноября 2008

Это будет ужасный хак.

Сначала вам нужно получить hWnd / hInstance вашего консольного приложения. Прямо сейчас я могу придумать только один способ:

  • Создать Guid с CoCreateGuid()
  • Преобразовать его в строку
  • Установите заголовок окна консоли для этого руководства с помощью SetConsoleTitle()
  • Найдите hWnd вашего окна с Guid в качестве плитки с FindWindow()
  • И с этого момента вы можете сделать это обычным способом. См. http://www.gidforums.com/t-9218.html для получения дополнительной информации.
  • Не забудьте переименовать окно консоли в исходное название, как только закончите.

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

4 голосов
/ 06 ноября 2008

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

1 голос
/ 12 февраля 2009

Чтобы узнать, как у консоли есть два варианта:

  • В Windows 2000 или более поздней версии вы можете использовать функцию GetConsoleWindow (). Не забудьте определить _WIN32_WINNT как 0x0500 или выше, прежде чем включать windows.h для доступа к этой функции.
  • Если вы хотите запустить свою программу и в более ранних версиях Windows, вы должны использовать что-то вроде трюка с GUID, описанного выше.
0 голосов
/ 06 ноября 2008

Ответ с GUID совершенно нелепый (нет никакого смысла) Консоль hWnd, конечно же, предоставляется GetConsoleWindow () (!)

0 голосов
/ 06 ноября 2008

Вероятно, вам лучше всего создать "Окно только для сообщений" (очередь сообщений без видимого окна) для получения сообщений области уведомлений.

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