ImageSearch

Sucht innerhalb eines bestimmten Bildschirmbereichs nach einem Bild.

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

Parameter

AusgabeVarX, AusgabeVarY

Namen der Variablen, in denen die X- und Y-Koordinate des oberen linken Pixels, auf dem das Bild gefunden wurde, 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). Folgende Dateitypen sind auch 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 Microsofts kostenlose GDIplus-DLL-Datei 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 auf www.microsoft.com mit Suchbegriffen wie: gdi redistributable

Optionen: Direkt vor dem Dateinamen können null oder mehr der folgenden Zeichenketten angegeben werden. Die Optionen müssen jeweils mit einem Leer- oder Tabulatorzeichen voneinander getrennt werden. Zum Beispiel: *2 *w100 *h-1 C:\Hauptlogo.bmp.

*IconN: Um anstelle der ersten Symbolgruppe eine andere in der Datei zu nutzen, geben Sie *Icon an, gefolgt von der Nummer der Gruppe. *Icon2 beispielsweise lädt das Standardsymbol von der zweiten Symbolgruppe.

*n (Variation): Geben Sie für n eine Zahl im Bereich von 0 bis 255 an, um die erlaubte Anzahl von Variationsnuancen in beiden Richtungen für die Intensität der Rot-, Grün- und Blaukomponenten der Farbe jedes Pixels festzulegen. 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 im Bild befindliche Farbe 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). Handelt es sich um GIF-Bilder, dürfte *TransWhite am ehesten funktionieren. Handelt es sich um PNG- oder TIF-Bilder, ist *TransBlack möglicherweise die beste Wahl. Ansonsten können Sie für N einen beliebigen Farbnamen oder RGB-Wert angeben (ziehen Sie die Farbentabelle zu Rate oder verwenden Sie PixelGetColor in dessen 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 mit mehreren Symbolen bestückten ICO-Datei geladen werden soll). Lässt man beide Optionen weg, 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 Abmessungen und eine positive Zahl für die jeweils andere an, um das Bild unter Beibehaltung des Seitenverhältnisses zu verkleinern oder zu vergrößern. *w200 *h-1 beispielsweise macht das Bild 200 Pixel breit und bewirkt, dass 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 beim Suchen ein Problem auftrat. 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 zum Beispiel 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 ganze Bild, sondern nur einen kleinen Ausschnitt des Bildes zu suchen. Diese Vorgehensweise kann die Zuverlässigkeit in Situationen verbessern, 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 ein Screenshot in die Zwischenablage zu platzieren.
  2. Öffnen Sie ein Bildbearbeitungsprogramm wie Paint.
  3. Fügen Sie den Inhalt der Zwischenablage ein (in diesem Fall das Screenshot).
  4. Markieren Sie einen Bereich, der nicht variiert und nur einmal im Bild vorkommt.
  5. Kopieren und fügen Sie diesen Bereich in ein neues Bild-Dokument 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; das heißt, dass es nicht möglich ist, einen Bereich in einem Fenster zu durchsuchen, das hinter einem anderen Fenster liegt. Bilder unterhalb des Mauszeigers werden in der Regel erkannt. Videospielmauszeiger hingegen verdecken meistens die Sicht auf darunterliegende Bilder.

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 jeder beliebigen Farbe auf dem Bildschirm übereinstimmt. Daher spielt die Farbe hinter dem Symbol keine Rolle.

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

Das Suchverhalten kann je nach Farbtiefe der Grafikkarte variieren (besonders, wenn es sich um GIF- und JPG-Bilder handelt). Ein Skript sollte daher, wenn es unter mehreren Farbtiefen ausgeführt werden soll, zuvor mit jeder Tiefeneinstellung 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, nutzen Sie die Variationsnuancen-Option (*n) oder deaktivieren Sie vorübergehend die Fenstertransparenz via WinSet, Transparent, Off.

PixelSearch, PixelGetColor, CoordMode, MouseGetPos

Beispiele

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

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

Sucht innerhalb eines Bereichs auf dem Bildschirm nach einem Bild und speichert in XPos und YPos die X- und Y-Koordinate des oberen linken Pixels des gefundenen Bildes, 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 nicht auf dem Bildschirm gefunden werden.
else
    MsgBox Das Symbol wurde bei %XPos%x%YPos% gefunden.