![]() |
Das eigene Programm skripten/fernsteuern/automatisieren
Könnt Ihr mir bitte mal beim Ideen sammeln helfen?
Ich möchte einzelne Funktionen meines Programm automatisiert ausführen lassen. Da gibt es zB eine Funktion, um Dateien von einem FTP Server downzuloaden, eine andere, um diese Dateien dann zu importieren, wieder eine andere um Ergebnisse wieder hochzuladen. Das möchte ich jetzt von außen parametrisiert anstoßen können. Vielleicht sowas wie CommandDispatcher.Add(sVerb : String; Action : TProc); … CommandDispatcher.Execute; Und das schaut, ob via ParamString Aktionen übergeben wurden + führt dann die Actions aus. Parameter und Fehlerbehandlung braucht es natürlich auch noch. Anderen Ideen oder Input? Danke! |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Soll das Programm mit einem Parameter gestartet werden und die entsprechende Aktion machen und sich dann wieder beenden?
Oder soll es die ganze Zeit laufen und von außen Befehle bekommen, was es machen soll? |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Ah, ja, gute Frage.
Das Programm soll starten, abarbeiten und sich beenden. |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Wenn es ein laufender Process ist kann man IPC oder MMF ganz gut verwenden.
Roter Text besagt das gegenteil. Dann simpel über Parameter auswertung. |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Zitat:
|
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Vielleicht wäre auch eine Scriting-Engine eine Idee?
Z.B. mittels DelphiWebScript oder der Scripting-Engine von FastReport? |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Habe das mal so gemacht:
Programmstart ohne Parameter = Gui für den Anwender und der kann machen was er will. Programmstart mit Parameter: Der Parameter ist eine Inidatei. In der Inidatei steht drinne, was gemacht werden soll. Alles, was von außen gesteuert werden konnte, war in einer TAction einer TActionList "gekapselt". In der Ini stehen die Namen der auszuführenden TActions in der Reihenfolge, in der sie ausgeführt werden sollen. Z. B.:
Code:
Der Quelltext im Programm sieht dann in etwa so aus:
[AutoStart]
ActionFTPDownload ActionImport
Delphi-Quellcode:
in der DPR wird es in etwa so aussehen:
procedure TFormMain.ActionAutostartExecute(Sender: TObject);
var i : Integer; k : Integer; Ini : TIniFile; sl : TStrings; begin sl := TStrings.Create; Ini := TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini')); ini.ReadSection('Autostart',sl); Ini.Free; for k := 0 to sl.Count do begin for i := 0 to ActionList.ActionCount - 1 do begin if ActionList.Actions[i].Name = sl[k] then begin if Assigned(tAction(ActionList.Actions[i]).OnExecute) then begin tAction(ActionList.Actions[i]).OnExecute(Nil); end; end; end; end; sl.Free; Close; end;
Delphi-Quellcode:
Du hast damit ein Programm "für alles" und benötigst keine Scriptengine (wobei ich hier PascalScript von RemObjects nehmen würde).
begin
Application.Initialize; Application.CreateForm(TFormMain, FormMain); if ParamCount > 0 then begin FormMain.ActionAutostartExecute(Nil); end else begin Application.Run; end; end. Wenn es im Programm mal eine oder n neue Actions gibt, brauchst Du diese für die Batchverarbeitung nicht extra nochmal implementieren, einfach in die INI eintragen und gut is. Und wenn die Executemethoden der Actions nichts weiter als den Aufruf von bereits vorhanden Routinen enthalten, ist das auch ausreichend. Die Programmlogik muss also nicht zwingend in den Actions "abgefackelt" werden. |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
In einer EXE geht schon.
Als GUI Anwendung erstellen und beim Start prüfen, ob aus Konsole gestartet. Wenn ja, dann dort die Statusausgabe und ansonsten die GUI starten/anzeigen. Außer man will die Fortschrittsanzeige wirklich dennoch immer in der GUI haben, egal ob mit Parameter aus einem Link, Start>Windows>Ausführen oder aus einer Console oder Batch gestartet. (aus einem Konsolenfenster oder mit StdOut-Umleitung oder ohne) Ich hoffe das in etwa ist nicht ganz wörtlich gemeint. sl.Count-1 try-finally ? TStrings.Create ? warum OnExecute aufrufen, anstatt Execute? und die Groß-/Kleinschreibung zu ignorieren kann nicht schaden Komisch ist auch, dass die ActionList keine FindAction(Name)-Methode bietet und man die Items selbst durchlaufen muß.
Delphi-Quellcode:
var
i : Integer; S : string; Ini : TIniFile; sl : TStrings; begin sl := TStringList.Create; try Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); Ini.ReadSection('Autostart', sl); for S in sl do //for k := 0 to sl.Count - 1 do for i := 0 to ActionList1.ActionCount - 1 do if SameText(ActionList1.Actions[i].Name, S) then ActionList1.Actions[i].Execute; finally Ini.Free; sl.Free; Close; end; end; |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Es ging um 'ne Idee und nicht um 'nen fertigen Code.
Hab' nich' ma' probiert, ob's kompiliert werden kann. Dass man dazu eine vernünftige Fehlerbehandlung braucht, sollte für Profis eigentlich klar sein. Die entsprechende Transferleistung von der Idee zu vollständigen und korrekter Implementierung erwarte ich da einfach. |
AW: Das eigene Programm skripten/fernsteuern/automatisieren
Hallo,
ich würde ich eine Ini und/oder einen Parameter nehmen, je nachdem, wie viele Daten für die automatische Funktion benötigt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz