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

最佳答案

shell使用每个窗口的Application User Model ID(appusermodelid)对任务栏中的窗口进行分组。
默认情况下,由给定exe生成的每个窗口(即使在不同的进程中)都共享系统生成的appusermodelid。
通过调用SetCurrentProcessExplicitAppUserModelID,可以为每个进程提供自己的appusermodelid。从你的描述来看,这可能是Skype正在做的事情,尽管我还没有检查。
通过在窗口上设置不同的PKEY_AppUserModel_ID属性,可以为每个窗口提供自己的appusermodelid。
注意,这些id必须具有特定的format
CompanyName.ProductName.SubProduct.VersionInformation
关于这一点,我也值得阅读我链接到的文档。
我不知道winforms对此有明确的支持,但您当然可以使用interop直接调用win32 api。

08-15 23:36