2012-08-03 22 views
5

我的程序需要打开一系列的信息窗口,当用户请求,并且想要在Windows 7任务栏上实现某种自定义分组。控制窗口7任务栏分组为我的应用程序

所需的功能:我所有的信息窗口应该组合在一起(如果在用户系统上启用了分组,那就是),但我的主窗口不应该与信息窗口分组。

我无法为我的信息窗口产生新的进程。

我的思考过程是可以通过某种方式修改信息窗口的窗口句柄,以便让任务栏将它单独分组,但我真的不知道从哪里开始。

编辑

香港专业教育学院发现了一些新的信息。我也许可以做一些与SHGetPropertyStoreForWindow如下陈述:http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx#where

...作为任何应用程序的运行Windows的属性。这可以通过以下两种方式之一来设置: 如果一个进程拥有的不同窗口需要不同的AppUserModelID来控制任务栏分组,请使用SHGetPropertyStoreForWindow检索窗口的属性存储,并将AppUserModelID设置为窗口属性。

+0

为您的Windows分配相同的appID。 – 2012-08-03 02:53:13

回答

0

我解决它通过使用Windows API Code Pack for .NET和下面的代码:用相同的ID分配

TaskbarManager.Instance.SetApplicationIdForSpecificWindow(window, guid); 

窗口将被组合在一起 - 有一个唯一的ID窗口将有一个单独的任务栏图标。

+0

如何获得窗口句柄和什么(gu)id是这样的? – Brackets 2017-08-26 16:05:11

+0

@Brackets:你可以使用任何guid。具有相同GUID的Windows将被组合在一起 - 具有唯一ID的窗口将具有单独的任务栏图标。 – caesay 2017-08-28 00:20:38

2

Application User Model IDs说:

“如果一个进程拥有不同的窗口需要不同AppUserModelIDs控制任务栏分组,使用SHGetPropertyStoreForWindow检索窗口的属性存储和设置AppUserModelID作为一个窗口属性”。

+0

这对我有用。我无法使用Windows API代码包,因为我们是.NET 2.0应用程序。 – user326608 2013-02-14 17:44:35

+0

我的问题是,我们的应用程序也可以通过COM启动,当它总是组合在任务栏分组中,并使用与通过COM调用子应用程序的父应用程序相同的图标和任务栏按钮。 这是VB.NET代码,没有的伎俩: '公开声明函数SetCurrentProcessExplicitAppUserModelID库 “Shell32.dll中” 别名 “SetCurrentProcessExplicitAppUserModelID”(BYVAL的AppID作为字符串)作为整数)'' SetCurrentProcessExplicitAppUserModelID(“CompanyName.ProductName。 SubProduct.1.0.0.0“)' – user326608 2013-02-14 17:50:30

相关问题