[Tutorial] Windows 7 Taskbar-Features in eurem Projekt nutzen

    • VB.NET

    Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von backtothetoast.

      [Tutorial] Windows 7 Taskbar-Features in eurem Projekt nutzen

      Tja, wie da Name schon sagt, will ich euch zeigen wie ihr die Windows 7 Taskbar Features nutzt:

      z.B mit Overlay-Icon und veränderten ProgressBarState



      Assembly Kompilieren
      Spoiler anzeigen

      Zuerst müsst Ihr das Windows API Code Pack runterladen

      Dann entpackt Ih
      r die Zip und öffnet die WindowsAPICodePack.sln im Unterordner WindowsAPICodePack.
      Wählt anschließend als Build-Konfiguration "Release" und erstellt die Assembly über "Erstellen / Projektmappe erstellen" oder F7.


      Verwenden
      Spoiler anzeigen


      Erstellt oder Öffnet nun das Projekt in dem ihr die Dll verwenden möchtet.
      Fügt einen Verweis auf die WindowsAPICodePack.Shell.dll und die WindowsAPICodePack.dll dem Projekt hinzu (liegen im Ordner "WindowsAPICodePack\WindowsAPICodePack\Shell\bin\Release")

      Anschließend in der Klasse, in der Ihr die Funktionalität implementieren möchtet, den Namespace "Microsoft.WindowsAPICodePack.Taskbar" einbinden.

      VB.NET-Quellcode

      1. Imports Microsoft.WindowsAPICodePack.Taskbar


      Dann die Reference auf den TaskbarManager holen (Ja, hier brauchen wir keinen Konstruktor -> Singleton )
      Im Grunde dient die Reference nur dazu, dass wir nicht immer

      VB.NET-Quellcode

      1. TaskbarManager.Instance
      tippen müssen.
      Deshalb:

      VB.NET-Quellcode

      1. Private tbm As TaskbarManager = TaskbarManager.Instance


      Weiterhin solltet ihr jeglichen Win7 spezifischen Code in eine Abfrage mit

      VB.NET-Quellcode

      1. TaskbarManager.IsPlatformSupported()
      kapseln

      Verwendungsmöglichkeiten:

      Taskbar-Icon

      Spoiler anzeigen


      Fortschrittsbalken anzeigen

      VB.NET-Quellcode

      1. tbm.SetProgressValue(cur as Integer,max as Integer,[...])

      Diese Methode erlaubt euch für ein beliebiges Fenster in der Taskleiste eine Art Fortschrittsbalken einzublenden
      Die einfachste Überladung ändert den Fortschrittsbalken eurer eigenen Application.
      Den beiden anderen Überladungen könnt ihr ein Handle auf das Fenster übergeben, welches manipuliert werden sollen.
      z.B. könntet Ihr mit

      VB.NET-Quellcode

      1. Dim hWP As IntPtr = FindWindow("WordPadClass", Nothing)
      2. tbm.SetProgressValue(50, 100, hWP)

      dem Wordpad einen schönen Fortschrittsbalken verpassen ;) (Sucht euch den wndClass-Namen mit Spy++)

      Fortschrittsbalken ändern

      VB.NET-Quellcode

      1. tbm.SetProgressState(state as TaskbarProgressBarState)

      Diese Methode erlaubt euch den Status des Fortschrittsbalken zu ändern:
      Error -> Rot
      Paused -> Gelb
      Normal -> Grün
      Indeterminate -> Grün fortlaufend
      NoProgress -> Fortschrittsbalken ausblenden
      Die Anwendung auf andere Fenster erfolgt analog zu SetProgressValue.

      OverlayIcon setzen

      VB.NET-Quellcode

      1. tbm.SetOverlayIcon(icon as Icon, accText as String)

      Diese Methode erlaubt euch ein Icon auf dem Icon der Application zu platzieren (Anzeigebeispiel siehe Anfang)
      Der zweite Parameter sollte beschreiben was das aktuelle Icon aussagt/bewirkt. Diese Angabe dient "nur" der Accessibility .
      Die Anwendung auf andere Fenster erfolgt analog zu SetProgressValue.

      Fenster separat anzeigen

      VB.NET-Quellcode

      1. tbm.SetApplicationIdForSpecificWindow(handle as IntPtr, app as String)

      Diese Methode sorgt dafür, dass dem angegebenen Fenster eine andere appID zugeteilt wird.
      Dies bewirkt, dass dieses Fenster nicht mehr mit den restlichen Fenstern eurer Anwendung in der Taskleiste gruppiert wird (z.B. für die separate Anzeige eines Fortschrittsbalkens -> Kopierdialog etc.)


      Jumplist
      Spoiler anzeigen

      Neue Jumplist anlegen
      Zunächst müsst Ihr für eure Application eine neue Jumplist anlegen. Dies geschieht mit

      VB.NET-Quellcode

      1. Private jumplist as Jumplist
      2. jumplist = JumpList.CreateJumpList()

      Grundsätzlich erlaubt euch die Jumplist nur Kommandos oder Links einzufügen, die Ihr auch mit Win + R starten könntet.
      Zusätzlich könnt Ihr diese noch in JumpListCustomCategories kategorisieren.
      Die Änderungen an der Jumplist werden erst nach einem applist.Refresh() angezeigt.

      Neue Kategorie erzeugen

      VB.NET-Quellcode

      1. Dim cat As JumpListCustomCategorycat
      2. cat = New JumpListCustomCategory("Test Kat")

      Nachdem die Kategorie erzeugt wurde, kann sie mit jumplist.AddCustomCategories(cat) hinzugefügt werden.

      Standardkategorien einblenden
      Die Jumplist bietet euch die Möglichkeit, standardisierte Kategorien mit Inhalten einzublenden ("Zuletzt geöffnet" und "Häufig verwendet"). Setzt hierzu einfach die entsprechenden Werte in applist.KnownCategoryToDisplay. Zusätzlich könnt Ihr über applist.KnownCategoryOrdinalPosition die Position der Standardkategorien bestimmen.

      Neuen Link in die Jumplist einfügen
      Am einfachsten geht dies mit einem JumpListLink. Gebt hier im Konstruktor einfach das Kommando/den Link und eine Bezeichnung an.
      In meinen Fall starte ich den Windows Commandprompt. Nach dem erzeugen muss der JumpListLink noch einer Kategorie hinzugefügt werden.

      VB.NET-Quellcode

      1. Dim link As New JumpListLink("C:\\Windows\\System32\\cmd.exe", "Kommandozeile starten")



      Das Icon für den JumpListLink könnt Ihr über link.IconReference festlegen. z.B. das Standard-Icon des Commandprompts:

      VB.NET-Quellcode

      1. link.IconReference = New IconReference("C:\\Windows\\System32\\cmd.exe", 0)


      Neues ListItem einfügen
      JumpListItems stehen für Dokumente die mit eurer Application geöffnet werden können. Hierfür müssen die entsprechenden Dateiendungen mit eurer Application verknüpft sein (Registry).

      VB.NET-Quellcode

      1. Dim item As New JumpListItem("C:\\Test.jls")

      Das Hinzufügen zur Kategorie ist analog zum JumpListLink.

      Neuen Separator einfügen
      Um einzelne Einträge zu trennen, könnt Ihr mit

      VB.NET-Quellcode

      1. applist.AddUserTasks(New JumpListSeparator())

      einen neuen Separator einfügen



      ThumbnailButtons

      Spoiler anzeigen

      zunächst müsst ihr einen oder mehrere ThumbnailToolbarButtons, die zum instanzieren ein Icon und einen Tooltiptext benötigen, erstellen z.b:

      VB.NET-Quellcode

      1. Private meinTTB As ThumbnailToolbarButton = New ThumbnailToolbarButton(new icon("pfad"), "Tooltiptext :D")


      diese könnt ihr dann mit

      VB.NET-Quellcode

      1. tbm.ThumbnailToolbars.AddButtons(Me.Handle, meinTTB)

      dem Preview-Fenster hinzufügen.
      Um das Click Event des Buttons abzufangen, müsst Ihr nun noch eine Methode mit folgendem Methodenrumpf anlegen

      VB.NET-Quellcode

      1. Private Sub irgendEinName(ByVal sender As System.Object, ByVal e As ThumbnailButtonClickedEventArgs)

      Und diese per Delegate (AddHandler) dem Button hinzufügen

      VB.NET-Quellcode

      1. AddHandler meinTTB.Click, AddressOf irgendEinName


      Aber Achtung:
      - die Toolbar unter der Vorschau lässt sich nicht mehr entfernen außer durch eineutes Anzeigen der Form (.Show..)

      - Maximal 7 Buttons
      - einzelne Buttons können nicht entfernt werden, nur ausgeblendet (.visible)
      - Die Buttons werden in der Reihenfolge angeordnet in der sie hinzugefügt werden und können nicht verschoben werden





      Weitere Erklärungen Folgen später :D

      Edit:

      Tutorial an meinen aktuellen Wissensstand angepasst (ja, 4 Jahre machen einen Unterschied :D )

      Dieser Beitrag wurde bereits 18 mal editiert, zuletzt von „flo.exe“ ()

      chrixko schrieb:

      Hm sieht interessant aus. ;)
      Aber eine Frage: Was passiert den, wenn der User kein Windows 7 hat? Wirds dann einfach ignoriert oder treten Fehler auf und man muss also vorher checken welches OS der User hat?


      hi chrixko,

      habs das mal schnell getestet mit der Antwort dass ein Fehler auftritt.

      Hab auch gleich ne Lösung parat. einfach mit

      VB.NET-Quellcode

      1. if Taskbarmanager.isplatformsupported then

      überprüfen ob dass OS das ganze unterstützt

      also nochmal als gesamtes Beispiel :D

      VB.NET-Quellcode

      1. If TaskbarManager.IsPlatformSupported Then
      2. Dim TBM As TaskbarManager = TaskbarManager.Instance
      3. TBM.SetProgressValue(40, 100)
      4. End If

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

      Hi,
      wie sieht es mit Copyright usw. aus?
      Kann ich die dll's in öffentliche Programme einbinden oder gibt es was zu beachten?
      wintoolz.de
      • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
      • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
      • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

      Benutze auch du Ecosia
      Hi,

      ich hab mir mal die Lizenz des Code Packs durchgelesen, und nichts gefunden das dir Irgendwie verbieten würde die Dll's einzukompilieren (Villeicht hab ich was überlesen, aber eher unwarhscheinlich ^^ ). Zudem denke ich auch, wofür haben Sie das Code Pack denn entwickelt, Damit niemand es einkompilieren kann?, Nein ich denke sie wollen damit einfach Softwarehersteller anregen ihre Produkte an Windows 7 anzupassen, um dieses populärer zu machen (Eigenwerbung :!: ).

      greetz

      flo.exe

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „flo.exe“ ()

      Es ist egal ob du es auf Windows 2000, XP oda sonst einer Windowsversion programmierst. Nutzen kannst du es nur unter Windows 7.
      wintoolz.de
      • wintoolz.KeyLocker - Programm zum sicheren Verwalten von Passwörten
      • wintoolz.CodeGallery - Datenbank für Codebeispiele veschiedener Programmiersprachen
      • wintoolz.Haushaltsbuch - Dient zum Auflisten der Aktivitäten ihrer Bankkonten

      Benutze auch du Ecosia

      funktioniert nicht!

      ich benutze Visual Basic 2008 Express Edition
      wenn ich die Datei WindowsAPICodePack.sln öffnen will bekomme ich eine felermeldung, dass die datei nicht geöffnet werden kann
      Was mache ich falsch??
      Brauche ich dafür die kostenpflichtigen versionen von Visual Studio?
      Bilder
      • fehlermeldung.png

        29,91 kB, 496×243, 653 mal angesehen
      um die Datei Shell.csproj zu öffnen, brauchst du schon C#, denke ich

      edi: sry, hab den Vorposter (warum auch immer) nicht gesehen

      Skybird schrieb:

      Das sind ja Ubisoftmethoden hier !

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vb-checker“ ()