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