ImageSearch Problem

  • Hallo.

    Ich habe wollte ein wenig mit ImageSearch experimentieren, aber bekomme immer eine Fehlermeldung.
    Googel ergab, dass es evtl. an meinem 64bit Windows 7 liegt..

    Mein Script:

    Spoiler anzeigen
    [autoit]

    #include <ImageSearch.au3>
    #RequireAdmin

    [/autoit] [autoit][/autoit] [autoit]

    $x = 0
    $y = 0

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{a}", "test")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(1)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func test()
    While 1
    $papierkorb= _ImageSearch("papierkorb.bmp",1,$x,$y,0) ;das bild in bmp, 1 für die mitte, letzter Parameter ist die Toleranz
    If $papierkorb[0] = 1 Then
    MsgBox(0,"","Gefunden")
    If @error Then
    MsgBox(0,"","Nicht gefunden")
    EndIf
    EndIf
    WEnd
    EndFunc

    [/autoit]

    Im Ordner mit dem Script ist drin:
    - ImageSearchDLL.dll
    - ImageSearch.au3

    Spoiler anzeigen
    [autoit]

    #include-once
    #RequireAdmin
    ; ------------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.0
    ; Language: English
    ; Description: Functions that assist with Image Search
    ; Require that the ImageSearchDLL.dll be loadable
    ;
    ; ------------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Wait for a specified number of seconds for an image to appear
    ;
    ; Syntax: _WaitForImageSearch, _WaitForImagesSearch
    ; Parameter(s):
    ; $waitSecs - seconds to try and find the image
    ; $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
    ;
    ;
    ;===============================================================================
    Func _WaitForImageSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
    $waitSecs = $waitSecs * 1000
    $startTime=TimerInit()
    While TimerDiff($startTime) < $waitSecs
    sleep(100)
    $result=_ImageSearch($findImage,$resultPosition,$x, $y,$tolerance)
    if $result > 0 Then
    return 1
    EndIf
    WEnd
    return 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ;
    ; Description: Wait for a specified number of seconds for any of a set of
    ; images to appear
    ;
    ; Syntax: _WaitForImagesSearch
    ; Parameter(s):
    ; $waitSecs - seconds to try and find the image
    ; $findImage - the ARRAY of images to locate on the desktop
    ; - ARRAY[0] is set to the number of images to loop through
    ; ARRAY[1] is the first image
    ; $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 the index of the successful find
    ; On Failure - Returns 0
    ;
    ;
    ;===============================================================================
    Func _WaitForImagesSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
    $waitSecs = $waitSecs * 1000
    $startTime=TimerInit()
    While TimerDiff($startTime) < $waitSecs
    for $i = 1 to $findImage[0]
    sleep(100)
    $result=_ImageSearch($findImage[$i],$resultPosition,$x, $y,$tolerance)
    if $result > 0 Then
    return $i
    EndIf
    Next
    WEnd
    return 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    - Das Bild vom Papierkorb.

    Aber immer wenn ich die Fuc starte bekomme ich folgende Meldung:

    ---------------------------
    AutoIt Error
    ---------------------------
    Line 41 (File "C:\Users\User\Desktop\ImageSearch.au3"):

    if $result[0]="0" then return 0
    if $result^ ERROR

    Error: Subscript used with non-Array variable.
    ---------------------------
    OK
    ---------------------------

    Hat jemand Rat?
    Liebe Grüße, geradeStudent

    Einmal editiert, zuletzt von geradeStudent (14. Januar 2012 um 11:46)

  • Ich hab es so versucht, aber irgendwie scheine ich etwas zu vergessen.
    Bei mir hat es im Script die Farbe nicht zu lila gewechselt und auch die Fehlermeldung nicht behoben.

    Muss ich evtl. noch irgendwas installieren, um die Funktion nutzen zu können?

  • Die ImageSearchDLL.dll muss in den Ordner C:\Windows\SysWOW64 abgelegt werden.
    Außerdem musst du, wenn du das Script aus dem Ordner ausführst, es per Rechtsklick -> Run Script (x86) starten.


  • Die ImageSearchDLL.dll muss in den Ordner C:\Windows\SysWOW64 abgelegt werden.
    Außerdem musst du, wenn du das Script aus dem Ordner ausführst, es per Rechtsklick -> Run Script (x86) starten.

    Danke :3