Desktop Elemente Location auslesen

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

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Toolmaster.

    Desktop Elemente Location auslesen

    Guten Morgen,
    ich möchte gerne die Position aller am Desktop bendlichen Elemente auslesen. Doch leider habe ich keinen Plan wie das funktioniert. Alle beispiele und anleitungen die ich finde sind für VB6 und funktionieren unter Windows 10 leider nicht mehr.
    Hoffe es hat wer einen Tip für mich.

    Danke schon mal im Vorraus
    Tooli

    Toolmaster schrieb:

    Alle beispiele und anleitungen die ich finde sind für VB6
    Bitte zeigen/posten/verlinken. Da dürfte eine Umwandlung nach .Net eig. immer möglich sein. Wird wohl deshalb nicht einfach so 1:1 in VB.Net übertragbar sein, weil da bestimmt P/Invoke- bzw. WinAPI-Aufrufen dabei sind, bei denen man die übergebenden Variablentypen anpassen muss (z.B. Long in Integer usw.).
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    So habe jetz mal ein Beispiel aus VB 6 an VB Net angepasst. Aber ich habe schon Probleme das Handle zu finden.

    VB.NET-Quellcode

    1. <DllImport("user32.dll")>
    2. Public Shared Function FindWindow(lpClassName As String, lpWindowName As String) As IntPtr
    3. End Function
    4. <DllImport("user32.dll")>
    5. Public Shared Function FindWindowEx(hwndParent As String, hwndChildAfter As IntPtr, lpszClass As String, lpszWindow As String) As IntPtr
    6. End Function
    7. Private Function GetSysLVHwnd() As IntPtr
    8. Dim lHandle As IntPtr
    9. lHandle = FindWindow("Progman", vbNullString)
    10. 'Hier findet er noch ein Handle
    11. lHandle = FindWindowEx(lHandle, 0, "SHELLDLL_defVIEW", vbNullString)
    12. 'aber hier nicht mehr
    13. Return FindWindowEx(lHandle, 0, "SysListView32", vbNullString)
    14. End Function

    Toolmaster schrieb:

    Doch leider habe ich keinen Plan wie das funktioniert.
    Vielleicht fängst Du an und besorgst Dir die Information, wo diese Information bei Windows abgelegt ist, das sollte Dein erster Part sein.
    Wenn wir das wissen, lässt es sich viel leichter helfen.
    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!
    RodFromGermany
    Warum lässt du nicht einfach das Schreiben wenn nur Quatsch von dir kommt.Hättest du meinen vorigen Post gelesen wüsstest du das man den Desktop über eine Api erreicht und der Desktop ein Listview ist.

    Bei Dir muss immer alles als haber Roman geschrieben werden. Unverständlich. Aber bitte Du mußt mit Dir leben.
    Hallo

    ​Wie wäre es einfach die Positionen aus der Registry auszulesen?

    HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell \Bags\1\Desktop

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Toolmaster schrieb:

    wenn nur Quatsch von dir kommt.
    Ich ziehe meinen Hut vor Dir.
    Hättest Du die richtige Frage an Frau Google gestellt, wäre Dir möglicherweise dieser Thread in die Finger gekommen: mycsharp.de/wbb2/thread.php?postid=298851
    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!
    Wenn du das getestet hättest wüßstest Du das der Code heute nicht mehr funktioniert. Oder arbeitest du noch mit XP? Die Apis sin die gleichen wie ich sie habe. Nur scheinen sie unter Windows 10 und windows 7 nicht mehr zu funktionieren.

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

    Für alle die auch gerne den Desktop Handler auslesen möchten.

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports System.Text
    3. Public Class Desktop_Handle
    4. Private Delegate Function EnumWindowsProc(hwnd As IntPtr, lParam As IntPtr) As Boolean
    5. <DllImport("user32.dll")>
    6. Private Shared Function EnumWindows(lpEnumFunc As EnumWindowsProc, lParam As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    7. End Function
    8. <DllImport("user32.dll")>
    9. Private Shared Function EnumChildWindows(parentHandle As IntPtr, lpEnumFunc As EnumWindowsProc, lParam As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    10. End Function
    11. <DllImport("user32.dll")>
    12. Private Shared Function IsWindowVisible(hWnd As IntPtr) As Boolean
    13. End Function
    14. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    15. Private Shared Function GetClassName(hWnd As IntPtr, lpClassName As StringBuilder, nMaxCount As Integer) As Integer
    16. End Function
    17. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    18. Private Shared Function GetWindowText(hWnd As IntPtr, lpWindowText As StringBuilder, nMaxCount As Integer) As Integer
    19. End Function
    20. Public Shared Function Found_FolderView()
    21. Dim Worker_List As New List(Of Integer)
    22. Dim DesktopID As IntPtr = IntPtr.Zero
    23. EnumWindows(New EnumWindowsProc(Function(tophandle, topparamhandle)
    24. If IsWindowVisible(tophandle) Then
    25. Dim className As New StringBuilder(256)
    26. GetClassName(tophandle, className, className.Capacity)
    27. If className.ToString = "WorkerW" Then
    28. Worker_List.Add(tophandle)
    29. End If
    30. End If
    31. Return True
    32. End Function), IntPtr.Zero)
    33. If Worker_List.Count > 0 Then
    34. For Each Workerl As Integer In Worker_List
    35. EnumChildWindows(Workerl, New EnumWindowsProc(Function(childhandle, childparamhandle)
    36. Dim className As New StringBuilder(256)
    37. GetClassName(childhandle, className, className.Capacity)
    38. Dim windowTitle As New StringBuilder(256)
    39. If IsWindowVisible(childhandle) Then
    40. GetWindowText(childhandle, windowTitle, className.Capacity)
    41. If className.ToString = "SysListView32" And windowTitle.ToString = "FolderView" Then
    42. DesktopID = childhandle.ToInt64
    43. End If
    44. End If
    45. Return True
    46. End Function), IntPtr.Zero)
    47. Next
    48. End If
    49. Return DesktopID
    50. End Function
    51. End Class