Programm über Parameter steuern

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Programm über Parameter steuern

Beitrag von DL3AD »

Hallo,
folgende Problematik.
Eine GUI-Anwendung schicke ich mit Form1.Hide in den Hintergrund und dort macht sie ihern Job.
Nun suche ich nach einer Möglickeit - z.B. über einen Parameter
projekt1 -S (auf der Konsole)
im Programm ein Form.Show zu erzeugen.

Wie kann man soetwas realisieren ?

Gruß Frank

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von m.fuchs »

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  if ParamStr(1) = '-s' then Self.Show;
end;     
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Programm über Parameter steuern

Beitrag von Mathias »

Somit werden dir alle Parameter aufgelistet.

Code: Alles auswählen

var
  i: integer;
begin
  for i := 1 to ParamCount do begin
    WriteLn(ParamStr(i));
  end;
end.

So nebenbei, gibt die ParamStr(0), der Name deines Programmes aus.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von m.fuchs »

Nein, ihm werden nicht alle Parameter aufgelistet, denn offensichtlich bearbeitet er ein GUI-Programm. Und da hilft WriteLn nicht viel.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von diogenes »

Daran liegt ein Problem. Da die Instanz schon läuft, kann man ihr nicht per Aufruf Parameter übergeben -- der Aufruf ist Vergangenheit, denn die Instanz läuft schon.

Ich rate, die Instanz regelmäßig auf die Existenz einer Datei zu prüfen, im Falle der Existenz diese zu löschen und sich mit Show wieder sichtbar zu machen. Wie man die Datei erzeugt? Nun, man ruft eine zweite Instanz der Anwendung mit dem besagten Parameter auf. Die tut nix, als die Datei zu erzeugen und sich selbst zu beenden. Daraufhin sieht die erste Instanz die Datei und macht sich sichtbar ...
Ceterum censeo computatores per Pascal docendos esse.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von m.fuchs »

Moment, jetzt werden hier zwei verschiedene Dinge aus dem Posting gelesen.

@DL3AD: Was möchtest du machen?

  1. Das Programm startet normalerweise ohne das Form anzuzeigen. In Ausnahmefällen möchtest du es starten und das Form soll erscheinen. Dies willst du per Startparameter lösen.

    oder

  2. Das Programm läuft und du willst dem laufenden Programm die Anweisung geben das Form anzuzeigen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Programm über Parameter steuern

Beitrag von Mathias »

Nein, ihm werden nicht alle Parameter aufgelistet, denn offensichtlich bearbeitet er ein GUI-Programm. Und da hilft WriteLn nicht viel.

Ich dachte, das Ganze bezieht sich auf folgenden Thread: viewtopic.php?f=55&t=11165
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Programm über Parameter steuern

Beitrag von DL3AD »

Hallo,

nein ich beziehe mich nicht auf den anderen Thread.

Ich starte eine GUI Anwendung in der mittels Form.Hide das Form unsichtbar gemacht wird.
Nun möchte ich durch irgendeine Interaktion dem laufendem Programm mitteilen das es Form.Show machen soll.
Ob dass nun Parameter, Befehl oder Anweisung heißt ist egal.
Ich sitze vor dem Rechner und mache etwas und das Form ist zu sehen (unter Win und Linux)

Wie machen ? :mrgreen:

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von m.fuchs »

Ok, das ist dann nicht über ParamStr lösbar.

Möglichkeiten gibt es da einige:
  • Regelmäßig auf eine Datei prüfen wie diogenes schon vorschlug.
  • Über irgendein Protokoll (DDE, HTTP, ...) eine Botschaft an das Programm senden.
  • Ein Trayicon verwenden um auf das Programm zuzugreifen.
  • ...

Kommt ein bisschen auf das Anwendungsszenario an.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von diogenes »

Ein Protokoll ist sicher die eleganteste Lösung, macht aber die Anwendung davon abhängig, ob das BS das Protokoll kennt. Bey TrayIcon muss die Oberfläche das können. Können die meisten. "Meine" Methode ist am generischsten, wenn ich so sagen darf. Damit könnte man auch reine Konsolenanwendungen im Hintergrund steuern.
Ceterum censeo computatores per Pascal docendos esse.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Programm über Parameter steuern

Beitrag von Mathias »

Vielleicht hilft die Komponente UniqueInstance weiter.

http://wiki.freepascal.org/UniqueInstance/de#Verlauf
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von diogenes »

Für mich sogar interessant, aber kann man damit auch eine Urinstanz steuern? Das ist es ja, was unser DL3EAD gefragt hat, oder?
Ceterum censeo computatores per Pascal docendos esse.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Programm über Parameter steuern

Beitrag von Mathias »

aber kann man damit auch eine Urinstanz steuern?

Im Wiki steht dies: SendParameters (default = false): Sendet vor dem Beenden die ggf. übergebenen Parameter an die bereits laufende Instanz.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

diogenes
Beiträge: 200
Registriert: So 11. Jul 2010, 18:39
OS, Lazarus, FPC: Linux
CPU-Target: 64 Bit
Wohnort: Wien
Kontaktdaten:

Re: Programm über Parameter steuern

Beitrag von diogenes »

Na, dann ist's OK :)
Ceterum censeo computatores per Pascal docendos esse.

Antworten