2012-03-15 19 views
17

Tenemos una aplicación, llamémoslo MyApp. En la instalación, creamos un ícono de escritorio para MyApp, que básicamente llama al MyLauncher.exe /launch MyApp.exe. MyLauncher hace algunas cosas útiles (busca actualizaciones, etc.) y luego inicia MyApp.¿Cómo asocio mi aplicación con un programa fijado en la barra de tareas de Windows 7?

MyApp on the Desktop

Un usuario con Windows 7 podría querer fijarlo a la barra de tareas (es decir, el botón derecho del ratón sobre el icono del escritorio, "Pin a la barra de tareas"):

MyApp on the Taskbar

Sin embargo, dado que el acceso directo apunta a MyLauncher, sucede lo siguiente cuando el usuario inicia la aplicación (ya sea con el ícono del escritorio o el ícono de la barra de tareas): MyLauncher hace sus cosas y, luego, inicia MyApp. En la barra de tareas, el resultado es el siguiente:

MyApp twice on the Taskbar

entiendo por qué sucede esto. Como MyLauncher inicia MyApp, la barra de tareas de Windows 7 los ve como dos aplicaciones diferentes.

Obviamente, mi pregunta es: Como desarrollador de MyLauncher y MyApp, ¿puedo hacer algo al respecto? Me gustaría que la barra de tareas de Windows 7 "asocie" todas las instancias de MyApp.exe con el acceso directo que comienza en MyLauncher.exe /lauch MyApp.exe.

+0

Por si acaso es relevante: MyApp.exe es en realidad 'msaccess .exe MyVbaProject.mdb', de ahí la etiqueta VBA. La aplicación VBA hace un uso intensivo de (nuestra) .NET librerías, de ahí las etiquetas C# y .net. Una solución en cualquiera de estos idiomas está bien. Las llamadas a la API de Windows también están bien. – Heinzi

+1

Consulte [Paquete de códigos API de Windows® para Microsoft® .NET Framework] (http://archive.msdn.microsoft.com/WindowsAPICodePack) y [Proyecto de código: aplicación de demostración de Windows 7/VS2010] (http: //www.codeproject) .com/Articles/44393/Windows-7-VS2010-demo-app) – LarsTech

+0

Esto podría ayudar a http: // stackoverflow.com/questions/3648386/wpf-app-has-no-pin-to-taskbar-option – yuben

Respuesta

0

Una cosa que puede hacer es no mostrar el icono de la barra de tareas para la aplicación en absoluto. En WPF es tan simple como un valor de la propiedad:

ShowInTaskbar="False"

El problema con este enfoque es que se reducirá la facilidad de uso debido a que el usuario ya no puede decir cuando la aplicación se está ejecutando o llevarlo a la vanguardia cuando facilidad se pierde detrás de otras ventanas. Para aliviar algunas de estas preocupaciones, puede crear un ícono de notificación para esta aplicación que habilitaría algunas de estas funciones y también le daría al usuario algunos comentarios sobre el estado actual de la aplicación. (En ejecución, no se ejecuta, etc.)

This msdn resource tiene un buen ejemplo de código sobre cómo crear iconos de notificación en formularios de Windows. También puede usar el mismo método para aplicaciones WPF.

enter image description here

TIP PEQUEÑO: Notificar a los iconos son de 16x16 píxeles. Intente encontrar una versión vectorial del icono antes de cambiar el tamaño, ya que esto le dará resultados más nítidos, ya que tiende a perder muchos detalles en ese tamaño.

Algunos interacción del usuario con el icono de notificar puede incluir:

  • doble clic> Trae la aplicación a la parte delantera
  • Haga clic derecho>, aparecerá un menú contextual con algunas opciones. (I.E. Llevar al frente, cerrar, etc.)
  • Mouse-Over> Muestra una información sobre herramientas con información sobre la aplicación.
3

Trate de jugar un poco con el "ID de aplicaciones" Vea aquí para más información: http://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx

"ID de modelo de usuario de aplicaciones (AppUserModelIDs) son ampliamente utilizados por la barra de tareas en Windows 7 y sistemas posteriores a asociar procesos, archivos y ventanas con una aplicación particular. En algunos casos, es suficiente confiar en el AppUserModelID interno asignado a un proceso por el sistema. Sin embargo, una aplicación que posee múltiples procesos o una aplicación que se ejecuta en un host El proceso puede necesitar identificarse explícitamente para que pueda agrupar sus ventanas de otro modo dispares bajo un solo botón de barra de tareas y controlar el contenido de la Jump List de esa aplicación. "

+1

Si usted es un proceso .NET, el paquete de código API de Windows será de ayuda. –

0

1)
Esto es más una cuestión arquitectónica/problema - que es un poco de un diseño inusual para tales fines,
es decir, si un actualizador (supongo que usted tiene más, pero para iniciar w/eso) se requiere que generalmente se verifique dentro de la aplicación; luego, si se considera que la actualización inicia un proceso externo y actualiza la aplicación, etc.
El iniciador (como se describe) tendría sentido si está ejecutando muchas cosas diferentes o si tiene una solución genérica o casos más complejos, por ejemplo tienes un 'proceso de host' que carga dll-s, servicios, etc.
Así que, básicamente, estás teniendo problemas debido a un diseño poco afortunado, a una decisión, a menos que tengas algo que lo amerite lo suficiente.
Pero tener usted dijo que usted no desea rediseñar ...
2)
Aún se podía hacer un 'truco' con el lanzador - y hacer una especie de trabajo sencillo alrededor ...

  • Inicie 'MyApp -argument: check' primero (y haga que el icono en el escritorio pertenezca a él, no el iniciador), y tenga un argumento 'fork' al inicio y si 'check' haga un pequeño código 'shim' que lance 'MyLauncher',
  • haga que el iniciador haga lo que se supone que debe hacer; incluso puede cerrar el MyApp principal después del inicio,
  • w hen launcher está listo lanza nuevamente MyApp (o más complejo para cerrar si se deja solo si se necesita una actualización, etc., pero lo anterior es más fácil), y usa algún otro argumento o no usas ninguno (depende de lo que quieras, etc. .),
  • Estás haciendo algún proceso doble redirección de una especie - iniciar aplicación => lanzador => aplicación de nuevo,
  • que no debería tener problemas con los iconos de esta manera,
  • con todo esto que debiera tenga cuidado con el suministro de manifiestos adecuados a cualquiera de las aplicaciones (más a menudo el iniciador que necesita actualizar, más permisos) si se requiere un modo 'admin', pero supongo que ya lo tiene,

que podría hacer el truco, no lo he intentado pero no veo por qué no debería hacerlo, y puede mantener la arquitectura existente en su lugar, etc.

Cuestiones relacionadas