Beiträge von Yjuq

    [...] was ich nicht wie dann die übersetzung funktioniert [...]


    [...] kann mir jemand helfen

    Am besten schaust du dir erst einmal wie unsere deutsche Sprache funktioniert. Das hilft nicht nur deinem Übersetzer, sondern hilft dir auch gleichzeitig ordentliche Sätze in einem deutschen Forum zu verfassen. Die einfachste Variante wäre erst einmal ein digitales Wörterbuch zu erstellen. Irgend etwas um Vokabular nachzuschlagen. Darauf lässt sich dann die Grammatik aufbauen.


    Welche Funktionalitäten soll dieser "Übersetzer" denn haben?


    nur weiss ich nicht wo bekomme ich wörterbücher her

    Tja, das ist etwas problematisch. Ich hab mal ein wenig im Internet gesucht. Es gibt ein paar zu finden, aber nicht ansatzweise vollständig. Und die großen Firmen (z.B. Langenscheidt, Google, DeepL) bieten keine Downloads ihrer Datenbänke an. Entweder du erstellst ein eigenes oder bindest für den Anfang erst einmal eine Webseite ein, um neue Wörter per HTTP Request abzufragen und dann offline abzuspeichern.

    Oder ich sage einfach, dass zusätzlich zu einer Include-Anweisung auch noch die Zeile #AutoIt3Wrapper_Run_Before=""%autoitdir%\AutoIt3.exe" "%in%" -Something" eingefügt werden muss, wenn die Leutchens zu faul sind, das Script vor dem Compilen einmal mit F5 zu starten.

    Naja, den Tipp wollte ich dir auch erst geben. Aber das hätte deine Frage ja nicht wirklich beantwortet. :)

    Du kannst für die SciTE eine eigene implementation für F7 schreiben. Basierend darauf kannst du eine Start-Skript generieren welche diese Anweisungen beinhaltet und deine Hauptdatei einbindet. Musst halt nur sämtliche include files für diese Anweisungen parsen und in dein Start-Skript schmeißen.


    Du kannst diese Implementation entweder in Lua schreiben oder vielleicht durch eine Mischung von AutoIt und der SciTE Config Files herbeiführen. Vielleicht auch Lua + Autoit. Musst dich wohl durch die SciTE Docu durchwühlen.

    Das Gegenstück zu AutoIt's ObjGet() in Lua würde mir schon reichen

    Das würde nicht helfen da Lua COM von sich aus nativ nicht unterstützt. :P

    Da müsstest du schon viel Aufwand betreiben um COM in Lua lauffähig zu bekommen. Da ist es einfacher eine Wrapper Funktion in AutoIt zu deklaieren und diese per Lua aufzurufen um Objekte zu manipulieren. ^^


    Aber ich kann es mal probieren ob ich das rohe COM Objekt nicht einfach in Lua als Userdata zur verfügung stelle und dann schaue was passiert. Vielleicht überrascht mich Lua ja und es kann die COM Objekte doch direkt handeln. Das wäre ne ziemliche Überraschung.


    Über die Jahre habe ich einige Versuche in diese Richtung u.a. mittels Multithreading oder Injection, etc. mitbekommen

    Jup, ebenfalls. Multithreading ist zwar möglich aber aufwendig. Du kannst nicht einfach auf Variablen und Funktionen zugreifen die AutoIt zur Verfügung stellt. Da brauchst du schon eigene Mechanismen um alles Thread Safe zu verbasteln. Der Grund ist dass der AutoIt Interpreter intern globale Variablen bei einigen sachen nutzt die schlichtweg das gesamte Konzept über die Bühne schmeißen. GUI + Multithreading ist da schon Problem Nummer 1. Heißt nicht dass solche Dinge nicht funktionieren, aber da muss man halt Umstände in Kauf nehmen von der gewohnten Art in AutoIt zu programmieren. Ich glaube der Aufwand ist einfach schlicht zu groß...


    AutoIt hat technisch gesehen keine Limitierungen. Du kommst immer irgendwie drum herum. Die Frage ist nur in wie fern der Aufwand letzten Endes sich für das Vorhaben lohnt. Es existieren zig andere Tools die solche Dinge besser lösen als AutoIt. Da ist es einfacher solch ein Tool statdessen zu benutzen.


    Die Frage ist und bleibt offen: Wie generiere ich (möglichst elegant) eine AutoIt-Funktion zur Laufzeit?

    Was mir noch einfallen würde wäre die Funktionen zu kompillieren mit AutoIt und dann den Funktionscode auszulsen und diese in ausführbaren Memory zu packen in dein laufendes Skript. Etwa so ähnlich wie ein JIT Compiler. Ist nur eine Idee könnte aber funktionieren. Ob das nun "eleganter" ist wage ich zu bezweifeln, aber wäre noch eine Möglichkeit.


    Aber da bin ich mir ziemlich unsicher. Ich glaube in einer AutoIt exe wird der Interpreter mitgeliefert und das Skript schlichtweg nur interpretiert. Kann also sein dass die Variante also schon von Vorne herein zum Fehlschlag verleitet ist.


    Da sind Varianten über IPC und Multiprocessing durchaus realistischer.

    Kann ich Plugins zur Laufzeit aktualisieren/nachladen, nachdem schon Module geladen/Funktionen ausgeführt wurden?

    Ja, kannst du :P

    In Lua kannst du Funktionen / Variablen / Objekte etc. nach belieben überschreiben und damit auch zur Laufzeit aktualiseren. Hier mal ein sehr vereinfachtes Beispiel:

    Entsprechend die Ausgabe:

    Code
    λ lua54 "c:\Users\Yjuq\Desktop\code.lua"
    function 1
    function 2

    Nur um mal deine Frage oben zu beantworten. Ein Modul ist in Lua nichts weiteres (zumindest meistens) als eine einfache Funktionssammlung. Du kannst also das Ganze "hotpatchen".


    Da fehlt dann einiges an Routine um flott zu coden - 12 Jahre Erfahrung krieg' ich in Lua demnächst nicht mehr Zusammen.

    Lua ist wirklich einfach. Und der Unterschied zu AutoIt ist auch nicht besonders groß. Gib dir ne Woche Zeit um dich einfach mit den Basics zu beschäftigen und du hast das nötigste für Lua drin. Lua hat nicht so viele Features dass du davon überrumpelt werden könntest. :P


    Am liebsten hätte ich die Programmiersprache Self - in abgespeckt und ein ganz klein bisschen anders, und simpler - einfach zu verstehen und nutzen im Büro/Enterprise-Kontext.

    Lua... ^.^


    Ich bin mit den Services und der Laufzeitumgebung meiner Applikation aber schon weit fortgeschritten und am Point of no Return vorbei - alles noch einmal auf Lua umzubauen,

    Ja, das war mir bei meinen ersten Post schon bewusst. Ich sage ja auch nicht alles umbauen, ich sage nur Lua intigrieren für zukünftige Sachen. Was du hast kannst du einfach einbinden. Du brauchst nicht viel umschreiben, lediglich alles was du hast für Lua einmal registrieren. Das war's. Deswegen hab ich dir das ja auch vorgeschlagen.


    Zugriff auf alle Daten der Applikation gibts quasi automatisch da alles in einem Applikation Objekt liegt, das ich einfach mittels Parameter übergeben kann. Es ist im Prinzip nur die Frage der Eleganz, die ich im ersten Post stelle.

    Das du eine funktionierende Lösung hast ist mir auch klar. Selbst mit dieser Information würde ich immernoch Lua vorschlagen...


    Lua ist nun perfekt für solche Projekte geeignet. Deswegen schlage ich es ja auch vor. Ob du das eleganter in AutoIt lösen könntest? Keine Ahnung, wenn ROT funktioniert dann reicht es aus.


    Hier mal noch ein letztes Beispiel wo ich gerade dran saß:

    Ich war gerade dabei noch die AutoIt Objekte einzubinden, also eine einfache Funktion die dir ermöglicht auf alle deine vorhandenen AutoIt Objekte zuzugreifen. Die autoit() Funktion ist die Schnittstelle zu den gesamten AutoIt Built-In Funktionen. Ich hab aber leider gerade ein paar Probleme mit dem AutoIt Objekten weil Eval / Assign / Execute für diese bei Zuweisungen nicht so einfach funktionieren. War gerade dabei zu schauen ob ich nicht die Invoke Methode aus dem IDispatch Interface für diese Objekte nicht irgendwie aufrufen könnte. :P


    Um aber mal zurück zu rudern:

    Ich bezweifel dass du das mehr eleganter in AutoIt lösen könntest als die Lösung die du momentan hast. Zumindest fällt mir da so nichts mehr dazu ein. Falls das deine Ursprungsfrage eher beantworten sollte. Ich hatte lediglich Lua vorgeschlagen weil es für deine Ansprüche eigentlich eine sehr gute Lösung ist. Vielleicht hat jemand anderes noch eine Idee? Mich wundert es sowieso warum sich hier keiner meldet. :P

    Du brauchst nicht genervt zu sein. Das sorgt nicht unbedingt für eine gute Gesprächsgrundlage.

    Huh, ich bin nicht genervt. o.o

    Ich glaube wir reden nur aneinander vorbei. :P

    Wenn ich genervt wäre würde ich schlichtweg mich verkrümeln und den Thread ignorieren.


    Dein drittes Beispiel endet in einem Programmabbruch.

    Versuch mal #AutoIt3Wrapper_UseX64=y davor zu packen. Da war die Lua UDF noch nicht ganz fertig und ich hatte es nur in 64 bit getestet.


    Kann ich Plugins zur Lua-Laufzeit nachladen?

    Ja? Das ist ja der Sinn dahinter. Schau dir Post #18 nochmal an. Da wird alles direkt geladen und ist direkt global verfügbar. Wenn du ein neues Objekt in deiner GUI anlegst kannst du es auch direkt verwenden ohne Neustart. Das ganze lässt sich auf alles übertragen. Ganze Skripte können geladen und ausgeführt werden zur Laufzeit.


    Ich bin gerade noch dabei dir das Beispiel für AutoIt Objekte zu machen.


    Mir ist durchaus klar an was für ein Problem du sitzt. Eine Lua integration ist mein erster Vorschlag dafür. Es macht eigentlich genau das was du wünscht. Du kannst das auch (wie bereits gesagt) mit AutoIt und IPC umständlicher lösen. Ist halt nur mehr aufwand und vermutlich mehr Anfälliger für Fehler (wenn dir irgendwelche Prozesse abschmieren etc.)

    Wichtiger wäre mir das hier: RE: Self Modifying Code / IPC / Funktionen zur Laufzeit erzeugen

    Huh? Ich hatte doch bereits ein Beispiel geschrieben wie du auf Daten zwischen Lua + AutoIt austauscht. Und auch wie du Funktionen aufrufst. Das war's... Reicht doch aus um ein AutoItObject komplett abzudecken oder nicht? - Oder willst du mir was anderes sagen mit der Verlinkung?

    Im Anhang findest du das Beispiel zu deiner GUI mit Lua. Irgendwie ist mir allerdings AutoItObject komplett rausgefallen, es war nicht ansatzweise benötigt. Zumindest für das Minimalbeispiel was du gepostet hattest. Ich hab da paar Kommentare hinterlassen.


    Die Objekte welche du in der GUI erstellst sind direkt (ohne Neustart) vorhanden. Also so ziemlich das was du wolltest, abgesehen davon dass du bisher mit AutoItObject das ganze implementiert hast. Was dir bestimmt noch auffallen dürfte ist, dass die include Datei weg ist. Tja... Nicht notwendig. x)


    Ich habe versucht dein Orginalbeispiel so weit wie möglich orginal zu lassen. Allerdings war ich am überlegen ob ich es komplett umschreibe. Die Struktur gefällt mir persönlich nicht. Aber ich denke so kannst du dich besser zurechtfinden wenn ich nur an dem nötigsten rumdockter.


    Wenn du dich für die Lua Lösung entscheidest sag bescheid. Ich helfe dir da gerne weiter. Ansonsten sehen wir uns bei der AutoIt Variante weiter um. Legacy Support zu den vorhandenen AutoItObjects könnten wir noch intigrieren. Dürfte nicht so schwer sein.


    Die Beispiele kratzen nur an der Oberfläche von dem was geht. ;)

    Dateien

    • lua-example.zip

      (345,4 kB, 24 Mal heruntergeladen, zuletzt: )

    Hi, hier ein etwas besseres Beispiel. Die Lua UDF ist jetzt auch fertig (soweit). Ich schaue mir mal das Beispiel an was du da geschickt hast und schreibe dir dann jetzt ein Beispiel mit Lua integration. Ich würde mir schlichtweg wirklich überlegen, ob User Skripte nicht einfach in Lua geschrieben werden könnten. Das würde dein Vorhaben definitiv vereinfachen. Lua ist keine besonders schwere Sprache und du kannst AutoIt Funktionen für Lua Verfügbar machen (siehe Beispiel im Anhang, da hab ich die MsgBox genommen).


    Der Vorteil daran ist auch, du kannst mit deinem Hauptprogramm bestimmen auf welche Funktionalität die User überhaupt Zugriff haben. So kann keiner eine AutoIt Funktionen so einfach exploiten. Was du nicht exportierst ist auch nicht verfügbar. :P

    Dateien

    • lua.zip

      (355,05 kB, 19 Mal heruntergeladen, zuletzt: )

    Hi, im Anhang findest du sehr vereinfachte Beispiele um zwischen Lua & AutoIt callbacks / daten auszutauschen. Da geht natürlich um einiges mehr. Allerdings hat mich das schreiben der lua udf einiges an zeit gekostet und sie ist bestimmt noch voller bugs (und unvollständig ^^). Zu dem AutoItObject schreibe ich dir gerne spezifisch auch noch ein Beispiel, aber das sollte dir den groben Einblick geben in wie fern du Lua einbinden könntest. Ich hab nur heute / morgen leider nicht mehr viel Zeit, daher musts du noch aufs Wochenende warten. Viel zu tun :/


    Kannst ja in der Zwischenzeit ein wenig mit dem Gedanken spielen und paar Sachen ausprobieren. Die Lua API Referenz findest du hier:

    Lua manual


    Scroll einfach runter bist du die ganze Liste mit der "C API" findest.

    Dateien

    • lua-example.zip

      (342,63 kB, 21 Mal heruntergeladen, zuletzt: )

    Das schreit sogar noch mehr nach Lua nach deiner Erklärung und dem Beispielskript welches User anlegen könnten...


    Was du vor hast ist AutoIt als embedded Language zu benutzen. Das kannst du knicken ohne komplette Systeme dafür zu intigrieren und IPC zu betreiben. Der Grund dafür ist, dass AutoIt Code nun mal nicht einfach zur Laufzeit geladen und ausgeführt werden kann (mit geteilten Daten). Wenn es nur um Attribut Zuweisungen geht würde ich eher ein einfaches Datenformat vorschlagen was stattdessen geladen wird. Aber da auch Funktionen und Logik vermutlich ausgeführt werden soll wird das ganze kniffliger. Lua ist für solche Vorhaben konzipiert.


    Das heißt nicht dass es dafür keine Lösungen gibt, sind aber um einiges aufwendiger als schlichtweg Lua zu intigrieren. Aber bleiben wir mal bei der AutoIt Variante wenn du sagst Lua ist komplett ausgeschlossen. Ich habe gerade nur nicht viel Zeit, deshalb nur eine knappe Antwort. Ich melde mich aber nochmal. o/


    €dit:

    Zitat

    - Nein. Außerdem verstehe ich noch nicht, wie ich das Problem mit den geteilten Daten dann besser löse.

    Falls sich doch daran was rütteln lässt kann ich dir gerne ein Beispiel diesbezüglich schreiben. Ist eigentlich nicht so schwierig mit Lua.

    So ganz werde ich nicht schlau. Je mehr ich darüber nachdenke welche Lösung die beste für dich ist umso mehr Fragen tauchen auf. Die wohl wichtigsten hier:

    Müssen es AutoIt Skripte sein? Kannst du nicht einfach Lua einbinden? Müssen diese Skripte independent laufen? Also eigenständige Programme? Oder nur reine Funktionssammlungen? Müssen unbedingt COM Objekte erstellt werden? Dürfen die eingebundenen Skripte uneingeschränkten Zugriff haben, oder sind da einige Beeinträchtigungen notwendig?


    Es gibt da einige Wege um das zu realisieren. Je nach Anforderung ist das eine besser geeignet als das andere. Aber es kommt wirklich sehr stark darauf an was genau gefordert ist. Kannst du mehr Informationen geben? Oder eine genauere Erläuterung über das System in welches es intigriert werden soll? Je mehr Informationen um so besser.


    Um ehrlich zu sein schreit das alles bisher nach Lua für mich.

    RIP - Da wurde dir ja was schönes aufgebrummt. x)

    Es sieht stark danach aus dass es sich dabei um eine Webapp handelt. Das könnte also etwas tricky werden für einen Anfänger :)

    Erst einmal: Moderne Webbrowser Automatisationen laufen über den Selenium WebDriver. Die "Mainstream" Browser unterstützen dies mit den neueren Versionen. Hier mal eine Liste aller relevanten Links um dir einen generellen Überblick zu erschaffen:


    https://en.wikipedia.org/wiki/Headless_browser

    https://www.autoitscript.com/f…mpliant-version-01162021/

    https://developers.google.com/…s/2017/04/headless-chrome

    https://developers.google.com/…headless-karma-mocha-chai

    https://www.selenium.dev/documentation/en/webdriver/

    https://www.w3.org/TR/webdriver1/

    https://chromium.googlesource.…cs/chromedriver_status.md


    Well,... Das könnte wahrscheinlich mehr Fragen aufwerfen als es hilfreich ist...

    Hmn, ich würde vorschlagen du fragst erst mal deinen Chef ob es möglich ist den WebDriver für Goolge Chrome (ich schätze mal das wird der Browser sein der für die Webapp genutzt wird?) herunterladen und auf dem Rechner installieren kannst. Den Treiber findest du hier: https://chromedriver.chromium.org/downloads


    Wenn es möglich ist sag bescheid, dann können wir uns andere Methoden sparen und ich helfe dir dann in dieser Richtung weiter. Ansonsten müssen wir halt auf andere Mittel zugreifen...


    Sag mal, wie genau rufst du eigentlich die Anwendung auf? Öffnest du eine Internetseite oder ist da ein Icon auf dem Desktop? Ich möchte nur sichergehen dass es bei der Applikation auch wirklich um eine Webapp handelt. Versuch mal nen Rechsklick irgendwo zu machen und schau mal ob du da etwas hast wie "Quelltext ansehen" oder "Element untersuchen".


    Vielleicht ist das auch ein wenig Overkill für eine Anwendung die nur alle 90 Minuten was "anklicken" soll... Vielleicht hat ja noch jemand im Forum einen andere Vorschlag der genauso gut funktionieren würde. Ich würde halt Mausbewegungen vermeiden wollen. :P

    Windows 10 IoT läuft auf dem Raspberry Pi 2 & 3. Ob da allerdings dann auch AutoIt drauf läuft, keine Ahnung. Ich vermute aber mal eher weniger da dir schlichtweg alles aus der WinAPI fehlt bis aus einige Core Funktionen. Vielleicht hast du auch Glück mit Wine unter Linux. Aber wieso AutoIt? Python ist die gängiste Sprache in der Linux Welt für Scripting.

    Nicolai

    Ich kann dir einen Grundlagen Crashkurs geben. Ich habe momentan ziemlich viel Zeit und nicht viel zu tun.


    Automatisierungen von Webbrowsern mit AutoIt ist dann auch etwas schwieriger. Eigentlich fehlt uns sowieso noch eine Menge an Informationen um dir überhaupt effektiv helfen zu können. Darfst du Screenshots von der Software hochladen? Wenn es sich wirklich um eine Webapp handelt dann sitzt du da als Anfänger noch in 3 Monaten dran. :P


    Am besten wäre es mal wen in der IT Firma zu fragen (der sich auch mit AutoIt auskennt) dass er dir alle notwenigen Informationen zukommen lässt um das auch zu automatisieren oder ggf. um Hilfestellung im Internet zu erfragen.

    Handelt es sich dabei um eine Applikation welche im Webbrowser aufgerufen wird? Ansonsten kannst du mir dem AutoIt Info Tool die entsprechenden Control ID's auslesen und diese via Control ControlClick einfach ansprechen. Packst noch ein paar If-Abfragen mit rein, ne hübsche Schleife und nen Timer der alle 90 Minuten triggert. Fertig :P


    Das ist zumindest die Quick & Dirty Variante. Die kannst du allerdings um einiges verbessern. Du hattest im anderen Thread erwähnt dass du "nicht viel mit Programmierung zu tun" hattest? Am einfachsten ist es erst mal bei deinem Rechner einfach den Windows Calculator aufzurufen und zu versuchen einzelne Buttons dort anzuklicken.


    Du hast per TeamViewer den Zugriff auf den Zielrechner, korrekt? Ist dort AutoIt drauf installiert oder kannst du zumindest das Info Tool darauf aufrufen? Ansonsten kommst du ja noch nicht mal an die Control ID's dran.


    Ich werde dir bei deiner Aufgabe helfen. Allerdings gebe ich dir nur soweit Hilfestellung sodass du die Dinge selber lösen kannst. Alles andere wäre für ein Praktikum für dein Chef vermutlich inakzeptabel. Hast du für die Aufgabe eine Deadline? | Nvm, die Frage hattest du mir schon beantwortet.

    Ob das Teil leistungsmäßig deinen Ansprüchen genügt, musst du beurteilen.

    Primäres Ziel ist es sowieso erst mal wieder an meine Daten ran zu kommen. In 3~4 Monaten schaffe ich mir sowieso komplett neue Hardware ran. Meine Kartoffel ist nun über 10 Jahre alt und davon ist kaum was zu verwerten. :') - Leider fehlt mir noch ein wenig Geld um alle Teile zu bestellen. Da mir aber nun meine GPU abgeraucht ist muss für's erste eine Ersatzlösung ran.


    Ich schicke dir eine PM bezüglich meiner Adresse. Ich bedanke mich schon mal im Vorraus.

    Servus o/
    Mir ist bei meinen (ziemlich alten) PC meine GPU drauf gegangen. Ich habe dort noch eine Radeon R 290 verbaut. Ich suche momentan nach einer GPU mit ähnlicher Leistung. Kann von mir aus gebraucht sein. Leider habe ich keine Onboard Grafikkarte (oder zweiten Rechner) weshalb ich noch nicht mal auf meine wichtigen Daten zugreifen kann. Falls jemand noch ne GPU im Keller hat die noch funktioniert würde ich sie für einen angemessenen Preis kaufen. Prinzipiell traue ich dem Forum hier schlichtweg mehr als die Angebote auf ebay. ^^


    LG Yjuq