Namen und Position der Desktopsymbole ermitteln

  • Ich möchte die Namen und Position der Desktopsymbole ermitteln.
    Das Beispiel von "owi dowi spin" am Ende von:
    Position eines Icons auf dem Desktop ermitteln
    funktioniert bei mir (Win7) nicht:

    [autoit][/autoit][autoit][/autoit][autoit]

    #include <GuiListView.au3>
    ShowBalloonTip("Papierkorb")
    Sleep(4000)

    [/autoit][autoit][/autoit][autoit]

    Func ShowBalloonTip($LinkName)
    If Not WinActive("Program Manager") Then WinActivate("Program Manager")
    $hwnd = ControlGetHandle("Program Manager", "", "SysListView321")
    $hwnd = HWnd($hwnd)
    WinMinimizeAll()
    For $i = 0 To _GUICtrlListView_GetItemCount($hwnd) - 1
    $xx=_GUICtrlListView_GetItemText($hwnd, $i)
    MsgBox(0,"xx",$xx)
    If _GUICtrlListView_GetItemText($hwnd, $i)=$LinkName Then
    $pos = _GUICtrlListView_GetItemPosition($hwnd, $i)
    If IsArray($pos) Then
    ToolTip("Das ist die Verknüpfung",$pos[0] + 24, $pos[1] + 27,"Hier",1,5)
    ExitLoop
    EndIf
    EndIf
    Next
    EndFunc

    [/autoit]

    Es erscheint nur:

    Was habe ich falsch gemacht?
    Vielen Dank schon mal im Voraus für eine Antwort.

  • Habe eine wahrscheinlich weitgehend identische Variante unter Win7 x64 im Einsatz.
    Meine funktioniert aber nur, wenn ich sie kompiliert als x64 bei einem 64bit-System starte.

    Probier es einmal. Wenn es nicht klappt, stelle ich meinen Source hier ein.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Vielen Dank Micha_he für Deine Antwort.
    Auch mit der .exe klappt es nicht.
    Ich wäre Dir sehr dankbar, wenn Du mir Deine Source zur Verfügung stellen würdest.
    Gruß
    Dieter

    So sieht das Compilierungsprotokoll aus:

    Spoiler anzeigen


    >"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /ShowGui /in "D:\AU\#Test\Test1.au3"
    +>13:06:32 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0 Keyboard:00000407 OS:WIN_7/Service Pack 1 CPU:X64 OS:X64 Environment(Language:0407)
    +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Users\ff\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\ff\AppData\Local\AutoIt v3\SciTE
    -> No changes made..
    >Running AU3Check (3.3.12.0) from:C:\Program Files (x86)\AutoIt3 input:D:\AU\#Test\Test1.au3
    +>13:06:34 AU3Check ended.rc:0
    >Running:(3.3.12.0):C:\Program Files (x86)\AutoIt3\aut2exe\aut2exe.exe /in "D:\AU\#Test\Test1.au3" /out "C:\Users\ff\AppData\Local\AutoIt v3\Aut2exe\~AU3nnccjqo.exe" /nopack /comp 2
    +>13:06:36 Aut2exe.exe ended.C:\Users\ff\AppData\Local\AutoIt v3\Aut2exe\~AU3nnccjqo.exe. rc:0
    +>13:06:36 Created program:D:\AU\#Test\Test1.exe
    +>13:06:36 AutoIt3Wrapper Finished.
    >Exit code: 0 Time: 5.045

  • also bei mir Findet der immer den Papierkorb, sollte also richtig sein :D
    weiß nicht woran das liegt, hab n 32bit system eventuell hat das irgendwas damit zu tun :D


    Edit: hab in der Zeile 2

    [autoit]

    ShowBalloonTip("*")

    [/autoit]


    geändert damit der alle icons findet ^^
    ich glaube so wars auch gedacht
    eventuell hat das was mit dem syslistview321 zu tun? wenn ich das änder kommt auch nur ein leeres feld bzw eine leere msgbox, wie auf dem screeny

    Es gibt 102
    Arten von Menschen:
    Jene, die Binärcode verstehen
    und jene, die es nicht tun.

  • Hier mein genutzter Code:

    Spoiler anzeigen
    [autoit]

    ;#################################################################################################
    ;
    ; Titel: Restore-IconPos-Desktop
    ; Datum: 28. Jan. 2015
    ; Version: 1.1
    ;
    ; Anmerkungen:
    ;
    ; - Die Position der Icons und der Titel wird in einer INI Datei gespeichert
    ; - Das Script wird über Parameter aufgerufen:
    ; -save = Speichert die Positionen
    ; -restore = Plaziert die Icons wieder da wo sie waren
    ; - Unter einem x64-System, muss das Script auch als 64bit-kompiliertem
    ; Script oder mit AutoIt_x64.exe gestartet werden !
    ;
    ;
    ; History:
    ; V1.0 - Erstrelease
    ; V1.1 - Anzahl wird jetzt mit korrektem Wer in der INI gespeichert
    ;
    ;#################################################################################################

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; Einfügen der Include Dateien
    ;#################################################################################################
    #include <Constants.au3>
    #Include <GuiListView.au3>
    #include <File.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; Optionen setzen
    ;#################################################################################################
    #NoTrayIcon ;Kein TrayIcon anzeigen
    Opt("MustDeclareVars", 1) ;Variablen müssen deklariert werden

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; Variablen deklarieren
    ;#################################################################################################
    Local $handle ;Handle für den Desktop
    Local $anzIcons ;Anzahl der Icons auf dem Desktop
    Local $arrIcons[1] ;Array für Restore
    Local $arrayPos ;Position im Array
    Local $txt ;Für das zwischenspeichern von Texten
    Local $int ;Als Zähler Variable
    Local $icon ;Name des Icon
    Local $posX ;X Position
    Local $posY ;y Position
    Local $Mode = "Help" ;In welchem Modus das Script gestartet wurde
    Local $iniFile = @ScriptDir & "\icons.ini" ;Pfad zu der Ini-Datei

    [/autoit] [autoit][/autoit] [autoit]

    If @OSArch = "X64" and not @Autoitx64 Then
    Msgbox(64, "Falsche Architektur !", "Unter einem 64bit Betriebssystem, muss auch eine 64bit-Variante" & @CRLF & "des Programms gestartet werden !")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; Programm Einstigspunkt (POE)
    ;#################################################################################################
    If $CmdLine[0] > 0 Then
    $Mode = $CmdLine[1]
    _CheckIniExsit()
    Switch $CmdLine[1]
    Case "-save"
    ToolTip("Positionen der Icons werden gespeichert!",0,0,"Info")
    Sleep(1000)
    _SavePos()
    Case "-restore"
    ToolTip("Icons werden wieder hergestellt!",0,0,"Info")
    Sleep(1000)
    _RestorePos()
    Case Else
    _ShowHelp()
    EndSwitch
    Else
    _ShowHelp()
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Exit 0 ;Programm wird verlassen

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; _CheckIniExsit
    ; Diese Funktion prüft ob die INI Datei vohanden ist, falls Nein, wird eine leere Datei
    ; erstellt. Ist eine vorhanden, wird gelöscht und eine neue erstellt, aber nur bei -save
    ;#################################################################################################
    Func _CheckIniExsit()
    IF Not FileExists($iniFile) Then
    _FileCreate($iniFile)
    If @error Then
    MsgBox(48,"Fehler","INI-Datei konnte nicht erstellt werden.")
    Exit 1
    EndIf
    ElseIf $Mode = "-save" Then
    If FileDelete($iniFile) = 0 Then
    MsgBox(48,"Fehler","INI-Datei konnte nicht gelöscht werden.")
    Exit 1
    EndIf
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; _ShowHelp
    ; Wenn das Script ohne Parameter gestartet wird, wird diese Hilfe angezeigt, oder wenn ein
    ; falscher Parameter übergeben wurde.
    ;#################################################################################################
    Func _ShowHelp()
    $txt = "Parameter:" & @CRLF
    $txt &= "-save = Speichert die Positionen" & @CRLF
    $txt &= "-restore = Plaziert die Icons wieder da wo sie waren"
    MsgBox(64,"Hilfe - Restore-IconPos-Desktop", $txt)
    Exit 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; _SavePos
    ; Speichern der Icon Positionen in der INI Datei
    ;#################################################################################################
    Func _SavePos()
    $handle = ControlGetHandle("Program Manager", "", "SysListView321")
    $anzIcons = _GUICtrlListView_GetItemCount ($handle)
    IniWrite($iniFile,"Global","Anzahl",$anzIcons)
    For $int = 0 To $anzIcons - 1
    IniWrite($iniFile,"IconPos" & $int,"Icon",_GUICtrlListView_GetItemText($handle,$int))
    IniWrite($iniFile,"IconPos" & $int,"X-Pos",_GUICtrlListView_GetItemPositionX ($handle,$int))
    IniWrite($iniFile,"IconPos" & $int,"Y-Pos",_GUICtrlListView_GetItemPositionY ($handle,$int))
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;#################################################################################################
    ; _RestorePos
    ; Stellt die Icon Positionen an Hand der INI Datei wieder her
    ;#################################################################################################
    Func _RestorePos()
    $anzIcons = IniRead($iniFile,"Global","Anzahl",-1)
    If $anzIcons = -1 Then
    MsgBox(48,"Fehler","INI-Datei ist leer.")
    Exit 1
    Else
    $handle = ControlGetHandle("Program Manager", "", "SysListView321")
    ReDim $arrIcons[_GUICtrlListView_GetItemCount ($handle)]
    For $int = 0 To UBound($arrIcons) - 1
    $arrIcons[$int] = _GUICtrlListView_GetItemText($handle,$int)
    Next
    For $int = 0 To $anzIcons - 1
    $icon = IniRead($iniFile,"IconPos" & $int,"Icon",-1)
    $posX = IniRead($iniFile,"IconPos" & $int,"X-Pos",-1)
    $posY = IniRead($iniFile,"IconPos" & $int,"Y-Pos",-1)
    If $icon = -1 Or $posX = -1 Or $posY = -1 Then ContinueLoop
    $arrayPos = _ArraySearch($arrIcons,$icon,0,0,1,False)
    If $arrayPos = -1 Then ContinueLoop
    _GUICtrlListView_SetItemPosition($handle,$arrayPos,$posX,$posY)
    Next
    EndIf
    EndFunc

    [/autoit]

    Das Programm erzeugt mit dem Parameter "-save" gestartet eine INI-Datei mit allen auf dem Desktop befindlichen Icons und stellt die Position wieder her, wenn mit der Option "-restore" gestartet wird.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Recht vielen Dank Micha_he und Darnas !
    Als ich Micha_he's Programm gestartet hatte, kam ein Hinweis, dass bei einem 64-Bit-System auch die 64-Bit-Variante zu starten ist. Das hat mich stutzen lassen!!!
    Zu Beginn der Compilierung im Wrapper-Fenster hatte ich nur den Haken bei X64 gesetzt, aber den bei X86 nicht entfernt.
    Und nun klappt alles.
    Recht herzlichen Dank nochmals!
    Gruß Dieter

    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GuiListView.au3>
    Local $arr[300][3]
    If Not WinActive("Program Manager") Then WinActivate("Program Manager")
    $hwnd = ControlGetHandle("Program Manager", "", "SysListView321")
    $hwnd = HWnd($hwnd)
    For $i = 0 To _GUICtrlListView_GetItemCount($hwnd) - 1
    $arr[$i][0] = _GUICtrlListView_GetItemText($hwnd, $i)
    $pos = _GUICtrlListView_GetItemPosition($hwnd, $i)
    $arr[$i][1]=$pos[0]
    $arr[$i][2]=$pos[1]
    Next
    _ArrayDisplay($arr)

    [/autoit][autoit][/autoit][autoit][/autoit]

    Einmal editiert, zuletzt von DOheim (30. Januar 2015 um 10:55) aus folgendem Grund: Ergänzung