AutoIT/Script Hilfe benötigt

  • Hallo AutoIT Community,

    ich versuche gerade ein workaround mit AutoIT für mein Problem zu kreieren, jedoch habe ich null Ahnung von Programmierung bzw. Scripterstellung, geschweige denn AutoIT.

    Da meine nVidia Farbsettings bei nem Kaltstart ständig resettet werden, obwohl der nV Settings Button visuell zumindest aktiviert scheint (allerdings die Default Farben ausgewaschen sichtbar sind) , möchte ich eine .exe erstellen, welche mir das nVidia Controlpanel startet, den Button nach dem Start erneut klickt und das Panel wieder schließt.
    Leider hat der Button keine eigene ID und ich muss mit Coordinaten innerhalb des entsprechenden ID Fensters arbeiten aber ich weiß nicht wie man Koordinaten richtig angibt. Mein bisheriger Versuch sieht folgendermaßen aus:

    Sleep(6000)
    Run ("C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe")
    WinWaitActive ("NVIDIA Control Panel")
    ControlClick("NVIDIA Control Panel", "", "[ID:4103]")
    WinWaitActive ("NVIDIA Control Panel", "", "[ID:391]")
    Controlclick ("NVIDIA Control Panel", "ID:391", "[, clicks = 1 [, 45 [, 225]]]")
    WinWaitActive ("NVIDIA Control Panel", "", "[ID:59422]")
    ControlClick("NVIDIA Control Panel", "", "[ID:1021]")
    WinClose ("NVIDIA Control Panel")

    Mit diesem öffnet sich das Fenster zwar und schließt sich auch wieder aber es passiert nix. Die Koordinaten sind lt. AutoIT Info 45, 225 (x,y?).

    [Blockierte Grafik: http://abload.de/thumb/buttony6uyp.jpg]

    Kann mir da zufällig Jemand auf die Schnelle helfen?

    Einmal editiert, zuletzt von zaG (20. August 2014 um 23:45)

  • Nimm doch zum klicken einfach MouseClick("left", xPos, yPos), ich kenn jetzt nicht alle deine Positionen aber die kannst du ja mit der AutoIt WinInfo rausfinden!

    [autoit]

    Sleep(6000)
    Run ("C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe")
    WinWaitActive ("NVIDIA Control Panel")
    MouseClick("left", 45, 225)
    WinClose ("NVIDIA Control Panel")

    [/autoit]
  • Hallo Phil-IT

    Danke für die schnelle Antwort!

    Die Positionen sollten schon mit WinInfo richtig sein. Das Script hangelt sich bis zu dem Fenster aus dem Screenshot durch aber er trifft nicht den rot gekennzeichneten Button. Mit deinem Befehl tut sich zwar endlich mal was aber der Mauszeiger wandert dann ganz nach links auf dem Desktop und bleibt nicht innerhalb dem Fenster mit der ID:391. Kann man die Mauszeigerbewegung auf die ID:391 irgendwie beschränken?

  • Hi,
    du musst dem Script auch mitteilen, in welchem Bereich die Maus klicken soll!

    Controlklick ist übrigens erfahrungsgemäß sicherer als "nur" mouseclick().

    Bei dir sollte

    [autoit]

    autoitsetoption("MouseCoordMode",0)

    [/autoit]

    ins script, damit nicht der gesamte Screen als Koordinatenursprung benutzt wird, sondern das aktuelle Fenster.

  • Hallo Andy,

    durch deine Vorgabe bewegt sich der Mauszeiger nun tatsächlich innerhalb des Fensters, jedoch scheinen die Koordinaten nicht zu stimmen. Laut Info Tool unter dem Reiter "Control" sind die ControlClick Coords 44, 225 und unter dem Reiter "Mouse" -> Position 320, 365. Beide treffen den Button aber nicht ganz, wobei aber der letzte Wert sehr nah dran ist. Habe allerdings noch mit dem Mouseclick Befehl von Phil getestet, da ich nicht weiß wie der ControlClick Befehl inhaltlich richtig lautet. Wenn ich diesen aber nutzen möchte, müssten doch die ersten Koordinaten korrekt sein oder?

    Einmal editiert, zuletzt von zaG (20. August 2014 um 00:40)

  • nein ich glaube bei controll click brauchst du die koords in der gui, nicht die von kompletten desktop.. stehen auch in der info drin nur bisschen wo anders.. nichtmehr unter mouse..

  • Wie würde denn der ControlClick Befehl inhaltlich korrekt lauten? Kann ja dann mal die Koordinaten, die mir unter Control und nicht Mouse angezeigt werden (44, 225) testen.

    So wie in meinem ersten Post (Zeile 6) funktioniert es in jedem Fall nicht  :S

  • Also mal von Anfang an:D

    Du öffnest dein schönes AutoIt Window Info Tool.
    Dann ziehst du dieses Zieldings AUF den Button in deinem Fenster.
    Dann wählst du unten 'Summary' aus.
    Dann scrollst du runter bis zum '>>>>Control<<<<'.
    Dann suchst du die ID und die ControlClick Coords.
    Dann öffnest du SciTe und schreibst rein:

    [autoit]

    Sleep(6000)
    Run("C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe")
    WinWaitActive("NVIDIA Control Panel")
    ControlClick("NVIDIA Control Panel", "", [Die ID die in der Window Info steht], "left", 1, [Die erste Zahl der ControlClick Coords], [Die zweite Zahl der ControlClick Coords])

    [/autoit]


    Die eckigen Klammern müssen natürlich weg, alsi jetzt nicht "[1021]" oder sowas hinschreiben sondern nur die Zahlen!

  • 1. Du hast da wohl den Parameter Text ausgelassen. Die ID gibt man erst als dritten parameter an.
    2. Der ID parameter muss entweder in eckige klammern also "[ID:391]" oder im falle der ID gleich nur die Zahl 391
    3. Wenn du eine anzahl an klicks und die Position angeben willst dann ohne eckige klammern und als extra parameter

    Ungefähr so sollte das ganze aussehen:

    [autoit]

    Controlclick ("NVIDIA Control Panel", "", 391, "left", 1 , 45 , 225)

    [/autoit]

    Die eckigen Klammern die du in der Hilfe findest geben nur an das die Parameter optional sind.
    D.h. Standardmäßig wird als button left verwendet außer du gibst was anderes an. In deinem Fall musst du es angeben weil du ja weiter hinten eine Koordinate mitgeben willst.
    Wenn du die Koordinaten weglässt wird einfach mittig auf das Control geklickt. Ich denke mal das ist das was du eigentlich willst
    D.h. wahrscheinlich ist das schon deine Lösung

    [autoit]

    Controlclick ("NVIDIA Control Panel", "", 391)

    [/autoit]


    Wenn du wirklich eine bestimmte position im Control anklicken willst dann brauchst du die ControlClick Coords

  • Danke für eure zahlreiche Hilfe! Die ControlClick Coords aus dem Control Fenster lauten definitiv 45, 225 aber leider funktioniert der ControlClick Parameter damit ums verrecken nicht. Vermutlich werden die Koordinaten aus irgendeinem Grund falsch ausgelesen. Hingegen konnte ich die genauen Mauskoordinaten ermitteln, in dem man im Info Tool Kooridnaten -> Window auswählt! Danach habe ich den Wert eingetragen und so funktioniert es wie gewünscht! Auch wenn es schade ist, dass es via ControlClick nicht funktioniert hat, dennoch vielen Dank an alle Beteiligten! Anbei der gesamte Quellcode...

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

    Sleep(5000)
    Run ("C:\Program Files\NVIDIA Corporation\Control Panel Client\nvcplui.exe")
    WinWaitActive ("NVIDIA Control Panel")
    ControlClick("NVIDIA Control Panel", "", "[ID:4103]")
    WinWaitActive ("NVIDIA Control Panel", "", "[ID:391]")
    autoitsetoption ("MouseCoordMode",0)
    MouseClick ("left", 328, 416)
    WinWaitActive ("NVIDIA Control Panel", "", "[ID:59422]")
    ControlClick ("NVIDIA Control Panel", "", "[ID:2]")
    WinClose ("NVIDIA Control Panel")

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