2012-08-03 5 views
5

Mein Programm muss eine Reihe von Informationsfenstern öffnen, wenn es von einem Benutzer angefordert wird, und möchte eine Art benutzerdefinierte Gruppierung in der Windows 7-Taskleiste implementieren.Steuerungsfenster 7 Taskleistengruppierung für meine Anwendung

Gewünschte Funktionalität: Alle meine Informationsfenster sollten gruppiert werden (wenn die Gruppierung auf dem Benutzersystem aktiviert ist), aber mein Hauptfenster sollte NICHT mit den Informationsfenstern gruppiert werden.

Ich kann keinen neuen Prozess für meine Informationsfenster spawnen.

Mein Denkprozess ist, dass es eine Möglichkeit geben könnte, das Fensterhandle des Informationsfensters irgendwie zu ändern, damit die Taskleiste es separat gruppiert, aber ich weiß wirklich nicht, wo ich damit anfangen soll.

EDIT

gefunden Ive einige neue Informationen. Ich kann in der Lage sein, etwas mit SHGetPropertyStoreForWindow zu tun, wie hier angegeben: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx#where

... Als Eigenschaft jeder der Lauf Fenster der Anwendung. Dies kann auf zwei Arten erfolgen: Wenn verschiedene Windows, die zu einem Prozess gehören, unterschiedliche AppUserModelIDs zum Steuern der Taskleistengruppierung benötigen, rufen Sie mit SHGetPropertyStoreForWindow den Eigenschaftsspeicher des Fensters ab und legen Sie die AppUserModelID als Fenstereigenschaft fest.

+0

Weisen Sie Ihren Fenstern die gleiche appID zu. –

Antwort

0

Ich löse es durch den Windows API Code Pack for .NET verwenden und den folgenden Code:

TaskbarManager.Instance.SetApplicationIdForSpecificWindow(window, guid); 

Fenster mit der gleichen ID zugeordnet werden in Gruppen zusammengefasst werden - Fenster mit einer eindeutigen ID eine separate Taskleistensymbol haben.

+0

Wie man Fensterhandle bekommt und was (gu) id ist das? – Brackets

+0

@Brackets: Sie können eine beliebige GUID verwenden. Windows mit der gleichen GUID wird zusammen gruppiert - Windows mit einer eindeutigen ID wird ein separates Taskleistensymbol haben. – caesay

2

Application User Model IDs sagt:

„Wenn verschiedene Fenster von einem Prozess im Besitz verschiedener AppUserModelIDs erfordern Taskleiste Gruppierung zu steuern, SHGetPropertyStoreForWindow verwenden das Fenster des Eigenschaftenspeicher abzurufen und die AppUserModelID als Fenster-Eigenschaft.“

+0

Das funktionierte für mich. Ich konnte das Windows API Code Pack nicht als .NET 2.0 App verwenden. – user326608

+0

Mein Problem war, dass unsere App auch über COM gestartet werden kann, und wenn es war, würde es immer in der Taskleistengruppierung kombiniert und das gleiche Symbol und die Taskleiste wie die übergeordnete App verwenden, die die untergeordnete App über COM anruft. Dies ist der VB.NET-Code, den Trick: 'öffentliche Declare Function SetCurrentProcessExplicitAppUserModelID Lib "Shell32.dll" Alias ​​"SetCurrentProcessExplicitAppUserModelID"(ByVal AppID As String) As Integer)' ' SetCurrentProcessExplicitAppUserModelID (" CompanyName.ProductName. SubProduct.1.0.0.0 ")' – user326608

Verwandte Themen