![](/img/trans.png)
[英]Winforms: How to change application taskbar icon programatically for Pinned App in Windows 7
[英]How do I associate my application with a pinned program on the Windows 7 taskbar?
我们有一个应用程序,我们称之为MyApp
。 在安装时,我们为 MyApp 创建一个桌面图标,它基本上调用MyLauncher.exe /launch MyApp.exe
。 MyLauncher 会做一些有用的事情(检查更新等),然后启动 MyApp。
使用 Windows 7 的用户可能希望将其固定到任务栏(即桌面图标上的鼠标右键,“固定到任务栏”):
但是,由于快捷方式指向 MyLauncher,因此当用户启动应用程序(使用桌面图标或任务栏图标)时会发生以下情况:MyLauncher 执行其操作,然后启动 MyApp。 在任务栏上,结果如下:
我明白为什么会发生这种情况。 由于 MyLauncher 启动 MyApp,Windows 7 任务栏将它们视为两个不同的应用程序。
显然,我的问题是:作为 MyLauncher 和 MyApp 的开发者,我可以为此做些什么吗? 我希望 Windows 7 任务栏将MyApp.exe
所有实例与启动MyLauncher.exe /lauch MyApp.exe
的快捷方式“关联”。
尝试使用“应用程序 ID” 请参阅此处了解更多信息: http : //msdn.microsoft.com/en-us/library/windows/desktop/dd378459( v=vs.85) .aspx
“应用程序用户模型 ID (AppUserModelIDs) 被 Windows 7 和更高版本系统中的任务栏广泛使用,以将进程、文件和窗口与特定应用程序相关联。在某些情况下,依赖分配给进程的内部 AppUserModelID 就足够了但是,拥有多个进程的应用程序或在主机进程中运行的应用程序可能需要明确标识自己,以便它可以将其不同的窗口分组到单个任务栏按钮下,并控制该应用程序跳转的内容清单。”
已经提到设置应用程序用户模型 ID。 在这篇文章中可以很容易地看到这是如何完成的:如何在 Windows 任务栏中对不同的应用程序进行分组?
但是你仍然有问题,当应用程序被固定时,它不会固定启动器。 但也有一个解决方案,即固定启动器:将一个“链式进程”固定到任务栏
您可以做的一件事就是根本不显示应用程序的任务栏图标。 在 WPF 中,它就像属性设置一样简单:
ShowInTaskbar="False"
这种方法的问题在于它会降低可用性,因为用户无法再知道应用程序何时运行,或者当它丢失在其他窗口后面时很容易将其带到最前面。 为了减轻其中的一些顾虑,您可以为此应用程序创建一个通知图标,它可以启用其中的一些功能,并为用户提供有关应用程序当前状态的一些反馈。 (运行,不运行等。)
这个 msdn 资源有一个关于如何在 Windows 窗体中创建通知图标的很好的代码示例。 您也可以对 WPF 应用程序使用相同的方法。
小提示:通知图标为 16x16 像素。 尝试在调整大小之前找到图标的矢量版本,因为这会给您带来更清晰的结果,因为在该尺寸下您往往会丢失很多细节。
一些用户与通知图标的交互可以包括:
1)
这更像是一个架构问题/问题 - 出于此类目的,这是一个不寻常的设计,
即,如果需要更新程序(我猜你有更多但要开始),通常在应用程序中检查 - 那么如果更新被视为你启动一个外部进程并更新应用程序等。
如果您要启动许多不同的东西,或者您有通用解决方案或更复杂的情况,启动器(如所述)会很有意义 - 例如,您有一个加载 dll-s、服务等的“主机进程”。
所以基本上你会因为一些不幸的设计和决定而遇到问题 - 除非你有足够的理由。
但是你说你不想重新设计......
2)
你仍然可以用启动器做一个“把戏”——然后做一个简单的工作......
这可能会奏效,还没有尝试过,但我不明白为什么不应该这样做 - 您可以保留现有架构等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.