ProgrammNamen in der Taskbar auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    ProgrammNamen in der Taskbar auslesen

    Hi,

    ich habe mir eine "Alternative Taskbar" geschrieben, die auch prima funktioniert. In diese Taskbar lade ich alle Programme, die in einer privaten Load Library enthalten sind.

    Blöde ist nur, dass manche Programme bereits in der "normalen" Windows Taskbar stehen. Die würde ich gern in meiner privaten Taskbar ausschließen, da sie sonst doppelt angezeigt werden.

    Dazu muss ich wissen, welche Programme in der Windows Taskbar stehen.

    Ich habe nach einem Verzeichnes gesucht, wo die Links enthalten sein könnten. Früher (vor Windows 7) hieß das wohl mal "Quick Launch" aber das gibt es heute nicht mehr. Ich habe nach einem Verzeichnis "Taskbar" gesucht. Aber auch das finde ich nicht (wäre ja auch zu naheliegend).

    Meine Frage ist also: in welchem Verzeichnis stehen die Links aus der Taskbar ? Oder alternativ: wie kann ich die Namen der Programme in der Windows Taskbar auslesen ?

    LG
    Peter
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke erst mal für deine HInweise.

    Das mit dem TaskbarItemInfo klingt zwar ganz nett ... aber so richtig klar komme ich damit nicht.

    Dein HInweis zur Handhabung schéint sich auf die Task Tray Area zu beziehen (also die rechte Seite der Taskbar, mit den MIni Icons). Ich will aber die Icons auf der linken Seite der Taskbar auslesen.

    Das scheint nidht ganz so einfach zu sein ...

    Peter329 schrieb:

    Das scheint nidht ganz so einfach zu sein ...
    Ich hatte mal so was wie ein ContextMenu für ein ToolBar-Icon (das eigene Programm) gemacht.
    Such mal gezielt nach JumpList.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Peter329 schrieb:

    Ich habe nach einem Verzeichnes gesucht, wo die Links enthalten sein könnten. Früher (vor Windows 7) hieß das wohl mal "Quick Launch" aber das gibt es heute nicht mehr. Ich habe nach einem Verzeichnis "Taskbar" gesucht. Aber auch das finde ich nicht (wäre ja auch zu naheliegend).



    ist es das was Du suchst?
    ​C:\Benutzer\Dein Name\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    [edit]

    Jip, jetzt hab ich es doch noch entdeckt. Die .lnk Einträge stehen im folgenden Verzeichnis:

    VB.NET-Quellcode

    1. C:\Users\myUserid\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar


    Irgendetwas stimmt mit meiner Directory-Search Routine nicht. :)

    Danke, erst mal !

    Meine .lnk Dateien haben den gleichen Namen wie die zughörigen .exe Dateien. Aber das muss ja nicht in alle Ewigkeit so sein. Deshalb wäre es gut, wenn ich aus der .lnk Datei noch den Namen der .exe Datei heraus kriegen könnte. Das müsste doch eigentlich machbar sein ?

    LG
    Peter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    Na, das ist doch alles ganz easy ! Danke ! :)

    Ich habe mal meinen Code freundlicherweise als Sample eingestellt. Die Routine könnte ja auch für andere von Interesse sein. Ich habe Windows Version 7 im Einsatz ... ob das in höheren Versionen noch läuft ist natürlich nicht sicher.

    Hinweise, Verbesserung, Fehlerkorrekturen etc. etc. sind natürlich willkommen.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Dim UserDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    3. Dim TaskbarPath As String = "\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
    4. Dim myTaskbar As String = UserDirectory & TaskbarPath
    5. Try
    6. If Directory.Exists(myTaskbar) Then
    7. Dim d As DirectoryInfo = New DirectoryInfo(myTaskbar)
    8. For Each f In d.GetFiles("*.lnk")
    9. Dim myLink As String = f.FullName
    10. Debug.Print("Link=" & myLink)
    11. 'Process link ...
    12. Dim myTarget As String = GetLnkTarget(f.FullName)
    13. Debug.Print("Target=" & myTarget)
    14. 'Process target ...
    15. Next
    16. Else
    17. MessageBox.Show("Path=" & myTaskbar & newline & "does not exist",
    18. "Path error",
    19. MessageBoxButtons.OK,
    20. MessageBoxIcon.Error)
    21. 'Process error ...
    22. End If
    23. Catch ex As Exception
    24. MessageBox.Show(ex.Message,
    25. "Path error",
    26. MessageBoxButtons.OK,
    27. MessageBoxIcon.Error)
    28. 'Process error ..
    29. End Try
    30. End Sub
    31. Public Shared Function GetLnkTarget(lnkPath As String) As String
    32. 'Create reference Microsoft Shell Controls And Automation
    33. Dim shl = New Shell32.Shell()
    34. lnkPath = Path.GetFullPath(lnkPath)
    35. Dim dir = shl.[NameSpace](Path.GetDirectoryName(lnkPath))
    36. Dim itm = dir.Items().Item(Path.GetFileName(lnkPath))
    37. Dim lnk = DirectCast(itm.GetLink, Shell32.ShellLinkObject)
    38. Return lnk.Target.Path
    39. End Function