Donnerstag, 5. August 2010

Fortschrittsbalken in der Taskleiste bei Windows 7 anzeigen

Windows 7 bringt viele nette Features mit, eines davon sind die dynamischen Logos in der Taskleiste, die Auskunft über den Status der Programme geben können.
In diesem Post möchte ich euch zeigen, wie man in der Taskleiste eine Fortschrittsanzeige im Programmicon einblendet, was ungefähr so aussieht:



Um den Fortschrittsbalken zu erstellen, muss das Windows Windows API Code Pack installiert sein.
Ist das der Fall, müssen wir in das gewünschte Zielprojekt 2 Verweise einfügen:
Projekt - Verweis hinzufügen, zur Registerkarte Durchsuchen wechseln und dort in das Verzeichnis wechseln, in dem das Code Pack liegt.
Weiter in der Ordnerstruktur geht es in das Unterverzeichnis WindowsAPICodePack\Shell. Hier liegen unsere benötigten .dll - Dateien, und zwar müssen Microsoft.WindowsAPICodePack.dll und Microsoft.WindowsAPICodePack.Shell.dll eingebunden werden.
Dann binden wir in unserem Projekt die Taskbar - Klasse ein:

using Microsoft.WindowsAPICodePack.Taskbar;

Der folgende Code erstellt dann einen halb gefüllten Fortschrittsbalken wie oben im Bild ersichtlich:

TaskbarManager tm = TaskbarManager.Instance;
tm.SetProgressState(TaskbarProgressBarState.Normal);
tm.SetProgressValue(50, 100);

SetProgressState() legt den Stil des Programmicons fest, mit dem hier gewählten befehlen wir dem Prorgamm, das Logo ganz "normal" aussehen zu lassen, sodass wir einen Fortschrittsbalken darüber legen können.
SetProgressValue() legt schließlich den Fortschritt der Anzeige fest, der erste übergebene Parameter ist der aktuelle Wert der Anzeige, der zweite der maximale Wert.

Kommentare:

  1. Hi,

    müssen die DLLs für die API mit ausgeliefert werden? Wie sieht das Ganze unter anderen OS (XP, Server 2008/2003) aus?

    AntwortenLöschen
  2. Hi frisch,

    prinzipiell ja, wenn du einfach die .exe - Datei auf einen anderen PC rüberlädst.
    Am einfachsten und elegantesten ist aber die Erstellung eines Setups für dein Projekt über Projekt - [Projektname] veröffentlichen im Menü, so werden automatisch alle benötigten Dateien zu einem Setup gepackt - hierbei siehst du, dass die .dlls auch mitgeliefert werden.
    Das Windows API Codepack funktioniert für nur für Windows Vista und Windows 7, manche Funktionen, wie die oben beschriebene, auch nur für 7.

    AntwortenLöschen
  3. Funktioniert nicht bei Window.Forms. InvalidOperationException tritt auf. Was muss man hier tun?

    AntwortenLöschen
  4. Ah, folgendes war das Problem:
    Ich habe die Befehle benutzt bevor die Form geladen war, also ich habe das ganze im Konstruktor ausprobiert und dort funktioniert es noch nicht, weil die Komponenten noch nicht geladen sind. Jetzt gehts! Super :)

    AntwortenLöschen
  5. Ah, cool dass du's selber rausgefunden hast und danke für's Posten, hilft bestimmt auch anderen!

    AntwortenLöschen
  6. Es reicht auch, die Funktion niemals Gruppieren zu aktivieren.

    AntwortenLöschen