WaitForImageSearch "extern" aufrufen erfolglos

  • Hallo,
    Die überschrift ist sehr dürftig, deshalb erklär t ich kurz mal:
    Ich habe eine au3 projekt mit einer _WaitForImageSearch funktion.

    Mit delphi habe ich mir eine GUI gebastelt und möchte dort auch bleiben, da ich hier mehr möglichkeiten habe die daten für autoit vorzubereiten. Mit dieser GUI ehabe kann ich ein paar daten erfassen, diese werden in eine ini datei gespeichert. Wenn man in der gui auf "starten" klickt, dann wird die autoit exe gestartet, welche wiedereum auf die ini zugreift und die daten verarbeitet.

    Wenn ich die autoit exe starte läufts einwandfrei.
    Wenn ich allerdings mit meiner delphi gui die autoit exe starte läuft das script, aber bei _WaitForImageSearch rasselt er für 2 sekunden ($waitsecs) und sagt mir dann mittels msgbox dass kein bild gefunden worden ist, obwohl es offensichtlich da ist. Ein öffnen der auutoit datei mittels call in einer cmd datei klappt auch tadellos.
    In delphi verwende ich den befehl ahellexecute mit der shellapi.


    Kann mir hier jmd weiterhelfen??

  • Ich bin nun selbst auf die Lösung des Problems gekommen!!

    Ich kläre nochmal auf:
    Mit dem Programm "Project1+Unterordner.exe" (erstellt mit Delphi) soll eine Aut-It exe namens "test.exe" geöffnet werden, die sich im Unterordner "test\test\" befindet.
    \Project1+Unterordner.exe
    \test\test\test.exe

    Project1+Unterordner.exe: Öffnet lediglich die Auto-It exe Datei.
    Delphi-Code: Project1+Unterordner.exe

    test.exe: Prüft jede Sekunde ob das Icon "Computer" (Windows 8) sich auf dem Screen befindet. Das Bild welches zur Identifikation dient ist die "pc.png"
    Auto-It-Code: test.exe

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #include <ImageSearch.au3>

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

    ;~ HotKeySet("{NUMPAD2}", "_task0")

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

    Global $x1 = 0
    Global $y1 = 0

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

    While 1
    Sleep(1000)
    _task0()
    WEnd

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

    Func _task0()
    while 1
    if _ImageSearch("pc.png", 1, $x1, $y1, 0) = 1 Then
    MsgBox(4096, "", "Computer (Arbeitsplatz) gefunden!")
    EndIf
    WEnd
    EndFunc

    [/autoit]


    >>> Anbei liegt das Projekt mit den jew. Dateien ab.

    Wenn ihr nun das Projekt welches eig. doch recht simpel strukturiert ist ausprobiert, werdet ihr folgendes feststellen können:
    Doppelklick auf "Project1+Unterordner.exe":
    >Click auf Button
    >Auto-It "test.exe" wird gestartet
    >Aber es erscheint kein MsgBox(4096, "", "Computer (Arbeitsplatz) gefunden!") obwohl das "Computer" Icon vorhanden ist

    Doppelklick auf "\test\test\test.exe"
    >Auto-It "test.exe" wird gestartet
    >Es erscheint die MsgBox(4096, "", "Computer (Arbeitsplatz) gefunden!") sofern das "Computer" Icon vorhanden ist

    Mir ist aufgefallen, dass das Problem hier an der Pfadangabe der Bilddatei liegt.
    Man hätte annehmen können, dass Bilddatei "pc.png" sich abhängig von der Auto-It exe bezieht, demnach: im selben Ordner.
    Dies stimmt auch, sofern man die "test.exe" startet.
    Startet man allerdings mit "Project1+Unterordner.exe" die Auto-It exe funktioniert das Script nicht... wieso... naja, verschiebt man die "pc.png" in das Verzeichnis in der auch "Project1+Unterordner.exe" liegt, dann läuft es.
    Die Bilddateiangabe bezieht sich nun immer auf die Ursprungsexe?! Ein simples "@ScriptDir &" als weitere Parameterangaber zur Bilddatei hilft hier, da hiermit der Pfad der bilddatei nun eindeutig identifiziert wird.

    Das Problem lässt sich hiermit beheben:

    [autoit]

    _WaitForImageSearch("pc.png", 1, $x1, $y1, 0)

    [/autoit]

    muss wie folgt geändert werden:

    [autoit]

    _WaitForImageSearch(@ScriptDir & "pc.png", 1, $x1, $y1, 0)

    [/autoit]

    Ich finde das wirklich nice 2 know, da dieses Example ohne "@ScriptDir &" viel zu oft im Internet kursiert...
    (Ganz schön viel Text für soetwas simples, aber ich hoffe ich kann hiermit viele andere User ihre ratlosigkeit klären :D )