ImageSearch

Sucht nach einem Bild in einem bestimmten Bildschirmbereich.

ImageSearch, AusgabeVarX, AusgabeVarY, X1, Y1, X2, Y2, BildDatei

Parameter

AusgabeVarX, AusgabeVarY

Namen der Ausgabevariablen, in denen die X- und Y-Koordinate des oberen linken Pixels des gefundenen Bildes gespeichert werden sollen (wenn das Bild nicht gefunden wird, werden diese Variablen leer gemacht). Standardmäßig sind Koordinaten relativ zum aktiven Fenster, was aber mit CoordMode geändert werden kann.

Einer oder beide dieser Parameter können leer gelassen werden - in diesem Fall kann mit ErrorLevel (siehe unten) festgestellt werden, ob eine Übereinstimmung gefunden wurde.

X1, Y1

Die X- und Y-Koordinate der oberen linken Ecke des rechteckigen Suchbereichs (können Ausdrücke sein). Standardmäßig sind Koordinaten relativ zum aktiven Fenster, was aber mit CoordMode geändert werden kann.

X2, Y2

Die X- und Y-Koordinate der unteren rechten Ecke des rechteckigen Suchbereichs (können Ausdrücke sein). Standardmäßig sind Koordinaten relativ zum aktiven Fenster, was aber mit CoordMode geändert werden kann.

BildDatei

Der Dateiname des Bildes. Wenn kein absoluter Pfad angegeben ist, wird das Bild im A_WorkingDir-Verzeichnis vermutet. Alle Betriebssysteme unterstützen GIF-, JPG-, BMP-, ICO-, CUR- und ANI-Bilder (BMP-Bilder müssen 16-Bit oder höher sein). Die folgenden Dateitypen sind ebenfalls für Symbole geeignet: EXE, DLL, CPL, SCR und andere Typen, die Symbolressourcen enthalten. In Windows XP oder höher werden zusätzliche Bildformate wie PNG, TIF, Exif, WMF und EMF unterstützt. Um Betriebssysteme älter als XP zu unterstützen, kopieren Sie die GDIPlus.dll von Microsoft in den Ordner von AutoHotkey.exe (im Falle eines kompilierten Skripts muss die DLL in den Ordner des Skripts kopiert werden). Die DLL finden Sie unter www.microsoft.com mit Suchbegriffen wie: gdi redistributable

Optionen: Direkt vor dem Dateinamen können beliebig viele der folgenden Optionen angegeben werden. Trennen Sie alle Optionen jeweils durch ein Leer- oder Tabulatorzeichen. Zum Beispiel: *2 *w100 *h-1 C:\Hauptlogo.bmp.

*IconN: Um eine andere Symbolgruppe als die erste in der Datei zu verwenden, geben Sie *Icon gefolgt von der Nummer der Gruppe an. Zum Beispiel bewirkt *Icon2, dass das Standardsymbol aus der zweiten Symbolgruppe geladen wird.

*n (Variation): Geben Sie für n eine Zahl im Bereich von 0 bis 255 an, um die erlaubte Anzahl von Variationsnuancen in beide Richtungen für die Intensität der Rot-, Grün- und Blauanteile der Farbe jedes Pixels zu bestimmen. Wenn z.B. *2 angegeben ist und die Farbe eines Pixels 0x444444 ist, wird jede Farbe von 0x424242 bis 0x464646 als Übereinstimmung angesehen. Dieser Parameter ist hilfreich, wenn die Farbgebung des Bildes leicht variiert oder wenn BildDatei ein Format wie GIF oder JPG verwendet, das nicht genau mit einem Bild auf dem Bildschirm übereinstimmt. Wenn Sie 255 Variationsnuancen angeben, werden alle Farben übereinstimmen. Standardmäßig gelten 0 Variationsnuancen.

*TransN: Geben Sie eine Farbe im Bild an, die mit jeder Farbe auf dem Bildschirm übereinstimmen soll. Diese Option wird hauptsächlich verwendet, um PNG-, GIF- und TIF-Bilder zu finden, die einige transparente Bereiche aufweisen (Symbole benötigen diese Option nicht, weil ihre Transparenz automatisch unterstützt wird). Wenn es sich um GIF-Bilder handelt, sollte *TransWhite am besten funktionieren. Wenn es sich um PNG- oder TIF-Bilder handelt, könnte *TransBlack die beste Wahl sein. Andernfalls können Sie für N einen beliebigen Farbnamen oder RGB-Wert angeben (schauen Sie in der Farbentabelle nach oder verwenden Sie PixelGetColor im RGB-Modus). Beispiele: *TransBlack, *TransFFFFAA, *Trans0xFFFFAA.

*wn und *hn: Breite und Höhe, auf die das Bild skaliert werden soll (diese Breite und Höhe bestimmen auch, welches Symbol aus einer ICO-Datei mit mehreren Symbolen geladen wird). Wenn beide Optionen weggelassen werden, werden Symbole, die aus einer ICO-, DLL- oder EXE-Datei geladen wurden, auf die Kleine-Symbole-Standardgröße des Systems skaliert, was in der Regel 16x16 ist (ihre Originalgröße kann mit *w0 *h0 erzwungen werden). Bilder, die keine Symbole sind, werden immer in ihrer Originalgröße geladen. Geben Sie -1 für eine der Dimensionen und eine positive Zahl für die jeweils andere an, um das Bild unter Beibehaltung des Seitenverhältnisses zu verkleinern oder zu vergrößern. Zum Beispiel bewirkt *w200 *h-1, dass das Bild 200 Pixel breit gemacht und dessen Höhe automatisch gesetzt wird.

