如何将我的应用程序与Windows 7任务栏上的固定程序相关联?

时间:2012-03-15 16:51:55

标签: c# .net vba windows-7 taskbar

我们有一个应用程序,我们称之为MyApp。在安装时,我们为MyApp创建一个桌面图标,基本上调用MyLauncher.exe /launch MyApp.exe。 MyLauncher做了一些有用的东西(检查更新等),然后启动MyApp。

MyApp on the Desktop

使用Windows 7的用户可能希望将其固定到任务栏(即桌面图标上的鼠标右键,“Pin to Taskbar”):

MyApp on the Taskbar

但是,由于快捷方式指向MyLauncher,当用户启动应用程序时(使用桌面图标或任务栏图标)会发生以下情况:MyLauncher执行其操作,然后启动MyApp。在任务栏上,结果如下:

MyApp twice on the Taskbar

我理解为什么会这样。由于MyLauncher启动MyApp,Windows 7任务栏将它们视为两个不同的应用程序。

显然,我的问题是:作为MyLauncher和MyApp的开发人员,我可以对此做些什么吗?我希望Windows 7任务栏“关联”{{1}的所有实例使用从MyApp.exe开始的快捷方式。

4 个答案:

答案 0 :(得分:3)

尝试使用“App Ids” 有关详情,请参阅此处: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx

“应用程序用户模型ID(AppUserModelIDs)被Windows 7及更高版本系统中的任务栏广泛用于将进程,文件和窗口与特定应用程序相关联。在某些情况下,依赖于分配的内部AppUserModelID就足够了但是,拥有多个进程的应用程序或在主机进程中运行的应用程序可能需要明确标识自身,以便它可以在单个任务栏按钮和控件下对其他不同的窗口进行分组。该应用程序的跳转列表的内容。“

答案 1 :(得分:0)

您可以做的一件事就是不显示应用程序的任务栏图标。在WPF中,它就像属性设置一样简单:

ShowInTaskbar="False"

这种方法的问题在于它会降低可用性,因为用户无法再知道应用程序何时运行,或者当它在其他窗口后丢失时很容易将其带到最前端。为了缓解这些问题,您可以为此应用程序创建一个通知图标,该图标将启用其中一些功能,并向用户提供有关应用程序当前状态的一些反馈。 (跑步,不跑等)。

This msdn resource有一个很好的代码示例,介绍如何在Windows窗体中创建通知图标。您也可以对WPF应用程序使用相同的方法。

enter image description here

小提示:通知图标为16x16像素。在调整大小之前尝试找到图标的矢量版本,因为这会给你带来更加清晰的结果,因为你会在这个尺寸上丢失很多细节。

某些用户与notify-icon的互动可以包括:

  • 双击>将应用程序带到前面
  • 右键单击>打开一个包含一些选项的上下文菜单。 (I.E.带到前面,关闭等......)
  • 鼠标悬停>提供一个工具提示,其中包含有关应用程序的一些信息。

答案 2 :(得分:0)

1)
这更像是一个架构问题/问题 - 对于这样的目的来说,这是一个不寻常的设计,
即如果一个更新者(我猜你有更多但是开始那个)需要通常在应用程序中检查 - 然后如果更新被认为是你开始一个外部过程并更新应用程序等。
如果您要发布许多不同的东西,或者您有一个通用的解决方案,或者在更复杂的情况下,启动器(如上所述)会有意义 - 例如你有一个加载dll-s,服务等的“主机进程” 所以基本上你会遇到问题,因为有点不幸的设计和决定 - 除非你有足够的保证。
但是你说你不想重新设计...... 2)
你仍然可以用启动器做一个“技巧” - 并且做一些简单的工作......

  • 首先启动'MyApp -argument:check'(桌面上的图标属于它,而不是启动器),并在启动时有一个参数'fork',如果'check'执行一个小的'shim'代码,推出'MyLauncher',
  • 让启动器执行它应该执行的操作 - 您甚至可以在启动后关闭主MyApp,
  • 当启动器完成时,它再次启动MyApp(或者更复杂,如果只有在需要更新时才会关闭等等 - 但前一个更容易),并使用其他参数或不使用任何(取决于什么)你想要等。),
  • 你正在做一些排序的双重重定向 - start app => launcher =>应用程序再次,
  • 你应该没有问题这样的图标,
  • 如果需要“管理员”模式,你应该注意为这两个应用程序(通常是需要更新的启动器,更多权限)提供正确的清单,但我想你已经有了,

可能会有这个伎俩,但没有尝试,但我不明白为什么不应该 - 并且你可以保持现有的架构等。

答案 3 :(得分:0)

已经提到了设置应用程序用户型号ID。如何做到这一点很容易在这篇文章中看到:How to group different apps in Windows task bar?

但是,您仍然有一个问题,当固定应用程序时,它不会固定启动器。但是,对此还有一个解决方案,那就是将Launcher固定为:Pinning to the taskbar a "chained process"