AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Kommandierung eines laufenden Programms - wie am besten?
Thema durchsuchen
Ansicht
Themen-Optionen

Kommandierung eines laufenden Programms - wie am besten?

Ein Thema von Bodenseematze · begonnen am 9. Jul 2024 · letzter Beitrag vom 12. Jul 2024
Antwort Antwort
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.734 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 9. Jul 2024, 15:13
Theoretisch ginge auch SendMessage oder sogar einfach eine Datei, in die man die Befehle schreibt und die das Programm dann liest.
Ach ja: Kommunikation via Memory Mapped File ginge auch.

SendMessage und Memory Mapped File funktioniert nur lokal auf demselben Rechner.

Was auch immer man nimmt: Es ist mehr Aufwand als man zunächst denkt.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
172 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 9. Jul 2024, 19:57
Ich habe es noch nicht ausprobiert, aber ist App-Tethering nicht dafür geeignet?

https://docwiki.embarcadero.com/RADS..._App-Tethering

Es gibt Beispielprojekte je nach Delphi-Version (ab XE6):
C:\Users\Public\Documents\Embarcadero\Studio\22.0\ Samples\Object Pascal\RTL\Tethering

Oder ganz klassisch per DDE (Dynamic Data Exchange), was genau für solche Fälle gedacht war. Ist schon etwas älter, sollte aber immer noch unter Windows funktionieren. In Delphi suchen nach TDdeClientConv bzw. TDdeServerConv
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 9. Jul 2024, 21:46
Indy-Http-Server aufmachen, auf Http-Gets, Posts usw. reagieren und die entsprechenden Daten einlesen oder zurückgeben. Architektur- und Platform-Unabhängig, funktioniert über Rechnergrenzen hinweg und ist auch für das menschliche Auge super-leicht debugg-bar. Ich bin damit sehr glücklich geworden.

Gibt bestimmt mit "DataSnap" (?) und ähnlichen Dingen was noch weiter vorgekautes, aber die paar Minuten, Http und REST besser zu verstehen habe ich gerne investiert. War im Endeffekt deutlich einfacher als gedacht und funktioniert wirklich super.


Je nachdem was deine separate Anwendung für eine Aufgabe hat finde ich ganz ehrlich Konsolenanwendung mit Tastatureingaben nicht abwegig. Kann man drüber lächeln, aber ist aus einer Delphi-Anwendung heraus auch super steuerbar (CreateProcess und stdIn/stdOut-Pipes umbiegen, denn nichts anderes ist die Tastatureingabe und Bildschirmausgabe einer Konsolenanwendung) und schon kann man alles fernsteuern und auslesen und als netten Nebeneffekt kannst du deine Konsolenanwendung unter Windows einfach doppelklicken und die entsprechenden Befehle und Daten über die Tastatur ins Konsolenfenster eingeben während die Anwendung standalone läuft. Hat irgendwie auch einen gewissen Charme...
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
77 Beiträge
 
#4

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 11. Jul 2024, 08:20
Ich habe es noch nicht ausprobiert, aber ist App-Tethering nicht dafür geeignet?
Davon hatte ich noch nie gehört - die verlinkten Klassen gibt's bei mir auf meinem System (D7) auf jeden Fall (noch) nicht

