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

3

嗨,我正在尝试制作一个程序,将任何程序最小化到系统托盘而不是正常最小化。这可能吗?我在谷歌上找了一圈,但找不到任何东西。

1个回答

5
系统托盘中的图标称为“通知图标”。
如果您使用的是WinForms,可以使用NotifyIcon类在系统托盘中显示图标。然后,您只需将窗口设置为不在任务栏中显示即可。
如果您使用的是WPF,则没有替代品,仍需使用旧的WinForms NotifyIcon类,请查看MSDN示例以获取更多信息。
如果您想隐藏另一个应用程序,您需要使用API调用来更改应用程序窗口的状态。您可以使用FindWindow获取要隐藏的窗口的句柄,然后可以使用GetWindowLong获取窗口状态。然后,您需要从状态中删除WS_EX_APPWINDOW标志,并使用SetWindowLong方法应用新样式,这将将其从任务栏中删除。然后,您可以使用Get/SetWindowState方法查找窗口的状态并隐藏/最小化它。
你仍然只需要使用NotifyIcon类将自己的图标显示在系统托盘中。
祝你好运。这不是我个人尝试过的东西,但我已经以其他方式使用了所有这些方法调用。如果你之前从C#进行API编程方面没有经验,你可能需要搜索一下版本API方法的DllImports来解决问题。不过这不应该太难。

Crazyd22 发现了一个 codeproject 文章,它使用了一组略微不同的 API 方法,但基本上实现了相同的效果。(请参见下面的评论。)


是的,我知道这个,我的意思是不同的应用程序,比如iTunes。 - Crazyd22
哦,你想将其他程序最小化到系统托盘。好的,为了做到这一点,你仍然需要使用NotifyIcon在系统托盘中显示一个图标,但你需要找到一个API调用来隐藏程序任务栏窗口。等一下,我看看能不能找到什么东西。 - Simon P Stevens
@Charles M:不,实际上并没有。这些方法并没有做任何严重的事情。任何可能带来安全风险的方法都需要调用程序以管理员身份运行才能调用。(而且,我认为在C#中,任何API调用都需要完全信任)。你必须始终记住,计算机的管理员/所有者应该始终拥有完全控制权,因此只要确保您的PC免受恶意代码的攻击,像这样的API调用就不太可能引起任何问题。 - Simon P Stevens
这似乎比我想象的复杂一些:P,隐藏一个应用程序更简单吗?我只是想让应用程序对其他用户或查看计算机的人'隐藏'。 - Crazyd22
@Crazyd22:不是真的。问题在于你试图干扰另一个应用程序的窗口。这种功能不是由.NET框架提供的,因此你必须诉诸于更低级别的winAPI操作。抱歉,我真的想不到其他的方法来解决这个问题。 - Simon P Stevens
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接