Einfache Variante für unzugängliche Koordinaten

  • Hallo Community

    Ich stelle meine Frage so einfach wie ich es nur kann:

    Meine Bildschirmauslösung beträgt 1280 x 1024 Pixel. Die Webseite auf der ich Koordinaten ermitteln und anklicken will ist jedoch 1280 x 4986 Pixel gross.
    Gibt es eine einfache Möglichkeit, per MouseMove Koordinaten zu erreichen die sich auf meinem Bildschirm im Normalfall nur durch Scrollen erreichen lassen?

    Das Tool "AU3Info" liefert mir immer nur die Koordinaten im Verhältnis zum gerade angezeigten Bildschirmbereich anstatt mich mit "wahren" Koordinaten zu beglücken.
    Ich habe bereits ziemlich viel versucht, mich mit der WinAPI auseinandergesetzt, viel über COM-Objekte gelesen, der GUI eine Chance gegeben und verschiedene Beispiele ausprobiert, jedoch jedesmal ohne Erfolg. Auch _WinAPI_ClientHeight sah einfach nicht über meinen Bildschirmrand hinaus. Auch eine Suche im hiesigen Forum brachte leider keinen Erfolg.

    Kann mir bitte jemand helfen? Ich habe - für einen AutoIT-Anfänger schon ziemlich vel hingekriegt, hier jedoch komme ich einfach nicht weiter (und dies auch nicht nach tagelanger Suche).

  • ...Sicher. Dies wäre kein Problem wenn ich in jedem Fall Name und ID kennen würde. Da ich meine Scripts jedoch nicht für eine bestimmte Seite baue wird dies wohl ziemlich schwierig werden...

  • Hmmm... hab leider noch nix fertiges, eben nicht. Du kannst aber beispielsweise mal die Seite https://autoit.de/www.20min.ch mit ShellExecute öffnen und versuchen die Maus auf eine Position zu setzen die am Bildschirm ohne scrollen nicht angezeigt werden kann. Tönt einfach... habs jedoch nicht fertig gebracht!

  • Liesse sich das Problem eventuell mit AutoHotKey lösen? Könnte ich damit vielleicht eine Funktion schreiben die die genauen (Fenster- und nicht Bildschirmbezogenen Koordinaten) ausliest und diese über Variablen an AutoIT weitergibt? Kann AutoHotKey in dieser Hinsicht mehr als AutoIT? Wäre das eine Möglichkeit?

  • Probier es mal mit der FF.au3 oder der IE.au3.

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Es geht in erster Linie darum, die Maus auch auf eine Stelle ausserhalb des gerade auf dem Bildschirm angezeigten Bereichs setzen zu können. Beispielsweise auf den Link "Horoskope" im linken Teil bei 20min.ch. Der Klick selbst ist dann für mich kein Problem, kannst ihn aber gerne machen. Das Ganze sollte möglichst nicht von einem Browser abhängig gemacht werden da wir auf manchen Systemen IE und auf anderen wiederum Mozilla laufen haben. Wär toll wenn Du mir auch erklären könntest wie Du's machst, denn ich möchte das selbst nachher auch hinkriegen. Vielen Dank im Voraus für die Zeit die Du dafür opferst.

  • Fallst du das mit der FF.au3 noch brauchst, hier ist ein gutes Tut...
    Du kannst am Anfang des Scripts einmalig eine Abfage machen, welcher Browser benutzt wird:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    If Not FileExists(@ScriptDir & "\Browser.ini") Then
    _Abfrage()
    EndIf

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

    Func _Abfrage()
    $abfrage = GUICreate("Browser", 323, 110, 192, 124)
    $Label1 = GUICtrlCreateLabel("Welcher Browser wird benutzt?", 40, 24, 252, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Firefox", 32, 64, 99, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Internet Explorer", 176, 64, 107, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    While 1
    $Msg = GUIGetMsg()
    Select $Msg
    Case $Msg = $GUI_EVENT_CLOSE
    Exit
    Case $Msg = $Button1
    IniWrite(@ScriptDir & "\Browser.ini","Browser","Name","FF")
    Case $Msg = $Button2
    IniWrite(@ScriptDir & "\Browser.ini","Browser","Name","IE")
    EndSelect
    WEnd
    EndFunc

    [/autoit]
    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

    2 Mal editiert, zuletzt von cartan12 (11. Januar 2010 um 17:22)

  • Sry... war erst auf dem Heimweg und danach gabs noch was Feines zu essen. Die Idee mit Find ist wirklich gut, funktioniert toll. Wenn ich das aber richtig verstanden habe geht es nur über solche Umwege (Find, ff.au3, ie.au3 usw.) und nicht direkt über MouseMove? Wie ist es dann beispielsweise möglich einen Screenshot einer ganzen Seite zu erstellen? Ich denke dass es einfach Wege geben muss um die Maus direkt zu setzen, oder täusche ich mich da wirklich so gewaltig?

    Da ich vor allem Applikationen und Scripte entwickeln will die sich auf Internetseiten bewegen wäre das mehr als Schade...


    Xeno - Dir sei an dieser Stelle für den Code gedankt. Ist echt ne gute Idee.

  • Also, wenn der Browser immer im Vordergrund ist, kannst du Funktionen wie MouseMove, MouseClick, ect. benutzen, davon ist aber normalerweise abzuraten... Ist deine Entscheidung.

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Thx... aber MouseMove und MouseClick funktionieren bei mir echt nur im auf dem Monitor angezeigten Bereich. Ich möchte mich bei den Koordinaten aber nicht auf den Monitor oder Bildschirm sondern auf das Fenster beziehen das in der Regel um einiges länger ist. Gibt es da Alternativen?

  • Der Quellcode für die Abfrage des Standardbrowsers ist eine sehr edle Lösung. Thx!

    Übrigens... wo kriege ich denn die ff.au3 her?

    Wenn es keinen direkten Weg gibt dann werde ich wohl tatsächlich mit ff.au3 und ie.au3 arbeiten müssen obwohl ich leider nur die ie.au3 finde.

  • Meinst du z.b. sowas? (Musst noch die Koordinaten anpassen)

    [autoit]

    ControlClick("Hilfe & Unterstützung - .: autoit.de :. - Das deutsche AutoIt-Forum - Mozilla Firefox","","[CLASSNN:MozillaWindowClass5]","" ,1,308 ,323)

    [/autoit]
    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Da ist auch die FF.au3 dabei.

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Erneut danke für den Quellcode, einfach Klasse!


    Funktioniert denn ControlClick auch in Bereichen die nicht auf dem Bildschirm angezeigt werden? Ich werde den Befehl mal gründlich austesten.

  • Ja, bei allen, die im Hintergrund laufen.

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"