Como posso programaticamente dizer barra de tarefas do Windows para uma determinada barra de ferramentas aberta (ou perto)?

StackOverflow https://stackoverflow.com/questions/347274

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.

Foi útil?

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

Aqui está o porquê .

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 ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top