ImageSearch verhält sich unterschiedlich in Abhängigkeit des aktiven Fensters

  • Ich würde gerne ein Banküberweisung automatisieren. Ich nutze dafür das Programm VR-Networld.

    Ich habe 3 Monitore, davon einen mit 4k Auflösung auf dem das ganze gefunden werden soll.

    Nun habe ich mit dem Script die Blume auf meinem Desktop gefunden.

    Wenn ich aber VR-Networld einblende oder auch MS-Teams, dann findet Imagesearch die Bilder nicht.

    Woran liegt das? Ich poste mal mein Script hier. Vielleicht kennt sich jemand damit aus.



  • Hallo!

    Ohne jetzt darauf eingehen zu wollen, dass man Webseiten mit entsprechenden API´s oder Webinterfaces steuert, würde ich vorschlagen, die zu suchenden Bilder incl. eingeblendeter Fenster aufzunehmen, bspw. per Windows-eigenem Snipping Programm.

    Ggf. sorgt das Fenster/Programm im Vordergrund oder auch Windows dafür, dass der vermeintliche Hintergrund farblich verändert wird, das kommt oft vor.

  • Hallo Andy,

    danke für deine Info. Bei dem Programm handelt es sich um keine Website, sondern um ein Programm, das auf dem eigenen Rechner läuft.

    Ich nehme die Bilder mit SnippingTool auf. Was auffällig ist, dass die Software auf dem 4k nicht besonders scharf auflöst. Ich weiß aber nicht, wie ich einen anderen der 3 Monitore mit dem checkImageTool ansteuern könnte. Beide hätten eine geringere Auflösung.

  • Hi Stefan,

    dann mach doch einfach mehrere "Aufnahmen" vom Hintergrund, jeweils mit unterschiedlicher Auflösung/Monitor.

    Im Script würde ich dann alle "Bilder" aus dem Verzeichnis nacheinander einlesen und nacheinander prüfen. Dauert pro Bild ja nur einige Millisekunden.

    Hätte den Vorteil, dass du, selbst wenn du das "passende" Bild aus welchen Gründen auch immer nicht erwischen würdest, einfach per Snipping-Tool ein aktuelles "Bild" generierst und im Verzeichnis ablegst.

    Dann musst du den Programmcode nicht jedes Mal ändern und hast in einigen Sekunden auf eine Änderung des Hintergrunds reagiert.


    //EDIT

    WICHTIG! Lege die Bilder als Bitmap *.PNG ab, bei einem JPG reicht schon eine minimale Veränderung des Ursprungbildes um je nach Kodierung/Komprimierung komplett andere Blöcke/Farben zu generieren! Da hilft dann auch kein "Toleranz"-Parameter in der (Imagesearch)-Suchfunktion

  • Hallo Andy,


    Danke für deine Gedanken.


    bisher habe ich immer mit dem SnippingTool einen Ausschnitt kopiert und in Gimp in eine *.bmp gewandelt. Vielleicht geht hier manchmal etwas verloren. Mit dem SnippingTool habe ich heute direkt ein *.png erzeugt. Das hat aber auch nicht gewirkt.

    Ich habe bisher immer den ImageSearchArea-Befehl verwendet. Der ImageSearch-Befehl hat nie etwas gefunden. Und beim area-Befehl gebe ich wie du im Script siehst die Auflösung des 4Ks an. Damit findet er zumindest einige Bilder immer, andere nie. Also liegt es irgendwie an den Bildern. Ich finde aber den Unterschied nicht, wie ich die Bilder erzeugt habe.


    Meinst Du das ich im meinem Script das SnippingTool einbauen soll? Und darin einen aktuelles Bild erzeugen soll?

    Ich habe ja keine bewegten Bilder. Bei Bewegung würde es mich ja nicht wundern. Meine Banking Programm ist vom Bild her ziemlich statisch. Da scrolle ich maximal was rauf oder runter.

  • moin


    du könntest mal dies hier versuchen :


    _ImageSearchArea($findImage, $resultPosition, $x1, $y1, $right, $bottom, ByRef $x, ByRef $y, $tolerance = 0, $transparency = 0)

    -> $tolerance = 0<-<-
    Der Wert in wie weit darf das bild abweichen.


    kommt von dieser : ImageSearch2015.au3
    ich weiß nicht welche du verwendest.


    glaube aber da benötigst du noch die dll dateien.

    Der Wert kann von $tolaerance= 0 - 255 sein.


  • Hi,

    Der ImageSearch-Befehl hat nie etwas gefunden.

    Stell mal bitte die beiden Bilder ein, PNG oder BMP(besser). Mit beiden meine ich sowohl das Bild, welches du als Suchbild hast, als als auch das zweite Bild, welches du vom direkt beim NICHT gefundenen Suchvorgang von diesem Bereich gemacht hast.

    Ich habe da nämlich eine Idee...

    Ich hatte vor einigen (vielen) Jahren ein eigenes Programm "PushTheButton" geschrieben, welches sowohl die Bilder aufnimmt und auch sucht. Imho wesentlich schneller und auch "genauer" als Imagesearch. Es ging nämlich genau darum, "Buttons" in Fremdprogrammen zu klicken. Dabei hatte ich festgestellt, dass beim Hovern, d.h. wenn der Mauszeiger über dem Button steht, der Button mit einem im Programm/Windows hinterlegten Hoverbild dargestellt wird.

    Diese Variante hatte ich damals kompensiert, indem beim Aufnehmen des Buttons die Möglichkeit bestand, sowohl den nicht- als auch den gehoverten Button abzuspeichern.

  • @MojeB: ich nutze imagesearch2015. Und eine Korrektur dazu. Auf meinem Laptop finde ich problemlos etwas mit imagesearch, nur auf dem Desktop mit 3 Monitoren scheint es nicht so zu klappen

  • Hi,

    Stell mal bitte die beiden Bilder ein, PNG oder BMP(besser). Mit beiden meine ich sowohl das Bild, welches du als Suchbild hast, als als auch das zweite Bild, welches du vom direkt beim NICHT gefundenen Suchvorgang von diesem Bereich gemacht hast.

    Hi Andy,

    das mit dem zweiten Bild habe ich nicht verstanden. Soll ich denn das AutoiT Programm an dem Code stoppen, an dem das Bild verglichen wird und dann mit dem SnippingTool aufnehmen? Mit dem SnippingTool werde ich nie exakt die Größe des ersten Bildes bekommen. Oder soll ich das dann zuschneiden? Oder ist die Größe egal?

  • Hi,

    Ich habe beide Dateien von der Größe her angepasst und nur auf das Logo reduziert, s. Anhang, und binär verglichen.

    Die beiden Dateien sind identisch!

    56x54_1.bmp


    Mit dem SnippingTool werde ich nie exakt die Größe des ersten Bildes bekommen. Oder soll ich das dann zuschneiden? Oder ist die Größe egal?

    Fall sich jetzt noch jemand fragt, warum ich vor mittlerweile 13 Jahren PushTheButton entwickelt hatte....damit ist alles komplett abgedeckt! Bild Pixelgenau aufnehmen und direkt suchen lassen! Somit entfällt auch sämtliches fehlerbehaftete Gedöns mit Bildumwandeln und dessen Folgen, siehe diesen und gefühlt Millionen andere Threads zum Thema "Problem mit Imagesearch".

    Natürlich ist die Größe des Bildes NICHT egal!

    Eine "Bildersuche" auf dem Desktop ist absolut simpel: Es wird ein Screenshot vom Desktop erstellt, ergo stehen im Speicher entsprechend der Auflösung eine Handvoll Bytes, idR. ARGB 32 Bit (je 8 Bit Alphakanal, Rot,Grün,Blau).

    In diesem Speicherbreich werden nun die Bytes der ersten Pixelzeile des Suchbildes gesucht, in AutoIt ist das ein einfacher Stringvergleich, machbar und extrem schnell problemlos per StringInstr().

    Beim Fund der Position der ersten Zeile wird nun an Speicherposition "Fundstelle plus Bildbreite" (das ist die "Pixel"-Position direkt "unter" dem ersten gefundenen Pixel) die zweite Zeile des Suchbildes verglichen, usw usf.

    Da hier Byteweise verglichen wird, kann man auch den "Toleranz"-Parameter einsetzen, Bei einer Toleranz von bspw. 20 wird, falls im Rot-Kanal das Byte den Wert 147 hat, alles zwischen 127 und 167 gefunden, Analog also auch bei den anderen Farbkanälen.

    Eine Suche "Pixel auf dem Desktop finden" ist also nur Stringvergleichen. Und wenn da nur ein einziges Byte nicht übereinstimmt, wird das "Bild" nicht gefunden...


    stefan10 , Mach mal bitte einen Screenshot deines Desktops per ALT+DRUCK zum Zeitpunkt, wenn du suchen möchtest. Öffne dein Bildbearbeitungsprogramm, füge den Screenshot per CTRL+V ein .

    Ggf "übermale" alle persönlichen Daten. Speichere dieses Bild des Desktops als Bitmap BMP. Du kannst es hier einstellen oder mir als PM schicken.

    Wichtig ist, dass du den Screenshot zum Zeitpunkt der gewünschten Suche machst, nicht nachdem du ggf noch mit der Maus/Tastatur Fenster verschoben/geöffnet/geschlossen hast!


    -

  • Hallo Andy,


    ich habe jetzt per "Druck"-Taste den kompletten Desktop (alle 3Monitore) aufgenommen wollte sie anhängen. Leider hat sie über 78MB wegen dem 4k. :/

    Gibt es hier eine andere Möglichkeit, die Datei hochzuladen?



    vG

    Stefan

  • Hi Andy,


    ich habe mir dein "PushtoButton" angesehen.

    Der Link zu den Demoprogrammen im Artikel funktioniert nicht. Daher kann ich nicht testen, ob ein Bild gefunden wird.

    Die Lupe greift ausschließlich auf den Hauptbildschirm (4k) zu, die anderen Monitore stehen nicht zur Auswahl. Da wäre für mich erst einmal o.k.

    Wenn ich mit dem Cursor auf die rechte untere Ecke des 4k gehe, stehen auf deiner Lupe die Koordinaten x:2194 und y:1276 . Das hängt vermutlich mit meiner Einstellung in W10 / Bildschirm / Skalierung /175% zusammen. In der Lupe wird dann auch ein Bild nahe der Mitte des Hauptbildschirms dargestellt. Läßt sich das irgendwo mit dem Faktor 1,75 korregieren/einstellen? Ich kann in der Lupe somit nur den 1.Quadranten des Bildschirms sehen.

  • Hi,

    ich muss mir das Programm von 2009 nochmal ansehen :rofl:

    Läßt sich das irgendwo mit dem Faktor 1,75 korregieren/einstellen?

    //EDIT

    Schalte zunächst mal bitte im Traymenü von PushThebutton den Moviemodus aus und den Mausversatz auf "keiner".

    Dann bitte Rechtsklick auf leeren Bereich auf dem Desktop.

    Im Menü "Anzeigeeinstellungen" wählen.

    Dort bei der Skalierung auf "Erweiterte Skalierungseinstellungen" klicken

    Im Fenster unten deine Benutzerdefinierte Skalierung, bei dir also 175, eingeben

    Bei dem Hinweis zur Verwendung der benutzerdefinierten Skalierung erst nach der Abmeldung auf "Jetzt abmelden" klicken.

    Nach der Abmeldung die Programme neu starten, PushTheButton zeigt nun, wie auch alle AutoItprogramme, korrekte Mauskoordinaten an!


    //EDIT2

    Habe eben gerade festgestellt, dass die Skalierung innerhalb des PushTheButton-Fensters nach der Benutzerdefinierten Skalierung nicht korrekt ist, d.h. die Buttons "Anleitung" und "gespeicherten Button finden" werden nach unten versetzt und verschwinden ggf in der Statuszeile.

    Die gespeicherten Buttons werden aber gefunden.

  • Das Traymenü befindet sich rechts in der Titelleiste nach Rechtsklick auf das AutoItlogo.

    Die Dll braucht man nicht, sie spart lediglich beim Suchen einige Millisekunden wenn einer der drei entsprechenden Suchmodi (automatisiert) vom Programm ausgewählt ist.

    Man kann die DLL weglassen.

    Die *.ptb-Dateien werden bei jedem Abspeichern des Suchbildes neu erstellt.

    Die ptb.ini enthält alle Einstellungen die über das Traymenü erreichbar sind und auch die Sprachversionen der Hilfeanzeige/Hilfefenster.


    Das ändert aber nichts daran, dass ich das eigentliche "Problem", dein Desktopbild, nicht analysieren kann.

    Du könntest einen Ausschnitt des Desktops in der Größe 1920x1080 ausschneiden und anhängen. Das kann ich dann in "Orginalgröße" auf dem Laptop anzeigen und darauf suchen.

  • Das AutoITlogo ist in dem Fenster der Lupe links. Mit einem Rechtsklick bekomme ich Verschieben, Größe ändern , Minimieren und Schließen des Fensters angezeigt. Keine Option den Moviemodus oder den Mausversatz umzustellen.

    Ich habe aus dem 78MB-Datei den Ausschnitt erstellt. Der 1920x1080 hat immer noch über 8MB. Daher einen Ausschnitt mit 1300x800. Wenn du Gimp hast, könnte ich Dir auch den Original Desktop schicken. Das wären als *.xcf knapp 3MB.