Сверните любую программу в системный трей - PullRequest
3 голосов
/ 06 апреля 2010

Эй, я пытаюсь создать программу, которая сворачивает любую программу в системный трей, а не обычно сворачивает ее. Это возможно? Я искал в Google, но ничего не могу найти.

1 Ответ

5 голосов
/ 06 апреля 2010

Значки на панели задач называются «Значки уведомлений».

Чтобы сделать это с вашим собственным приложением, если вы используете WinForms, вы можете использовать класс NotifyIcon для отображения значков в системном трее. Тогда все, что вам нужно сделать, это установить окно, которое не будет отображаться на панели задач.

Если вы используете WPF, замены нет, вам все равно придется использовать старый класс WinForms NotifyIcon, посмотрите этот пример MSDN для получения дополнительной информации по этому вопросу.


Если вы хотите скрыть другое приложение, вам нужно использовать вызовы API для внесения изменений в состояние окна приложений.

Вы можете использовать FindWindow , чтобы получить дескриптор окна, которое вы хотите скрыть, затем вы можете использовать GetWindowLong , чтобы получить состояние окон. Затем вам нужно удалить флаг WS_EX_APPWINDOW из состояния и использовать метод SetWindowLong , чтобы применить новый стиль, это удалит его из панели задач. Затем вы можете использовать методы Get / SetWindowState , чтобы узнать состояние окна и скрыть / свернуть его.

Вам все еще нужно использовать класс NotifyIcon, чтобы отобразить свой собственный значок в системном окне.

Удачи со всем этим. Это не то, что я пробовал лично, но я использовал все эти вызовы методов другими способами. Если вы еще не делали API-интерфейсы из C # до того, как обнаружили, что вам нужно немного погуглить, чтобы выяснить ваши DllImports для методов API версии. Хотя не должно быть ничего слишком сложного.


Crazyd22 нашел статью codeproject , в которой используется немного другой набор методов API, но при этом достигается практически тот же эффект. (См. Комментарии ниже.)

...