Me gustaría poder ocultar la ventana de otra aplicación desde la barra de tareas, sin ocultar la ventana. Específicamente, quiero tener varios navegadores web diferentes en ejecución, visibles, disponibles en la lista Alt + Tab, pero sin ocupar espacio en la barra de tareas.Ocultar el botón de la barra de tareas de otra aplicación
(Si alguien tiene curiosidad, ¿por qué ?: He escrito una aplicación de tablero que usa las API DwmRegisterThumbnail de Vista para mostrar vistas previas en vivo de varias ventanas a la vez - una especie de "imagen en imagen", si lo desea. también tener botones de la barra de tareas para esas ventanas parece redundante.)
Soy consciente de que cambiar el estilo de la otra ventana para incluir WS_EX_TOOLWINDOW
lo ocultará de la barra de tareas, y lo intenté primero. Pero, como era de esperar, tenía algunos efectos secundarios que no quería: la barra de título se hizo más corta (no del todo mal, supongo) y los botones de minimizar y maximizar desaparecieron (no son buenos). También tuve que esconder y volver a mostrar la ventana para que la barra de tareas reconociera el cambio, lo que causó que se repinvieran los artefactos cuando lo hice en IE Windows.
Mi siguiente pensamiento fue que, dado que las ventanas con los propietarios están ocultas de la barra de tareas por defecto, tal vez podría cambiar las otras ventanas para que sean propiedad del mío. Pero MSDN es pretty clear que "[después de crear una ventana propia, una aplicación no puede transferir la propiedad de la ventana a otra ventana".
Encontré this question que tiene una redacción similar a la mía, pero se trata específicamente de las ventanas de su propio proceso, donde tiene control total sobre la propiedad de la ventana.
¿Alguien sabe de alguna otra manera de ocultar un botón de la barra de tareas, que funcionará para Windows desde otro proceso?
Actualización: Tormod me puso en el camino correcto con ITaskbarList - funciona muy bien. La página de pinvoke.net tenía algunos errores (GUID incorrecto, métodos declarados alfabéticamente en lugar de orden de interfaz), pero lo edité, hice correcciones y también agregué un ejemplo de cómo crear una instancia de ITaskbarList a través de su coclass.
Actualización 2: Si utiliza DeleteTab para ocultar botón de la barra de tareas de una ventana, y luego hacer que la ventana activa (por ejemplo a través de SetForegroundWindow
o Alt + Tab), el botón de la barra de tareas volverá a aparecer. Para mantener oculto el botón de la barra de tareas, tuve que agregar un temporizador y continuar llamando a DeleteTab. Siempre y cuando no te importe que el botón de la barra de tareas vuelva a aparecer brevemente cada vez que se enfoca la ventana, esto funciona bien.
Sweet - Nunca supe esto, pero suena como el boleto. ¡Gracias! –