Position eines Icons auf dem Desktop ermitteln

  • Hi,

    ich würde gerne die Position eines Icons auf dem Desktop ermitteln.

    Leider habe ich keine Idee, wie ich das bewerkstelligen soll und über die Suche und Google habe ich auch nichts passendes gefunden :(.
    Hat jemand eine Idee?


    So long,
    owi

    Rechtschreibfehler sind Spezialeffekte meiner Tastatur.

    Einmal editiert, zuletzt von owi dowi spinn (13. Juni 2011 um 10:43)

  • also wenn du das icon / symbol kennst, könntest du mit pixelsearch arbeiten... wird natürlich blöd, wenn das symbol unterschiedlich groß auf verschiedenen desktops ist. falls du es irgendwie anklicken willst, könntest du noch schauen (Falls der desktop link immer den gleichen namen trägt), ob du nicht besser unter @desktop die links nach der linkbeschreibung durchsuchst.

  • Ich weiß sowohl den Namen der Verknüpfung und das Icon. Mit PixelSearch klappt das aber wahrscheinlich nur kaum, da ich nicht die Größe der Icons kenne und oft ja auch Transparenz verwendet wird, wo man dann das Wallpaper, welches ich auch nicht kenne, sieht.

    Kann man die Position nicht anhand des Namens irgendwie in der Registry oder so bestimmen?

    Rechtschreibfehler sind Spezialeffekte meiner Tastatur.

  • das hier schon gesehen ?:
    http://de.autohotkey.com/forum/topic2549.html

    einer der links oben führt zu einem artikel in dem das hier steht:

    Einmal editiert, zuletzt von WhiteLion (12. Juni 2011 um 22:31)

  • Probier mal folgendes Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    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
    $pos = _GUICtrlListView_GetItemPosition($hwnd, $i)
    If IsArray($pos) Then
    ; Icongröße ist bei mir 48x48 und er ist bei mir ~ 6 Pixel über dem Feld =>
    ; 48x54, damit man nun die Mitte hat :2 rechnen => 24x27 jeweils hinzufügen:
    MouseMove($pos[0] + 24, $pos[1] + 27)
    EndIf
    Sleep(100)
    Next

    [/autoit]


    PS: Testsystem = Windows 7 x64 @ 1680 x 1050 Auflösung mit Standard Design
    - ist vllt. wichtig für die Anvisierung der Icons (bei mir ist es mit dem Beispiel mittig) ;)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • WhiteLion: Da stehen zwar einige Verknüpfungen vom Desktop, aus dem Binären Wirrwarr kann ich allerdings keine Positionen rauslesen.

    @Twodollarbillie: Ich möchte eigendlich möglichst fern von allem was mit PixelSearch und so zu tun hat bleiben, da das Icon theoretisch auch komplett transparent o.Ä. sein kann.

    XovoxKingdom: Klingt gut, nur was ist der Program Manager?^^

    Rechtschreibfehler sind Spezialeffekte meiner Tastatur.

  • Bei mir (siehe letzter Post Infos zu OS) heißt der Desktop so...
    Du kannst es via AutoItinfotool herausfinden und ggf. anpassen, da ich nicht
    weiß wie er bei anderen OS heißt.
    Die Controlgethandle-Funktion muss dann selbstverständlich auch angepasst werden.
    Welches OS hast du denn?

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Ahh, jetzt habe ich dein Script verstanden :)

    Ich habe jetzt dein Script so umgeschrieben, dass man den Namen der Verknüpfung eingeben muss und da dann ein BalloonTip erscheint.

    Spoiler anzeigen
    [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
    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]


    Das war genau das, was ich gesucht habe, vielen Dank! :D

    P.S.: Vista x32, 1440x900, Aero-Design

    Rechtschreibfehler sind Spezialeffekte meiner Tastatur.