[v1.1.23+]: Anstelle eines Dateinamens kann auch ein Bitmap- oder Symbol-Handle verwendet werden. Zum Beispiel HBITMAP:*%handle%.

Fehlerbehandlung

[v1.1.04+]: Dieser Befehl ist in der Lage, eine Ausnahme auszulösen, wenn während der Suche ein Problem auftritt. Weitere Informationen finden Sie unter Laufzeitfehler.

ErrorLevel wird auf 0 gesetzt, wenn das Bild im angegebenen Bereich gefunden wurde, auf 1, wenn es nicht gefunden wurde, oder auf 2, wenn der Befehl die Suche aufgrund eines Problems nicht durchführen konnte (z.B. wenn die Bilddatei nicht geöffnet werden kann oder die Optionsangabe fehlerhaft ist).

Bemerkungen

ImageSearch kann verwendet werden, um grafische Objekte auf dem Bildschirm zu finden, die keinen Text haben oder deren Text nicht ohne weiteres abgerufen werden kann. ImageSearch ist z.B. nützlich, um die Position von Bild-Schaltflächen, Symbolen, Webseiten-Links oder Videospielobjekten zu ermitteln. Einmal lokalisiert, können diese Objekte via Click angeklickt werden.

Manchmal ist es strategisch sinnvoll, nicht das gesamte Bild, sondern nur einen kleinen Ausschnitt des Bildes zu suchen. Dies kann die Zuverlässigkeit in Fällen erhöhen, wo das Bild als Ganzes variiert, aber bestimmte Teile innerhalb des Bildes immer gleich sind. Ein Teil des Bildes kann zum Beispiel wie folgt ausgeschnitten werden:

  1. Drücken Sie Alt+Druck, während das Bild im aktiven Fenster sichtbar ist, um einen Screenshot in die Zwischenablage zu kopieren.
  2. Öffnen Sie ein Bildbearbeitungsprogramm wie z.B. Paint.
  3. Fügen Sie den Inhalt der Zwischenablage (den Screenshot) ein.
  4. Markieren Sie einen Bereich, der nicht variiert und nur einmal im Bild vorkommt.
  5. Kopieren Sie den Bereich und fügen Sie ihn in ein neues Bilddokument ein.
  6. Speichern Sie es als kleine Datei, um es mit ImageSearch zu verwenden.

Das Bild auf dem Bildschirm kann nur gefunden werden, wenn es genauso groß wie das im BildDatei-Parameter definierte Bild ist.

Der Suchbereich muss sichtbar sein, d.h. es ist nicht möglich, einen Bereich in einem Fenster zu durchsuchen, das hinter einem anderen Fenster verborgen ist. Dagegen werden Bilder unter dem Mauszeiger in der Regel erkannt. Eine Ausnahme bilden die Mauszeiger von Videospielen, die in den meisten Fällen alle darunter liegenden Bilder verdecken.

Da die Suche zeilenweise von oben nach unten erfolgt, wird bei mehreren Übereinstimmungen der oberste Fund bevorzugt.

Symbole, die eine transparente Farbe enthalten, sorgen dafür, dass diese Farbe automatisch mit einer beliebigen Farbe auf dem Bildschirm übereinstimmt. Daher spielt die Farbe hinter dem Symbol keine Rolle.

ImageSearch unterstützt Bildschirme mit einer Farbtiefe von 8 Bit (256 Farben) oder höher.

Das Suchverhalten kann je nach Farbtiefe der Grafikkarte variieren (insbesondere bei GIF- und JPG-Bildern). Folglich sollte ein Skript, das in mehreren Farbtiefen ausgeführt werden soll, zunächst mit jeder Farbtiefe getestet werden. Mithilfe der Variationsnuancen-Option (*n) können Sie das Verhalten über mehrere Farbtiefen hinweg konsistent machen.

Wenn das Bild auf dem Bildschirm transparent ist, wird ImageSearch es wahrscheinlich nicht finden. Um das zu umgehen, verwenden Sie die Variationsnuancen-Option (*n) oder deaktivieren Sie vorübergehend die Fenstertransparenz via WinSet, Transparent, Off.

PixelSearch, PixelGetColor, CoordMode, MouseGetPos

Beispiele

Sucht nach einem Bild in einem Bereich des aktiven Fensters und speichert die X- und Y-Koordinate des oberen linken Pixels des gefundenen Bildes in XPos und YPos.

ImageSearch, XPos, YPos, 40, 40, 300, 300, C:\Meine Bilder\test.bmp

Sucht nach einem Bild in einem Bereich des Bildschirms und speichert die X- und Y-Koordinate des oberen linken Pixels des gefundenen Bildes in XPos und YPos, inklusive erweiterte Fehlerbehandlung.

CoordMode Pixel  ; Koordinaten relativ zum Bildschirm statt zum aktiven Fenster machen.
ImageSearch, XPos, YPos, 0, 0, A_ScreenWidth, A_ScreenHeight, *Icon3 %A_ProgramFiles%\BeliebigeApp\BeliebigeApp.exe
if (ErrorLevel = 2)
    MsgBox Die Suche konnte nicht durchgeführt werden.
else if (ErrorLevel = 1)
    MsgBox Symbol konnte auf dem Bildschirm nicht gefunden werden.
else
    MsgBox Das Symbol wurde auf %XPos%x%YPos% gefunden.