Hallo
ich suche danach, wie ich mittels bekannter PID unter Linux ein Programm in den Vordergrund setzen kann.
Ich starte aus einem Programm, mehrere Instanzen eines anderen Programms.
Das Start Programm hat Tasten, mit denen zwischen den Instanze gewechselt werden kann.
Unter Windows klappt das mit MainFormHandle von den Instanzen und der Funktion SetForegroundWindow(MainFormHandle);
Leider habe ich bis jetzt keinen Weg unter Linux gefunden.
Ich weiss die PID's von den Programmen (synonym zum MainFormHandle) aber ich weiss nicht, mit welchem Befehl ich diese PID ansprechen kann und den Prozess in der Vordergrund rufen kann.
Hat das jemand schon mal gelöst.
Oder hat einer einen Tipp, nach was ich suchen muss.
ChatGPT bringt auch nichts brauchbares.
Vielen dank im voraus
per PID Programm in den Vordergrund holen
Re: per PID Programm in den Vordergrund holen
Für X11 hilft dir vielleicht die Winlist weiter, die ich vor Jahren mal gebastelt habe.
https://www.theo.ch/lazarus/winlist.zip
https://www.theo.ch/lazarus/winlist.zip
Re: per PID Programm in den Vordergrund holen
Wie wäre es mit xdotool (https://github.com/jordansissel/xdotool) oder kdotool (https://github.com/jinliu/kdotool)? Ich befürchte, unter Linux gibt es keinen standardisierten Weg hierfür - schon alleine, weil es Window Manager wie Sand am Meer gibt.
Re: per PID Programm in den Vordergrund holen
fpsystem('wmctrl -R "[NAME DEINES PROGRAMMS]"');
Installieren:
sudo apt install wmctrl
Installieren:
sudo apt install wmctrl
Gruß, Michael
-
- Beiträge: 9
- Registriert: Mo 18. Aug 2008, 15:37
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Schaffhausen
Re: per PID Programm in den Vordergrund holen
Besten Dank für die Hilfe.
Habs mit wmctrl -a gemacht.
Aber ....
Das mit wmctrl funktioniert so lange, bis ich ein weiteres Formular im aktiven Programm mit ShowModal aufrufe.
Diese Formular bleit dann OnTop auch wenn ich wieder mit wmctrl ein anderes Programm aktiviere.
Das neu ausgewählte Programm wird zwar nach vorne geholt und das Hauptformular vom anderen ist weg aber das zweite Formular vom alten Programm bleib ganz vorne.
gibt es dazu eine Lösungsansatz?
Also, dass ich wirklich die ganze App / das ganze Programm incl. aller geöffneten Forumulare wechseln kann.
Hinweis:
hat nichts mit fsStayOnTop zu tun. Das habe ich schon abgeklärt.
Habs mit wmctrl -a gemacht.
Code: Alles auswählen
Process.Executable := 'lxterminal';
Process.Parameters.Add('-e');
Process.Parameters.Add('sudo');
Process.Parameters.Add('wmctrl');
Process.Parameters.Add('-a');
Process.Parameters.Add('xxxxx_' + FormatFloat('00',varNr));
Process.Parameters.Add('');
Process.Options := Process.Options + [poWaitOnExit];
Process.Execute();
Aber ....
Das mit wmctrl funktioniert so lange, bis ich ein weiteres Formular im aktiven Programm mit ShowModal aufrufe.
Diese Formular bleit dann OnTop auch wenn ich wieder mit wmctrl ein anderes Programm aktiviere.
Das neu ausgewählte Programm wird zwar nach vorne geholt und das Hauptformular vom anderen ist weg aber das zweite Formular vom alten Programm bleib ganz vorne.
gibt es dazu eine Lösungsansatz?
Also, dass ich wirklich die ganze App / das ganze Programm incl. aller geöffneten Forumulare wechseln kann.
Hinweis:
hat nichts mit fsStayOnTop zu tun. Das habe ich schon abgeklärt.