2012-08-03 18 views
5

Mi programa necesita abrir una serie de ventanas de información cuando lo solicita un usuario, y desea implementar algún tipo de agrupación personalizada en la barra de tareas de Windows 7.control de la agrupación de la barra de tareas de windows 7 para mi aplicación

Funcionalidad deseada: todas mis ventanas de información deben agruparse juntas (si la agrupación está habilitada en el sistema de usuarios, eso es) pero mi ventana principal NO debe agruparse con la ventana de información.

No puedo generar un nuevo proceso para mis ventanas de información.

Mi proceso de pensamiento es que podría haber una manera de modificar el identificador de ventana de la ventana de información de alguna manera para que la barra de tareas la agrupe por separado, pero sinceramente ni siquiera sé por dónde empezar con esto.

EDITAR

he encontrado alguna información nueva. Puede que sea capaz de hacer algo con SHGetPropertyStoreForWindow como se ha dicho aquí: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx#where

... Como una propiedad de cualquiera de las ventanas en ejecución de la aplicación. Esto se puede establecer de una de estas dos maneras: Si diferentes ventanas propiedad de un proceso requieren AppUserModelIDs diferentes para controlar la agrupación de barra de tareas, use SHGetPropertyStoreForWindow para recuperar el almacén de propiedades de la ventana y establezca AppUserModelID como una propiedad de ventana.

+0

Asigne a sus ventanas la misma ID de aplicación. –

Respuesta

0

Lo resuelto mediante el uso de la Windows API Code Pack for .NET y el siguiente código:

TaskbarManager.Instance.SetApplicationIdForSpecificWindow(window, guid); 

ventana asignada con el mismo id se agruparán - ventanas con un identificador único tendrán un icono de la barra de tareas por separado.

+0

¿Cómo obtener el identificador de ventana y qué (gu) id es esto? – Brackets

+0

@Brackets: puede usar cualquier guid. Las ventanas con el mismo guid se agruparán juntas: las ventanas con un ID único tendrán un ícono de barra de tareas separado. – caesay

2

Application User Model IDs dice:

"Si diferentes ventanas propiedad de un proceso requieren diferentes AppUserModelIDs para controlar agrupación barra de tareas, utilice SHGetPropertyStoreForWindow para recuperar almacén de propiedades de la ventana y ajustar la AppUserModelID como una propiedad de la ventana."

+0

Esto funcionó para mí. No pude usar el paquete de códigos API de Windows ya que somos una aplicación .NET 2.0. – user326608

+0

Mi problema es que nuestra aplicación también se puede iniciar a través de COM, y cuando lo era, siempre se combinaba en la agrupación de barra de tareas y usaba el mismo icono y botón de barra de tareas que la aplicación principal que llamaba a la aplicación secundaria a través de COM. Este es el código VB.NET que hizo el truco: 'Public Declare Function SetCurrentProcessExplicitAppUserModelID Lib "Shell32.dll" Alias ​​"SetCurrentProcessExplicitAppUserModelID"(ByVal AppID As String) As Integer)' ' SetCurrentProcessExplicitAppUserModelID (" CompanyName.ProductName. SubProduct.1.0.0.0 ")' – user326608

Cuestiones relacionadas