Speichern von zwei verschiedenen Mousepositionen

  • Hallo Ich bin neu hier und wollte zum Lernen von AutoIT ein kleines Programm schreiben, damit ich einen Screenshot eines Bildbereiches machen kann.

    Aber ich scheitere leider schon hier.

    Ich möchte die linke obere Ecke des Bildbereiches abfragen und bei Tastendruck (IsPressed) die x und y Koordinate der Mausposition in zwei Variablen abspeichern.

    Das gleiche dann in der rechten unteren Ecke des Bildbereichs.

    Aber ich habe Probleme mit der While schleife.

    Wäre um Hilfe dankbar.

    Hier mein momentaner Code:


    Vielen Dank für eure Hilfe im Voraus.

    Einmal editiert, zuletzt von HoT (30. Oktober 2022 um 21:30)

  • Als zusätzliches Extra, damit du einen Vergleich hast:

    Spoiler anzeigen
  • Ah super,

    jetzt klappt es. Danke dir Kanashius.

    Dann war ich ja gar nicht so falsch.

    Ein kleines Problem habe ich noch. Der Bildschirmbereich stimmt beim Foto nicht.

    Auch wenn ich mit dem Tool (AutoIt Window Info) die Koordinaten bestimme und fest (also nicht über die Abfrage Variable) in den Befehl integriere, stimmt der Bildschirmbereich nicht. Woran könnte dies liegen?

    _ScreenCapture_Capture("D:\Temp\AutoIT\Screenshots\" & $i & ".jpg", 200, 200, 1200, 1600)

    Vielen Dank im Voraus.

    HoT

    Siehe Beispiel

    3 Mal editiert, zuletzt von HoT (31. Oktober 2022 um 09:40)

  • Danke für die Info,

    aber es steht bei mir auf screen. Und das Skript holt sich ja auch die Koordinaten vom screen, oder. Aber wie im Beispiel zu sehen ist, sind die Koordinaten verschoben.

  • Aber wie im Beispiel zu sehen ist, sind die Koordinaten verschoben.

    Da ich nicht weiß, wie dein gesamter Screen aussieht, ist für mich nicht ersichtlich, dass dort etwas verschoben ist.

    200 px von links, 200 px von oben, Breite x Höhe: 1000 x 1400 passt zu deinem geposteten Bildausschnitt. Der linke Rand ist definitiv OK, der obere Rand ist natürlich davon abhängig, an welche Position du den dort zu sehenden Post gerade gescrollt hattest.

  • Also ich habe versucht den gesamten Code von Kanashius als Screenshot aufzunehmen.

    Das heißt, er hat links und oben zuviel aufgenommen, dafür unten und rechts zu wenig.

    Orginalkoordinaten wären: 358, 253, 1174, 1066.

    Eigentlich sollte es so aussehen. Mit snippingtool aufgenommen.

    Gruß

    HoT

  • Das heißt, er hat links und oben zuviel aufgenommen, dafür unten und rechts zu wenig.

    Kann ich nicht nachvollziehen.

    Also um nicht aneinander vorbeizureden:

    Ausgeführt wird der Code aus Post #3. Ein Screenshot von eben diesem Code im Browserfenster wird erstellt.

    Mein "Bild.jpg" zeigt dann exakt den markierten Bereich.

    Vor allem können wir uns dem Problem nicht nähern, wenn du nicht alle Informationen zusammen angibst. Du schreibst "Orginalkoordinaten wären:..." - erwähnst aber nicht die Koordinaten, die vom Skript ausgegeben werden. Anhand der Differenz kann man evtl. Schlussfolgerungen auf dein Problem ziehen.

  • Hallo BugFix,

    sorry.

    Also ich habe jetzt nochmal einen Test gemacht.

    Die Koordinaten, die das Script aus Post #3 ausgibt, stimmt mit den Koordinaten, die ich über das Tool auslese überein.

    Diese waren im jetzigen Test: 349,215,1175,1021

    Mit dem AutoIT Info tool auch.

    Der Screenshot wird aber versetzt aufgezeichnet.

    Mit den ungefähren Koordinaten von : 253,168,871,823

    Ich hoffe das sind alle Daten die du brauchst.

    Vielen Dank für deine Hilfe

    HoT

    Wenn ich dies mit verschiedenen Bildschirmausschnitte teste, kann keine Gesetzmäßigkeit zwischen den Abweichungen der geklickten Grenzen mit den aufgenommenen Bildgrenzen festgestellt werden. Funktioniert das Skript bei dir? Stimmen die abgefragten Begrenzungen mit dem Bildausschnitt überein?

    Einmal editiert, zuletzt von HoT (31. Oktober 2022 um 13:10)

  • Code
    Programm:   349,215,1175,1021  B: 826, H: 806
    Bild:       253,168,871,823    B: 618, H: 655
    Differenz:  -96,-47              -208,   -151

    Das ist nicht nur verschoben, sondern auch die Größe ist verändert. :/

    Ich weiß nicht, ob geänderte Anzeigeeinstellungen (Zoom, Schriftdarstellung etc.) darauf Einfluss haben können. Aber irgendwas scheint bei dir nicht "normal" eingestellt.

  • Also wenn ich den Screenshot an das Programm Greenshot übergebe mit (senden der Umschalt und print-Tasten) um dort den Screenshot des Bildschirmsbereichs zu machen, dann stimmt es und ist so wie es sein soll.

    Ich habe nur das Problem mit dem

    _ScreenCapture_Capture("D:\Temp\AutoIT\Screenshots\" & $i & ".jpg", $xol, $yol, $xur, $yur)

    Befehl. Komisch.

    Wollte es gern eben nur mit Windows Bordmitteln realisieren, ohne Zusatzprogramme.

    Bei einem Test an einer anderen Stelle war die Koordinatendifferenz noch krasser:

    1 Programm: 921 , 77, 2127, 1335

    2. Bild : 1399, 100, 1437, 1335

    Das verstehe ich nicht. Wenn es wenigstens eine gleichmäßige Abweichung wäre.

  • 'Programm Greenshot'

    Das ist aber kein Windows Bord mittel :) sondern ein externes Programm.

    Ich hoffe ich habe es richtig verstanden es geht um ein referenzbild oder ?

    weil wenn es um die eigentliche Funktion geht kann ich nicht viel beitragen.^^

    (davor musst du aber Greenshot ausmachen sonst klappt der shortcut nicht.)

    1.ich mache meine Desktopscreenshorts immer mit einem Tastendruck auf 'druck' (print|drucken)

    oder für nur Fenster, 'alt+druck' dann wird nur das aktiveFenster ausgewählt.

    2.dann öffne ich MSPaint zieh das weiße Kästchen ganz klein und drücke strg+v
    3.Wen ich die Koordinaten eines Screens brauch dann wähle ich in Paint 'Auswählen' aus, fahr mit dem Courser dorthin wo ich die Koordinaten brauch und dann werden die mir unten in Paintstatusleiste angezeigt.

    Obwohl ich das sehr lange nicht mehr gemacht habe weil die Autoit Windows Info immer gute Dienste geleistet hat was Koordinaten angeht.

    Aber vielleicht hast du die Probleme nicht mehr wenn du deine Bilder mit Paint erstellst statt Greenshot, vielleicht verfälscht greenshort irgendwie die größe warum auch immer?


    edit: ok glaub ich habs jetzt verstanden ...

    Einmal editiert, zuletzt von MojoeB (31. Oktober 2022 um 17:15)

  • Hallo miteinander,

    ich habe den Fehler gefunden.

    Nachdem ich einen 32Zoll Monitor habe, habe ich die Windows Anzeigeeinstellungen bei Skalierung und Anordnung auf 150% stehen.

    Als ich sie auf 100% eingestellt habe hat alles so funktioniert, wie es sollte.

    Trotzdem komisch, oder?

    Gibt es eine Möglichkeit trotz dieser Skalierung den richtigen Screenshot zu bekommen?

    Ich probiere mal die Skalierung auf die Koordinaten herunterzurechnen.

    Vielen Dank aber an alle, die versucht haben zu helfen.

    Gruß

    HoT

  • Ich weiß nicht, ob geänderte Anzeigeeinstellungen (Zoom, Schriftdarstellung etc.) darauf Einfluss haben können

    Nachdem ich einen 32Zoll Monitor habe, habe ich die Windows Anzeigeeinstellungen bei Skalierung und Anordnung auf 150% stehen.

    Als ich sie auf 100% eingestellt habe hat alles so funktioniert, wie es sollte.

    Mein Reden. :P

  • Hallo,

    zur Vervollständigung.

    Da ich bei der Bildschirmskalierung die 150% eingestellt habe, muss ich die Koordinaten mit 1,5 multiplizieren, dann stimmt es auch.

    Es handelt sich also um eine zentrische Streckung am Ursprung (0|0) sprich obere linke Ecke.

    Darum hat der Bildausschnitt, je weiter rechts er war immer weniger zu den angeklickten Koordinaten gepasst.

    Vielen Dank für Eure Hilfe

    Jetzt suche ich mir ein neues Projekt. AutoIT macht aber richtig Spaß.

    Viele Grüße

    HoT

  • Da ich bei der Bildschirmskalierung die 150% eingestellt habe, muss ich die Koordinaten mit 1,5 multiplizieren, dann stimmt es auch.

    Ein simples Verfahren, welches auch andere Skalierungen allgemein berücksichtigt, wäre :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ah ok,

    du liest also in Zeile 8 die Usereinstellung aus und speicherst sie in die Variable g_iUserAppliedDPI.

    Zeile 12 ist eine Beispielkoordinate

    Aber was passiert in Zeile 14?

    Die Koordinaten mit dem Streckungsfaktor 96/g_iUserAppliedDPI multipliziert.

    Aber was macht ConsoleWrite? (

    The data you wish to output. This may either be text or binary.

    ) ????

    Als Test die Ausgabe in der Console?

    Gruß

    HoT

    Aber muss es in Zeile 9 nicht Round($g_iUserAppliedDPI/$g_fDPIDefault, 2)

    heißen??

    3 Mal editiert, zuletzt von HoT (1. November 2022 um 12:01)

  • Du liest also in Zeile 8 die Usereinstellung aus und speicherst sie in die Variable g_iUserAppliedDPI.

    Ja, das ist die Einstellung des jeweiligen Rechners (96 = 100% , bei Dir 144 da 150%).

    Das ist flexibler als einen fixen Wert zu verwenden, funktioniert also auch, wenn z.B. auf 125% eingestellt ist.

    Aber was macht ConsoleWrite

    Nur zur Ansicht, um das Ergebnis einer Beispielberechnung in die Console von SciTE zu schreiben.

    Aber muss es in Zeile 9 nicht Round($g_iUserAppliedDPI/$g_fDPIDefault, 2)

    heißen??

    Nein.

    Beispiel :

    Die Rechnereinstellung , also $g_iUserAppliedDPI ist auf 200% = 192 gesetzt. Basis 100% = 96

    96 / 192 = 0.5

    Du musst also Koordinatenwerte mit 0.5 multiplizieren.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Aber muss es in Zeile 9 nicht Round($g_iUserAppliedDPI/$g_fDPIDefault, 2)

    heißen??

    Hmm, ich muss mich wohl korrigieren.

    Die o.a. Skalierungsformel verwende ich, um z.B. Schriftgrößen in Labels usw. an die eingestellte Prozentdarstellung anzupassen. Bei den Koordinaten hast Du wahrscheinlich recht, da muss der Faktor aus i Round($g_iUserAppliedDPI/$g_fDPIDefault, 2) gebildet werden.

    Probiere es einfach aus ;) .

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."