繁体   English   中英

如何将我的应用程序与 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。

桌面上的 MyApp

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

任务栏上的 MyApp

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

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 像素。 尝试在调整大小之前找到图标的矢量版本,因为这会给您带来更清晰的结果,因为在该尺寸下您往往会丢失很多细节。

一些用户与通知图标的交互可以包括:

  • 双击 > 将应用程序置于最前面
  • 右键单击 > 显示带有一些选项的上下文菜单。 (IE 带到前面、关闭等...)
  • 鼠标悬停 > 显示包含有关应用程序的一些信息的工具提示。

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

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

这可能会奏效,还没有尝试过,但我不明白为什么不应该这样做 - 您可以保留现有架构等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM