2012-08-03 20 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

相關問題