Programm ohne Schnittstelle ansprechen

  • Hallo an alle,
    Ich habe ein Problem und komme nicht weiter.Ein Kunde an meiner Firma hat ein Uralt-Delphi Programm.
    Nun würde ich gerne bestimmte "Funktionen" des Programmes in einemSkript ansprechen, um sie automatisch ablaufen zu lassen.
    Das Problem is nur: Das Programm verfügt über keine Schnittstelle nach außen!
    Gibt es vielleicht irgendwelche "Tricks" um so etwas trotzdem zu realisieren???

    Interface Comb
    Möchtegern .NET und C# Profi

    Code
    Person[InterfaceComb].GreetForum("Hello Forum!");
  • Mit SendMessage kannst irgendwelchen Fenstern Nachrichten schicken, ist aber nicht so leicht, damit mehr als ein paar simple clicks zu machen.
    Source ist nicht vorhanden, oder?

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Nein, kein Source. Wenn sie wenigstens ne gscheite Doku mitgeliefert hätten,nicht mal das haben sie! Die Programmierer dieses Progs haben extra nichts Schnittstellenartiges hinzugefügt, damit wir von ihnen abhängig sind.
    Hab mir den Artikel kurz überflogen, hört sich so an als könnte man das mal probieren obwohl ich noch nicht so recht verstehe wie das gehen sollte. Selbst schon mal mit dem gearbeitet? Is es aufwändig?
    DANKE MAL FÜR DEN TIPP!!!

    Interface Comb
    Möchtegern .NET und C# Profi

    Code
    Person[InterfaceComb].GreetForum("Hello Forum!");
  • Mit der Funktion kannst recht viel machen, die ist auch der Grund, warum Abfragen von Personal Firewalls unsicher sind - man kann damit automatisiert beliebige Buttons drücken.
    Ein kleines Beispiel gibts hier: drück mich.

    Obs aufwändig ist? Hm, ja. Alles, was über ein paar klicks auf Buttons oder ähnlich triviales Zeug hinausgeht, ist wohl eine Heidenarbeit.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Hm, Code generieren? Weiß jetzt nicht genau, wie dus meinst.
    Natürlich kann man sich ein bissl helfen, und Methoden schreiben, die Texteingaben in OnKeyPress-Events zerlegen, und so Formulare ausfüllen. Allerdings ist das ganze ein bisschen anstrengend. Im Beispiel sieht man ja, dass "LVM_DELETECOLUMN" Messages geschickt werden, und so Message-Typen gibts natürlich ziemlich viele. Dazu kommt, dass man die Namen der Fenster und der Widgets kennen muss. Das Beispiel funzt bei mir z.B. nicht, weils ein Fenster mit dem Titel "Windows Task Manager" sucht, meins aber "Windows Task-Manager" heißt. (Wahrscheinlich ists Deutsch mit Bindestrich :shinner: )Bei den Tabs und Buttons gehts so weiter.
    Bei Edit-Feldern kann man ja auch nicht ablesen, wie das Ding heißt.. keine Ahnung, wie man das dann am besten macht.

    Ich finds ja recht interessant, aber ich glaub kaum, dass der "Kunde" sich Geld spart, wenn das Problem so gelöst wird.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Na ja wir machen dort beim Kunden das Operating und jeden Tag ca 1H immer nur genau das selbe zu machen das hält ja niemand auf die Dauer aus!
    Wolfibolfi : Ich verbeuge mich vor deinem Wissen zur WinAPI , ich werds demnächst mal ausprobieren und wenns klappt bin ich dirn dickes fettes dankeschön schuldig.
    Den Namen der Textboxen herauszufinden, die ich befüllen muss, wird wohl etwas schwieriger...
    Aber wenigstens hab ich jetzt einen Ansatzpunkt...
    LG!

    Interface Comb
    Möchtegern .NET und C# Profi

    Code
    Person[InterfaceComb].GreetForum("Hello Forum!");
  • Eigentlich könntest du ja mal die Textboxen durchgehen, und automatisiert "1", "2", "3" usw. reinschreiben. Die Reihenfolge wird wohl in Zukunft gleich bleiben.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Mit diesem AutoIt funktionierts super!!!
    Hooking und SendMessage hab ich deswegen noch nicht einmal ausprobiert...
    Schade, dass die ihren Source Code nicht veröffentlichen, mich würds nämlich wirklich interessieren, wie das ganze funktioniert.
    Vielleicht wird ja intern auch diese SendMessage-Funktion verwendet???
    Die liefern da ein Program mit AutoIt Window Info mit dem man von allen offenen Fenstern (und deren Controls) die Klassennamen, die ihnen gegeben wurden, herausfinden. WIE FUNKTIONIERT SOWAS?

    Interface Comb
    Möchtegern .NET und C# Profi

    Code
    Person[InterfaceComb].GreetForum("Hello Forum!");
  • Was genau alles verwendet wird, kann ich dir nicht sagen, aber die Zeiten wo ich noch selbst ein wenig Win Anwendungen geschrieben hab in C(++), basieren darauf, dass jede Applikation eine MessageQueue hat, in der Nachrichten an das Fenster geschickt werden (zB wann das Window neu gezeichnet werden muss, wann eine Tastatureingabe erfolgt, usw. usf.).

    Insofern wird sich AutoIt dieser Funktion genauso bemächtigen und der aktiven Applikation einfache Messages schicken.

    Bzgl. den Infos zu GUI Elementen etc. ... das ist nichts geheimes, dafür gibt es auch APIs um solche Dinge abzufragen. Meiner Meinung nach sind das die trivialeren Dinge nebst hier eine eigene Interpretersprache zur Verfügung zu stellen.

    LG

  • psapi.dll --> die DLL befindet sich im Installationsverzeichnis von AutoIt.
    Ich nehme an, dass die gewisse Funktionen ermöglicht, genau wissen tu ichs allerdings nicht.
    So ein Tool kann einem schon recht viel Arbeit ersparen...mir hats jedenfalls immens geholfen. Die Interpretersprache fand ich auch recht leicht zu lernen, allerdings hab ich mir nach einiger Zeit die AutoItX3.dll in meine Lieblingsprogrammiersprache eingebunden.

    Interface Comb
    Möchtegern .NET und C# Profi

    Code
    Person[InterfaceComb].GreetForum("Hello Forum!");

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!