Entwickler-Ecke

Dateizugriff - Andere Anwendung starten.


knittel - Mo 24.06.13 17:32
Titel: Andere Anwendung starten.
Hallo allerseits,

Ich programmiere an einem Spiel, das sowohl aus einem Server als auch aus einem Client besteht. Es soll aber möglich sein im Client Einstellungen vorzunehmen und dann den Server mit diesen Parametern zu starten. Nun meine Frage: Wie kann ich beim Server start diese Parameter übergeben und auch diese dann beim server dann auslesen?

Bisher kam ich nur auf die idee, die parameter in einer temporären datei zu speichern und diese dann vom server laden, aber das scheint mir nicht das gelbe vom ei zu sein.

Gibts da was besseres?

Danke schonmal! :)


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 24.06.2013 um 22:36


WasWeißDennIch - Mo 24.06.13 18:26

Der Client soll den Server starten und dieser soll die Parameter auswerten, habe ich das richtig verstanden? Ich gehe mal davon aus, dass beides "normale" Windows-Anwendungen sind.
Starten des Servers:

Delphi-Quelltext
1:
ShellExecute(EinHandle, 'open', PChar(Pfad_zur_Server_Exe), PChar(Parameter), nil, SW_SHOW {oder eine andere SW_Konstante});                    

Auswerten auf Serverseite:

Delphi-Quelltext
1:
2:
3:
4:
for i := 1 to ParamCount do
  if ParamStr(i) = 'Blabberblubb' then
    //auf Parameter BlabberBlubb reagieren
  usw.


knittel - Mo 24.06.13 19:00

Vielen Dank! Das wars was ich gesucht hatte :) Probiers gleich mal aus.
Zitat:
normale Windows-Anwendungen

Sind momentan plattform unabhängige sdl Anwendungen, weis aber sowieso nicht ob ich das bis zum schluss durchhalte.


MSCH - Mo 24.06.13 19:09

alternative 1: Registry.
alternative 2: Datenbank

:-)
Msch


Delete - Di 25.06.13 08:27

Alternative 3: SHARED MEMORY


JohannPeter - Mi 23.04.14 12:03

Hallo,
Bin neu auf euerer Seite.
Kann ich in Delphi auch externe Programme einbinden.
Habe eine Hauptmaske und von der will ich eigene Progamme starten.

Vielen Dank für die Hilfe.


Xion - Mi 23.04.14 15:00

:welcome:

Wenn du mit "einbinden" das Starten anderer Programme meinst, dann ist ShellExecute (siehe oben) das richtige für deine Zwecke. Das entspricht in etwa dem Doppelklick auf eine Datei im Explorer, damit kannst du nahezu alles aufmachen (wenn es zickt, dann nehme für den zweiten Parameter einfach NIL [http://stackoverflow.com/questions/6309264/passing-open-to-shellexecute-doesnt-open-a-word-file-on-a-specific-machine] ).


rushifell - Mi 23.04.14 17:12

Zum Ausführen von exe-Dateien sollte ShellExecute nicht verwendet werden. Benutze stattdessen lieber CreateProcess. ShellExecute ist z.B. zum Öffnen von Textdateien (*.txt).


JohannPeter - Mi 23.04.14 18:19

Danke für die Antwort.
Möchte mich für meine Anfängerfehler gleich mal entschuldigen, habe bisher immer mit etlichen Formularen gearbeitet.

Hier mein Quelltext:

procedure TfrmMain.mnuAShopClick(Sender: TObject);
begin
Pfad := ExtractFilePath(Application.ExeName);
if Pfad[Length(Pfad)] <> '\' then begin
Pfad := Pfad + '\';
CreateProcess(Pfad + 'Shop.exe'), nil, SW_SHOW {oder eine andere SW_Konstante});
end;
end;

Vielleicht denke ich nur zu umständlich.

LG


Delete - Mi 23.04.14 18:32

Schau dir mal IncludeTrailingPathDelimiter [http://docwiki.embarcadero.com/Libraries/XE5/de/System.SysUtils.IncludeTrailingPathDelimiter] an.


rushifell - Mi 23.04.14 18:36

Schau mal, hier ist ein Beispiel für CreateProcess:
http://www.delphipraxis.net/885-programm-starten-ohne-shellexecute.html

Viele Grüße