Variable von AutoIt zu C#/C++ übergeben?

07/07/2014 04:06 o.rly#1
Hallo zusammen,

ich wollte nachfragen, ob es möglich ist, variablen von AutoIt in irgendeiner Weise an ein anderes Programm zu übergeben?

Bsp.: Ich mache ein AutoIt Programm, das mit ImageSearch herausfindet, ob ein gewisses Bild auf dem Bildschirm vorhanden ist oder nicht.
Wenn das der fall ist dann ist die Variable $res1 = 1.
Falls nicht ist sie = 0.

Und jetzt würde ich gerne diese Information in einem C# Programm weiterverwenden.

Ist das über eine .ini möglich?


Ich freue mich auf eure Antworten
07/07/2014 07:02 KDeluxe#2
Verwende die ImageSearch .dll doch gleich in deinem C++/C# Coding, wo soll das Problem sein? Die UDF von ImageSearch in C++/C# zu realisieren ist in wenigen Minuten getan. Abgesehen davon ist es natürlich möglich, ich rate allerdings stark von der Benutzung einer .ini oder irgendeine andere Datei dafür zu verwenden ab. Grund dafür ist, dass du bei der Verwendung mit Dateien einen langsamen Zugriff auf deiner Festplatte hast, das bremst deine Anwendungen aus. Zwei einfache Alternativen wären das Lesen des Speichers oder die Speicherung der Ergebnisse in ein GUI Element, dieses kann deine "Gegenanwendung" dann auslesen. Ich empfehle dennoch die Umsetzung der ImageSearch UDF in C++/C# und hoffe, dass mit C++ nicht C++/CLI gemeint ist.
07/07/2014 09:01 alpines#3
KDeluxe, warum so kompliziert mit .inis?
Natürlich kann man das per DLLImport machen, aber wenn der das in Autoit machen möchte geht das doch auch.
Er kann entweder den Return per StdOutRead in C# machen.
Die Parameter werden halt vom AutoIt-Script geparsed und "returnt" wird das ganze mit ConsoleWrite.
Aber da das Ergebnis nur zwischen 1 und 0 ist, würde ich sogar gleich den Exit Code als return nehmen.
In etwa sowas
Code:
#include <ImageSearch.au3>
Exit _ImageSearch($CMDLine[1], .....)
07/07/2014 21:13 KDeluxe#4
Ich rate von der Verwendung von Dateien ab. Wieso sollte man den ein separates Programm verwenden, wenn es sich mit extrem wenig Aufwand vermeiden lässt? Es ergeben sich nur Vorteile die paar Zeilen AutoIt Coding in C# zu realisieren.
07/07/2014 21:31 alpines#5
Selbstverständlich ist das besser und der Meinung bin ich auch, aber wenn der Autor unbedingt darauf besteht es in AutoIt machen zu müssen, dann bietet sich die Exit-Variante oder StdOutRead(ConsoleWrite) besser an als z.B. Ini's, oder GUICtrls.
07/09/2014 23:55 FacePalmMan#6
Tcp tut es auch.
07/14/2014 09:42 o.rly#7
Mein Problem ist halt, dass ich noch nicht so gut programmieren kann und deshalb war die frage, ob es irgendwie möglich ist die variablen zu übergeben, da das für mich am einfachsten und am besten zu verstehen wäre.
Den ImageSearch Code in C# nachzuschreiben kann ich nicht.

Trotzdem euch allen Dankesehr^^

btw. was meinst du mit Tcp?
07/14/2014 14:05 alpines#8
Was er mit Tcp meint ist, in C# einen TCPServer zu erstellen und von AutoIt auf darauf zu verbinden, das ist aber meiner Meinung nach vieel zu umständlich.

Die einfachste Methode wäre wohl per <DllImport ...> oder per Exit-Code wie ich das beschrieben hab.
07/18/2014 01:27 o.rly#9
Also danke an alle!

Falls es Programmier-Anfänger gibt, die sich das selbe gefragt haben wie ich:

(Programm.au3)
Code:
Exit 1
und in C++ das dann abgefragt mit:

main.cpp
Code:
int a = system("Programm.exe");