P.S.:
deine Deklaration hat vollkommen falsche Parameter, ähnlich den Aufrufen von AutoID,
die wohl Anlass für Auslagerung der Codeteile von AutoHotKey in eine
DLL waren !
zB: "resultPosition" gibt es in der
DLL gar nicht, wird bei 1(Center) durch AutoID über die Rückgaben berechnet (Pos + Größe /2)
dafür sind in der o.g. Deklaration keine Eingrenzungen des Bereichs möglich, was die
DLL aber kann und für Performance auch wichtig ist !
Das hat AutoID nun wieder über eine 2. Funktion ImageSearchArea gelöst:
Code:
===============================================================================
Einbindung AutoID (.au3)
===============================================================================
;===============================================================================
;
; Description: Find the position of an image on the desktop
; Syntax: _ImageSearchArea, _ImageSearch
; Parameter(s):
; $findImage - the image to locate on the desktop
; $tolerance - 0 for no tolerance (0-255). Needed when colors of
; image differ from desktop. e.g GIF
; $resultPosition - Set where the returned x,y location of the image is.
; 1 for centre of image, 0 for top left of image
; $x $y - Return the x and y location of the image
;
; Return Value(s): On Success - Returns 1
; On Failure - Returns 0
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
; a desktop region to search
;
;===============================================================================
Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
EndFunc
Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
$result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)
; If error exit
if $result[0]="0" then return 0
; Otherwise get the x,y location of the match and the size of the image to
; compute the centre of search
$array = StringSplit($result[0],"|")
$x=Int(Number($array[2]))
$y=Int(Number($array[3]))
if $resultPosition=1 then
$x=$x + Int(Number($array[4])/2)
$y=$y + Int(Number($array[5])/2)
endif
return 1
EndFunc
Wichtig ist der
DLL-Aufruf:
DllCall("ImageSearchDLL.dll","str","ImageSearch"," int",$x1,"int",$y1,"int",$right,"int",$bottom,"str ",$findImage)
Dies entspricht meiner Deklaration in Delphi - Rückgabe ist ein String mit verketteten Werten (siehe meinen Delphi-Source)