Wie kann ich feststellen Windows-Taskleiste programmatisch zu öffnen (oder zu schließen), um eine gegebene Toolbar?

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

Frage

Ich habe geschrieben eine Symbolleiste , die in der Taskleiste ausgeführt wird. Leider, nachdem es installiert ist, muss der Benutzer es manuell aktivieren. Gibt es eine Möglichkeit Explorer zu sagen, zu öffnen (oder zu schließen), um eine gegebene Toolbar?

ich für den Installateur möchte, NSIS, auf der Symbolleiste zu drehen, wenn die Installation abgeschlossen ist (Ich weiß, dass ein Plugin erforderlich wäre).

Ich möchte auch wissen, ob es möglich ist, automatisch eine Symbolleiste für alle Benutzer zu ermöglichen, zum Beispiel in einer Unternehmensumgebung, in der mehrere Benutzer einen PC teilen.

War es hilfreich?

Lösung

  • Dieser Codeproject Kommentar tut es durch Tastendrücke simulieren
  • Vista + hat API, dies zu tun, mit ShowDeskBand und HideDeskBand
  • Edit: Dieser Code kann nun ein Deskband Objekt hinzufügen (von Pinvoke.net und diese zwei MSDN Forum Fragen):

    [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);
    }
    

Und ein Beispiel für die Verwendung:

Guid address_toolbar_guid = new Guid("{01E04581-4EEE-11D0-BFE9-00AA005B4383}");
uint band_id = AddDeskbandToTray(address_toolbar_guid);

Es wäre sinnvoll, dass ein ähnlicher Aufruf RemoveBand auch den Trick tun würde, aber bisher kann ich nicht, dass Code zu arbeiten. Ein weiteres Problem:. Der zugegebene Deskband schließt, wenn die Anwendung, die es schließt hinzugefügt

Andere Tipps

Sie möchten vielleicht diesen Artikel überprüfen . Es sieht aus wie Sie dies tun können ( „offiziell“ sowieso) in Vista mit der ITrayDeskBand Schnittstelle .

Ich kann nicht die genaue URL finden gerade jetzt, aber ich erinnere mich, dass eine Diskussion über diese um PDC2008 zu sein, wo im Grunde dies nicht ausdrücklich freigegeben wurde, so dass zufällige Programme nicht in der Taskleiste w / o der Benutzer Zustimmung füllen könnte.

Ein Nebeneffekt davon ist, dass nur sehr wenige Anwender sogar die WMP Deskbar standardmäßig aktivieren.

Von dem, was ich verstehe, Taskleisten Standorte und Werte usw. werden in der Registry gespeichert (vergaß genauen Standort) so, wenn Sie den bestimmten Registrierungsschlüssel finden können Sie seine Position nehmen und machen Sie Ihr Installationsprogramm auf dem Computer den Registrierungsschlüssel einzufügen, so dass die Taskleiste aktiviert ist.

Nicht wirklich eine Antwort auf Ihre Frage, aber bitte, bitte: do nicht Schreib Shell-Erweiterungen (und eine Task-Leiste ist eine Shell-Erweiterung) in .NET

Hier ist der Grund .

Im Grunde du brichst andere Anwendungen.

Wenn Sie auch prüfen, existiert Google Tool während eine exe hinter (GoogleDesktop.exe) läuft so, wenn Sie auf dem Weg google oder Suchleiste bestehen instanziiert Sie sollten wieder TrayBandSiteService überprüfen und eine Unterstützung exe ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top