Como posso programaticamente dizer barra de tarefas do Windows para uma determinada barra de ferramentas aberta (ou perto)?
Pergunta
Eu escrevi uma barra de ferramentas que é executado na barra de tarefas. Infelizmente, depois de instalado, o usuário tem que habilitá-lo manualmente. Existe uma maneira de dizer explorador de um determinado barra de ferramentas aberta (ou perto)?
Eu gostaria que o instalador, NSIS, para ligar a barra de ferramentas quando a instalação estiver completa (eu percebo que um plugin seria necessário).
Eu também quero saber se é possível ativar automaticamente uma barra de ferramentas para todos os usuários, por exemplo, em um ambiente corporativo onde vários usuários que compartilham um PC.
Solução
- Este comentário CodeProject fá-lo através da simulação de teclas pressionadas
- Vista + tem API para fazer isso, com ShowDeskBand e HideDeskBand
-
Edit: Este código pode agora adicionar um objeto Deskband (de Pinvoke.net, e estes dois perguntas fórum 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); }
E, um exemplo de utilização:
Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);
Não faria sentido que uma chamada semelhante ao RemoveBand também iria fazer o truque, mas até o momento, não posso obter esse código para o trabalho. Outra questão:. O fecha Deskband adicionados quando o aplicativo que acrescentou que fecha
Outras dicas
Você pode querer confira este artigo . Parece que você só pode fazer isso ( "oficialmente" de qualquer maneira) no Vista usando o ITrayDeskBand interface de .
Não consigo encontrar o exato agora, mas lembro-me de haver alguma discussão sobre isso em torno PDC2008 onde basicamente isso não foi habilitado especificamente para que os programas aleatórios não poderia preencher a barra de tarefas w / o a usuários consentimento.
Um efeito colateral disso é que muito poucos usuários até mesmo permitir que o deskbar WMP por padrão.
Pelo que eu entendo, barras de tarefas locais e valores etc são armazenadas no Registro (esqueceu localização exata) então se você encontrar a chave de registro específico que você pode levar a sua localização e fazer o seu instalador inserir a chave de registro no computador para a barra de tarefas está habilitado.
Não é realmente uma resposta à sua pergunta, mas por favor, por favor: fazer não extensões de shell de escrita (e uma barra de tarefas é uma extensão shell) em .NET
Basicamente, você está quebrando outros aplicativos.
Se você verificar Bem, o Google toolband existe enquanto um exe está correndo atrás (GoogleDesktop.exe) por isso, se você insistir sobre a forma como o Google ou barra de pesquisa são instanciado você deve verificar novamente TrayBandSiteService e fazer um suporte exe ...