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???
Programm ohne Schnittstelle ansprechen
-
-
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? -
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!!! -
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.
-
Obs aufwändig ist? Hm, ja. Alles, was über ein paar klicks auf Buttons oder ähnlich triviales Zeug hinausgeht, ist wohl eine Heidenarbeit.
Könnte man den Code generieren? -
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.
-
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! -
Was auch noch gehen könnte ist Hooking.
Ein paar Beispiele dazu
http://www.codeproject.com/KB/DLL/#DLLs%20-%20HooksOb es in diesem Kongreten Fall nützlich ist weiß ich nicht. Man kann schon viel damit machen. Aber es hängt halt vom Programm ab wieviel genau... Vielleicht hilft es dir was.
lg -
Eigentlich könntest du ja mal die Textboxen durchgehen, und automatisiert "1", "2", "3" usw. reinschreiben. Die Reihenfolge wird wohl in Zukunft gleich bleiben.
-
Versuchs mal mit AutoIt. Damit lass ich Applikationen verteilen, die sich per Konfigurationsdateien, etc. nicht silent installieren lassen.
LG -
kann man delphi-apps nicht irgendwie reverse engineeren? würd die sache vereinfachen
-
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? -
Hm, vielleicht schnüffeln die irgendwie im RAM rum? Oder fangen irgendwelche DDE-Messages ab?...
-
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.
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!