c# - puedo - no funciona la barra de tareas
¿Cómo puedo programar programáticamente que la barra de tareas de Windows abra(o cierre) una barra de herramientas determinada? (6)
He escrito una barra de herramientas que se ejecuta en la barra de tareas. Lamentablemente, una vez instalado, el usuario debe habilitarlo manualmente. ¿Hay alguna manera de decirle al explorador que abra (o cierre) una barra de herramientas determinada?
Me gustaría que el instalador, NSIS, active la barra de herramientas cuando se complete la instalación (me doy cuenta de que sería necesario un complemento).
También quiero saber si es posible habilitar automáticamente una barra de herramientas para todos los usuarios, por ejemplo, en un entorno corporativo donde varios usuarios compartirían una PC.
No puedo encontrar la URL exacta en este momento, pero recuerdo que hubo una discusión sobre esto en el PDC2008, donde básicamente no se habilitó específicamente para que los programas aleatorios no pudieran llenar la barra de tareas sin el consentimiento de los usuarios.
Un efecto secundario de esto es que muy pocos usuarios incluso habilitan la barra de escritorio WMP por defecto.
Es posible que desee ver este artículo . Parece que solo puedes hacer esto (de todos modos "oficialmente") en Vista usando la interfaz ITrayDeskBand .
- Este comentario CodeProject lo hace simulando pulsaciones de teclas
- Vista + tiene API para hacer esto, con ShowDeskBand y HideDeskBand
Editar: Este código ahora puede agregar un objeto de banda de escritorio (de Pinvoke.net y estas dos preguntas del foro de MSDN):
[ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("4CF504B0-DE96-11D0-8B3F-00A0C911E8E5")] public interface IBandSite { [PreserveSig] uint AddBand([In, MarshalAs(UnmanagedType.IUnknown)] Object pUnkSite); [PreserveSig] void RemoveBand(uint dwBandID); } private uint AddDeskbandToTray(Guid Deskband) { Guid IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}"); Guid ITrayBand = new Guid("{F60AD0A0-E5E1-45cb-B51A-E15B9F8B2934}"); Type TrayBandSiteService = Type.GetTypeFromCLSID(ITrayBand, true); IBandSite BandSite = Activator.CreateInstance(TrayBandSiteService) as IBandSite; object DeskbandObject = CoCreateInstance(Deskband, null, CLSCTX.CLSCTX_INPROC_SERVER, IUnknown); return BandSite.AddBand(DeskbandObject); }
Y, un ejemplo de uso:
Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);
Tendría sentido que una llamada similar a RemoveBand también funcionara, pero hasta ahora, no puedo hacer que ese código funcione. Otro problema: la banda de escritorio adicional se cierra cuando se cierra la aplicación que lo agregó.
Por lo que entiendo, las ubicaciones y valores de las barras de tareas se almacenan en el registro (se olvidó la ubicación exacta). Si encuentra la clave de registro específica, puede tomar su ubicación y hacer que el instalador inserte la clave de registro en la computadora para que la barra de tareas esté activada.
No es realmente una respuesta a su pregunta, pero, por favor, por favor: ¡ no escriba extensiones de shell (y una barra de tareas es una extensión de shell) en .NET!
Básicamente, estás rompiendo otras aplicaciones.
si revisas bien, google toolband existe mientras se ejecuta un exe detrás (GoogleDesktop.exe) por lo que si insistes en la forma en que se instancian google o la barra de búsqueda, debes volver a comprobar TrayBandSiteService y hacer un exe de soporte ...