在Skype等任务栏中实现单独的应用程序实例

时间:2013-11-19 12:38:36

标签: c# windows winapi skype taskbar

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

1 个答案:

答案 0 :(得分:2)

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对此有明确的支持,但您当然可以使用interop直接调用Win32 API。