Probleme mit PixelSearch

  • Hallo zusammen,

    ich versuche die PixelSearch-Funktion zu verstehen.

    Meine AutoIt-Version ist: 3.3.16.0

    Das Betriebssystem ist: Windows 11 Pro 64Bit 22621.819

    Hier das Script, das ich zum Testen verwende:

    Nur irgendwie funktioniert das nicht.

    PixelSearch erkennt das blaue Label einfach nicht, es erkennt immer nur den Desktophintergrund.

    Also entweder mache ich da etwas falsch, oder die Funktion hat einen Fehler bei Windows 11 Pro 64Bit 22621.819.

    (Ich habe leider kein anderes Betriebssystem zum Testen).

    Die Funktion PixelGetColor gibt mir komischerweise auch immer nur die Farbe des Desktop zurück, egal welche Koordinaten ich da eingebe.

    Auf einem anderen PC mit dem selben Betriebssystem, aber einer anderen Grafikkarte usw. funktioniert es auch nicht.

    Kann mir da einer helfen, irgendwie blicke ich da nicht mehr durch?


    MfG:

    BigRox

  • Moin,


    nach dem GUISetState() braucht es noch etwas Zeit, bis das Fenster im Vordergrund angezeigt wird. Bei mir reicht es, wenn ich dahinter ein WinWaitActive($hGUI) einfüge.


    MfG, Velted

  • Hallo Velted und Moombas

    ich habe eure Tipps ausprobiert.

    Das Testscript sieht jetzt so aus:

    Aber leider funktioniert keine Version.

    Es geschieht einfach nichts, PixelSearch erkennt in beiden Fällen kein blaues Pixel.

    Ich eben einen Rechner mit Windows 10 Pro 64Bit 1909 in die Finger bekommen und es damit ausprobiert, da ging auch nichts.


    MfG.:

    BigRox

  • Laber Rhabarber!!

    Screenshot (Bildschirmgröße!!!) machen und hier einstellen. alles andere ist rumgestochere im Nebel!

  • Mach einmal einen MouseMove() zu den Koordinaten, um zu sehen, ob diese überhaupt stimmen.

    Evtl. macht Dir die Skalierung einen Strich durch die Rechnung.

    Schon gemacht, die Koordinaten stimmen.

    Laber Rhabarber!!

    Screenshot (Bildschirmgröße!!!) machen und hier einstellen. alles andere ist rumgestochere im Nebel!

    Hier ist der Sceenshot.

    MfG:

    Bigrox

  • Ich denke so wirst du eher nicht zu einem sinnvollem Ergebnis kommen.

    Mit XY-Problem war gemeint, dass du ein eigentliches Problem lösen möchtest und glaubst die Lösung besteht in der Nutzung von PixelSearch.
    Deine Frage und die Antworten drehen sich dann zwangsläufig darum deine nun entstandenen Problem mit PixelSearch zu lösen obwohl eventuell für das eigentliche Anliegen ein viel besserer Ansatz vorhanden wäre.


    Bitte erkläre also - dir zuliebe - was du im Grunde umsetzen möchtest und löse dich dabei schonmal von deiner bisherigen Lösung mit Pixelsearch.


    Dein Screenshot hilft hier überhaupt nicht weiter, weil jedem klar ist, dass dein Ziel nicht sein kann erst eine blaue Fläche in einer eigenen GUI zu erstellen und diese dann mit PixelSearch zu klicken.
    Der eigentliche Sinn dahinter muss also ein gaaaanz anderer sein.

    Wenn du dies erläuterst wirst du mit ziemlich hoher Sicherheit eine viel bessere Lösung erhalten als der Weg der bislang eingeschlagen wurde.
    Ich programmiere seit >17 Jahren in AutoIt und das wacklige Pixelsearch habe ich noch nie benötigt.

  • Auch wenn ich AspirinJunkie zu 100% zustimmen muss, im Screenshot stimmt die Farbe also...

    Wenn es dann also unbedingt ein Farbensuchspiel sein soll, dann Screenshot machen und im so enthaltenen Bild die Farbe suchen. Dann ist die Position natürlich global, aber die Position des Fensters ist ja bekannt. Alternativ einen Screenshot vom Fenster machen und darin suchen.

  • Hallo AspirinJunkie,

    das Script, dass ich hier gepostet habe, ist nur ein Testscript um mein das Problem mit Pixelsearch möglichst einfach nachvollziehbar zu machen.

    Das eigentliche Script dient zum Import von Registry-Dateien und der Auswertung eventuell auftretender Fehler.


    Da aber leider die Fenster bei einem Fehler und das Fenster der Erfolgsmeldung, den selben Titel und keinen Text haben und auch die selben Buttons haben und sich nur durch das Symbol und die Höhe unterscheiden, habe ich es mit Pixelsearch probiert um das rote Symbol zu erkennen.

    Dieses Problem habe ich auch schon mal hier im Forum gepostet.

    Thema: "Fehler beim Import erkennen" vom 21.3.2021.


    Damals habe ich das Problem mit Hilfe von Pixelsearch lösen können und es hat auch bis vor kurzem einwandfrei funktioniert.

    Nur seit letzter Woche gibt das Script aber nur noch Fehlermeldungen usw. von.

    Daher hab ich versucht das Problem mit meinem Testscript zu "erschlagen", leider aber ohne Erfolg.

    Daher eben meine Frage hier im Forum.


    Inzwischen versuche ich die Fensterhöhe (Clientbereich) auszuwerten, das geht auch bei verschiedenen Scalierungen ganz gut.

    Das Verhältnis der Höhe des ersten Fensters und des zweiten Fensters bleibt ja gleich und kann somit auch ausgewertet werden.


    MfG:

    Bigrox





    .

  • Das eigentliche Script dient zum Import von Registry-Dateien und der Auswertung eventuell auftretender Fehler.

    Da ist die Variante über das extra hierfür vorgesehene Kommandozeilentool reg doch 1000x stabiler.


    Alles was du dafür brauchst ist lediglich eine einzige Zeile:

    AutoIt
    If RunWait('reg import "' & @ScriptDir & "\Test.reg" & '"') <> 0 Then MsgBox(48, "Fehler", "Import der Reg-Datei mit Fehlern beendet")


    Wenn der Fehlertext noch von Relevanz sein sollte, dann ist auch das natürlich möglich:


    Und das alles 10x stabiler und schneller als mit Pixelsearch rumzuopern. Dann stößt du auch nicht nach nem Jahr auf neue Probleme die Pixelsearch verursacht.

  • Und somit hatte AspirinJunkie recht: Es ist ein X-Y-Problem gewesen.

    BigRox Für ganze Reg-Dateien hat AspirinJunkie dir ja bereits eine Lösung gezeigt.

    Wenn es nur um einzelne Registry-Einträge geht, kannst du auch einfach durch Regwrite und anschließendem prüfen des @error flags (siehe Hilfe) sicher gehen. Eventuell um ganz sicher zu gehen nochmal per RegRead den Wert auslesen und so Soll und Ist vergleichen, das wäre dann jedoch eine doppelte Prüfung kann aber durchaus mal hilfreich sein.