Oder ganz klassisch per DDE (Dynamic Data Exchange), was genau für solche Fälle gedacht war.
Ist schon etwas älter, sollte aber immer noch unter Windows funktionieren. In Delphi suchen nach TDdeClientConv bzw. TDdeServerConv
Gibt's das immer noch?
Dachte, das wurde komplett von OLE (und damit OCX-Server) ersetzt/erweitert und dann nur noch als Altlast im Windows "beibehalten"...
Ich denke, das ist ein totes Pferd, auf das ich nicht unbedingt setzen möchte
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#5

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 11. Jul 2024, 09:18
Davon hatte ich noch nie gehört - die verlinkten Klassen gibt's bei mir auf meinem System (D7) auf jeden Fall (noch) nicht
App-Tethering gibt es seit Delphi XE6. Obwohl es das also schon seit gut 10 Jahren gibt, ist es immer noch relativ unbekannt. Es hat allerdings den Charme, dass es nicht nur auf dem lokalen System, sondern auch innerhalb des lokalen Netzwerks und auch über Bluetooth arbeitet.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
172 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 11. Jul 2024, 10:02
Oder ganz klassisch per DDE (Dynamic Data Exchange), was genau für solche Fälle gedacht war.
Ist schon etwas älter, sollte aber immer noch unter Windows funktionieren. In Delphi suchen nach TDdeClientConv bzw. TDdeServerConv
Gibt's das immer noch?
Dachte, das wurde komplett von OLE (und damit OCX-Server) ersetzt/erweitert und dann nur noch als Altlast im Windows "beibehalten"...
Ich denke, das ist ein totes Pferd, auf das ich nicht unbedingt setzen möchte
Wieso, passt doch perfekt, wenn Du noch mit Delphi 7 entwickelst
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#7

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 11. Jul 2024, 10:31
Offiziell ist DDE tot, aber selbst Microsoft verwendet es immernoch an vielen Stellen.
Sogar die Delphi-IDE benutzt es.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
77 Beiträge
 
#8

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 12. Jul 2024, 08:09
Wieso, passt doch perfekt, wenn Du noch mit Delphi 7 entwickelst
Das habe ich verdient...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#9

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 12. Jul 2024, 09:38
Wobei DDE nicht direkt was mit D7 zu tun hat.
Aber viele andere Neuereungen fallen da schon weg.

DDE ist, laut Hersteller, halt "eigentlich" tot, aber es lebt und lebt und lebt (sogar beim Hersteller selbst), so wie auch die BDE oder des MDI.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Bodenseematze

Registriert seit: 10. Jul 2023
77 Beiträge
 
#10

AW: Kommandierung eines laufenden Programms - wie am besten?

  Alt 11. Jul 2024, 08:14
Was auch immer man nimmt: Es ist mehr Aufwand als man zunächst denkt.
Da hast Du wahrscheinlich recht.
Vor ewigen Zeiten hatte ich sowas mal in C/C++ gemacht - damals hatte ich in einer DLL über Linker-Optionen eine Shared-Section angelegt, die dann alle nutzen konnten, die die DLL verwendet haben; und dann über DLLMain und Process-Attach / Thread-Attach eine Verwaltung drüber gelegt.
Das war damals der einfache Teil - aufwändiger war dann eben, einen Thread aufzubauen, der auf diese Bereich "hört" und dann das Protokoll zu definieren / auszuwerten, damit sich Befehlssequenzen absetzen lassen und bestätigt werden können.

Aus dem damaligen "mach mal schnell" wurde dann schnell ein Großprojekt - die Protokollschnittstelle musste dann auch noch mit Versionsnummern versehen werden, so dass verschiedene Schnittstellenversionen miteinander kommunizieren konnten (damit die DLL ausgetauscht / erneuert werden konnte und je nach Schnittstellenversion des Gegenpartner unterschiedliche Möglichkeiten zur Verfügung gestellt hatte).

Das ganze hat dann zwar super funktioniert, war aber schlussendlich doch ein Riesenaufwand - da wäre ein REST- oder SOAP-Server nicht aufwändiger gewesen !

Und diesmal wollte ich es "einfacher" machen - aber ich denke, um den Grundaufwand, ein Protokoll zu definieren und zu implementieren komme ich nicht herum - egal welche Kommunikationsvariante ich wähle.
Gibt es eigentlich fertige REST-/SOAP-Bibliotheken (SOAP war mir immer sympathischer als REST, weil dort die Schnittstellendefinition "genauer" ist - allerdings braucht man da sinnvollerweise wieder einen Compiler für die Umwandlung der Schnittstellendefinition in Code) für Delphi (7), die mir in der Hinsicht Arbeit abnehmen würden?
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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-2025 by Thomas Breitkreuz