最小化任何程序到系统托盘

时间:2010-04-05 20:00:45

标签: c# system-tray systray

嘿,我正在尝试制作一个程序,将程序最小化到系统托盘而不是通常最小化它。这可能吗?我一直在谷歌四处寻找,但无法找到任何东西。

1 个答案:

答案 0 :(得分:5)

系统托盘中的图标称为“通知图标”。

要对您自己的应用程序执行此操作,如果您使用WinForms,则可以使用NotifyIcon类在系统托盘中显示图标。然后,您只需将窗口设置为不在任务栏中显示。

如果您使用的是WPF,则无法替换,您仍需使用旧的WinForms NotifyIcon类,请查看此MSDN sample以获取更多相关信息。


如果你想隐藏另一个应用程序,你需要做的是使用API​​调用来更改应用程序窗口的状态。

您可以使用FindWindow获取要隐藏的窗口的句柄,然后可以使用GetWindowLong来获取窗口状态。然后,您需要从状态中删除WS_EX_APPWINDOW标志,并使用SetWindowLong方法应用新样式,这将从任务栏中删除它。然后,您可以使用Get / SetWindowState方法查找窗口的状态并隐藏/最小化它。

您仍然需要使用NotifyIcon类在系统托盘中显示您自己的图标。

祝所有这一切顺利。这不是我个人尝试过的,但我已经以其他方式使用了所有这些方法调用。如果您没有从C#中完成API,那么您可能会发现需要进行一些谷歌搜索来找出版本API方法的DllImports。虽然不应该太难。


Crazyd22发现codeproject article使用了一组略有不同的API方法但实现了几乎相同的效果。 (见下面的评论。)