【问题标题】:Implementing separate application instances in taskbar like Skype在 Skype 等任务栏中实现单独的应用程序实例
【发布时间】:2013-12-03 00:30:18
【问题描述】:

我现在注意到 Skype 的一些更新,如果您启动 2 或 3 个 Skype 实例,在 Windows 任务栏中,它们会显示为单独的窗口,您可以单独拖动它们而不是当它们“粘合”在一起时的其他应用程序你可以一次拖动它们。 我的问题是如何在我的应用程序中实现个人外观,是否可以通过 C# 或通过 winapi 实现?

【问题讨论】:

    标签: c# windows winapi skype taskbar


    【解决方案1】:

    shell 使用每个窗口的Application User Model ID (AppUserModelID) 对任务栏中的窗口进行分组。

    默认情况下,给定 EXE 生成的每个窗口(即使在不同进程中)共享一个系统生成的 AppUserModelID。

    您可以通过调用SetCurrentProcessExplicitAppUserModelID 为每个进程提供自己的 AppUserModelID。根据您的描述,这可能是 Skype 正在做的事情,虽然我没有检查过。

    您可以通过在窗口上设置不同的PKEY_AppUserModel_ID 属性来为每个窗口提供自己的 AppUserModelID。

    请注意,这些 ID 必须具有特定的format

    CompanyName.ProductName.SubProduct.VersionInformation

    Raymond Chen wrote an article 关于这个,我链接到的文档也值得阅读。

    我不知道 WinForms 对此有明确的支持,但您当然可以使用互操作直接调用 Win32 API。

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 1970-01-01
      • 2012-03-20
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多