Schauen ob Programm gestartet und in Vordergrund holen

Rund um die LCL und andere Komponenten

Schauen ob Programm gestartet und in Vordergrund holen

Beitragvon Timm Thaler » 16. Mär 2019, 13:23 Schauen ob Programm gestartet und in Vordergrund holen

Ich möchte einen Launcher für ein paar eigene Programm-Module schreiben. Die Programme können dabei von Hand, per verknüpfter Datei oder über den Launcher gestartet werden.

Beim Versuch, über den Launcher zu starten soll dieser schauen, ob das Programm schon läuft und dieses in den Vordergrund holen, ansonsten soll er es starten. Also ungefähr so wie bei LibreOffice.

Wie gehe ich da ran? Über die Programmnamen suchen? Die Programme haben recht eindeutige Namen, und sie laufen mit normalen Benutzerrechten.

Zielsystem: Windows, wenn möglich Linux mit GTK.
Timm Thaler
 
Beiträge: 874
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Warf » 16. Mär 2019, 18:18 Re: Schauen ob Programm gestartet und in Vordergrund holen

Ich würde es so machen:
Starte mit dem Programm eine named pipe oder message queue (z.b. Lazarus’ simple ipc Server). Im launcher Versuch dann einfach diese zu öffnen (simpleipcclient), falls die pipe exsistiert schreib was rein, sonst starte das program

Im program checkst du dann wenn in die pipe was geschrieben wurde (also der serve was received hat) und falls das die Message des launches ist ruf bringtofront auf

So arbeiten auch Programme wie Firefox, wenn man auf einen Link klickt (das startet einfach die Firefox exec mit dem Link als Argument). Der neue Firefox Prozess checkt ob’s schon eine pipe gibt, wenn ja wird der Link in die pipe geschrieben und der alte Prozess öffnet diesen, während der neue Prozess dann einfach stirbt
Warf
 
Beiträge: 1081
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: Mac OSX 10.11 | Win 10 | FPC 3.0.0 | L trunk | 
CPU-Target: x86_64, i368, ARM
Nach oben

Beitragvon MacWomble » 17. Mär 2019, 08:41 Re: Schauen ob Programm gestartet und in Vordergrund holen

Es gibt doch die Erweiterung RunOnce. Vielleicht findet man dort weitere Ansätze?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 775
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.80 / FP 3.3.1 SVN Rev 41791 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Swirl » 20. Mär 2019, 14:41 Re: Schauen ob Programm gestartet und in Vordergrund holen

Man könnte hierfür die Komponente UniqueInstance von Luiz Américo Pereira Câmara (auch per Online-Package-Manager
installierbar) benutzen. Eigenschaft Enabled True setzen und im Ereignishandler "OnOtherInstance" ein FormXYZ.BringToFront
ausführen.
Kubuntu 18.10 - Lazarus 1.8.4
Win7/10 Pro 64bit - Lazarus 2.0.0
Swirl
 
Beiträge: 25
Registriert: 7. Aug 2015, 13:05
Wohnort: Schwerte
CPU-Target: x86_64
Nach oben

Beitragvon MmVisual » 20. Mär 2019, 22:34 Re: Schauen ob Programm gestartet und in Vordergrund holen

Unter Windows geht es so:
Code: Alles auswählen
{$ifdef WINDOWS}
procedure TestMutex(sMutexText, sWindow: string);
var
  h: HWND;
begin
  mHandle := CreateMutex(nil, True, PChar(ansistring(sMutexText)));
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    if sWindow <> '' then // Anderes Fenster aktivieren
    begin
      h := FindWindow(nil, PChar(ansistring(sWindow)));
      if h <> 0 then
      begin
        ShowWindow(h, SW_RESTORE);
        SetForegroundWindow(h);
      end;
    end;
    Halt;
  end;
end;
{$endif}
MmVisual
 
Beiträge: 1058
Registriert: 10. Okt 2008, 22:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3) | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon Swirl » 21. Mär 2019, 12:36 Re: Schauen ob Programm gestartet und in Vordergrund holen

Nachtrag:
Komponente UniqueIstance läuft bei mir unter Win7/10, sowie kubuntu18.10 und aktuellem Rasbian.
Gruß,
Michael
Kubuntu 18.10 - Lazarus 1.8.4
Win7/10 Pro 64bit - Lazarus 2.0.0
Swirl
 
Beiträge: 25
Registriert: 7. Aug 2015, 13:05
Wohnort: Schwerte
CPU-Target: x86_64
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried