ubuntuusers.de

Verhindern, dass ein Fenster in den Vordergrund tritt

Status: Ungelöst | Ubuntu-Version: Xubuntu 22.04 (Jammy Jellyfish)
Antworten |

uzfH8

Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

Das konkrete Problem ist, dass in LibreOffice ein Makro läuft, das irgendwann eine Benutzerinteraktion erfordert, im einfachsten Fall mit dem Befehl MsgBox einen Dialog anzeigt. Immer wenn das der Fall ist tritt das LibreOfficefenster in den Vordergrund und wenn man gerade etwas schreibt, landen die Tastendrücke dann dort. Ich habe in der Fensterverwaltung nichts Vielversprechendes dazu gefunden. Kann man das irgendwie unterbinden?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17579

Wohnort: Berlin

Was ist das denn für ein Makro (nicht, dass ich mich mit LO auskennen würde). Kommt das so oft?

uzfH8

(Themenstarter)
Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

user_unknown schrieb:

Was ist das denn für ein Makro (nicht, dass ich mich mit LO auskennen würde). Kommt das so oft?

So oft das Makro gebraucht wird. Geschätzt 50mal in der Woche. Die beiliegende Demo funktioniert wie folgt

  1. In LibreOffice unter Extras → LibreOffice → Optionen → Sicherheit → Makrosicherheit auf niedrig stellen

  2. Beten, dass das nicht ein Trick von mir ist, einen Wurm zu verteilen

  3. Die Datei msgbox-demo-25-10-2023.odt öffnen

  4. Alt+1 drücken

  5. Irgendetwas anderes machen, so dass ein anderes Fenster im Vordergrund ist

Nach 8 Sekunden drängt sich LibreOffice in den Vordergrund und fragt, ob man die Demo nochmal laufen lassen will.

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1087

Leider hängt keine Datei an ... oder zum Glück ... wie auch immer ... muss es eine MessageBox sein?
Ist es eine MessageBox mit Ja/Nein Button?
Die MessageBox Funktion ist anscheinend mit dem Hauptformular derart verknüpft, dass das Hauptformular unmittelbar mit angezeigt wird.

Wenn es nur eine Nachricht sein kann, dann probiere folgenden Code:

x = Shell("notify-send 'Soll die Demo nochmal laufen?'")

Hier wird mittels notify-send der interne Benachrichtigungsdienst bemüht um eine Nachricht auf dem Desktop anzuzeigen.

Ansonsten müsstest du mal probieren, was passiert wenn man via Code ein Neues Formular erstellt und anzeigt, ob dann auch das Hauptfenster wieder mit nach vorne springt oder nicht.

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1087

sh4711 schrieb:

... was passiert wenn man via Code ein Neues Formular erstellt und anzeigt, ...

Du musst das Formular nicht unmittelbar im Code erstellen. Kannst auch ein mit dem Designer erstelltes Formular nehmen/testen. Habe mich da ungeschickt ausgedrückt.

uzfH8

(Themenstarter)
Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

sh4711 schrieb:

Leider hängt keine Datei an ...

Das ist mir schon einmal passiert, dass ich eine Datei nicht hochladen konnte. Auf ein Neues

  1. Ich klicke das Dreieck vor "Anhänge". Ein Textblock klappt aus.

  2. Ich klicke den "Durchsuchen"-Knopf in diesem Textblock.

  3. Ich wähle msgbox-demo-25-10-2023.odt. Das wird nun neben dem "Durchsuchen"-Knopf angezeigt.

  4. Ich Klicke "Anhang hochladen". Der Textblock klappt ein.

  5. Ich klicke zur Kontrolle das Dreieck vor "Anhänge". Der Textblock klappt wieder aus. Dort wird nun msgbox-demo-25-10-2023.odt in blau angezeigt

  6. Ich drücke in Kürze "Veröffentlichen"

Mal sehen, ob es diesmal funktioniert

msgbox-demo-25-10-2023.odt (12.5 KiB)
Download msgbox-demo-25-10-2023.odt

uzfH8

(Themenstarter)
Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

sh4711 schrieb:

Wenn es nur eine Nachricht sein kann, dann probiere folgenden Code:

x = Shell("notify-send 'Soll die Demo nochmal laufen?'")

Hier wird mittels notify-send der interne Benachrichtigungsdienst bemüht um eine Nachricht auf dem Desktop anzuzeigen.

Das wäre ein nettes zusätzliches Feature, das ich vielleicht einmal ausprobiere. Im Moment will ich nur, das nichts erscheint. Weder eine Abfrage soll mich stören, noch das LibreOfficefenster. Das Makro soll einfach ablaufen und die beiden Fenster sollen im Hintergrund bleiben, bis ich Sie per Taskswitcher selbst in den Vordergrund hole.

uzfH8

(Themenstarter)
Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

sh4711 schrieb:

Ansonsten müsstest du mal probieren, was passiert wenn man via Code ein Neues Formular erstellt und anzeigt, ob dann auch das Hauptfenster wieder mit nach vorne springt oder nicht.

Das wäre einen Versuch wert.

Hier der BASIC-Code, falls ihn jemand lieber selbst ein ein Modul einfügt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Sub Main
Dim iAntwort As Integer
iAntwort = IDYES
Dim lWaitMilliseconds As Long
lWaitMilliseconds = 8000
While iAntwort = IDYES
    Wait lWaitMilliseconds
    iAntwort = Msgbox("Wiederholen?", MB_YESNO, "Nochmal warten") 
Wend
End Sub

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1211

notify-send ist nicht störend. Du brauchst ja auch nur einen kurzen Text ausgeben und einen Timeout von ein paar Sekunden mitgeben, dann bist du wenigstens informiert worden. Die Nachricht verschwindet dann von selber wieder und nimmt dir auch nicht den Tastaturfokus weg.

uzfH8

(Themenstarter)
Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

juribel schrieb:

... dann bist du wenigstens informiert worden.

Danke für die Erläuterung, aber das ist nicht mein Problem. Ich muss nicht informiert werden. Ich bin völlig zufrieden, wenn ich ungestört arbeiten kann.

Mein Programm, also das das auf mir läuft, soll so aussehen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Polling
Do while not Zusammenbruch vor Erschöpfung
    arbeite mit Libreoffice
    reset makrofertigflag
    Makro in LibreOffice starten
    Do while not makrofertigfleg
        arbeite mit anderen Programmen
        LibreOffice in den Vordergrund bringen
        set makrofertigflag if Abfrage sichtbar
    Loop
    beantworte abfrage    
Loop

Derzeit bin ich aber durch LibreOffice zwangsweise interrupt driven. Das will ich abstellen.

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 4346

Irgendwie schon lustig, da macht sich jemand etwas, um sich selbst zu stören, und beschwert sich dann darüber, gestört zu werden. ☺

uzfH8

(Themenstarter)
Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

trollsportverein schrieb:

Irgendwie schon lustig, da macht sich jemand etwas, um sich selbst zu stören, und beschwert sich dann darüber, gestört zu werden. ☺

Die MsgBox ist eine Notwendigkeit, weil eine Benutzerinteraktion erforderlich ist. Die soll selbstverständlich erscheinen, wenn das Makro Fragen an den Benutzer hat, wie es weitergehen soll. Sie soll zusammen mit dem Hauptfenster dann erscheinen, wenn ich zu diesem Hauptfenster wechsle. Sie soll nicht erscheinen, wenn ich gerade in einem ganz anderen Programm etwas schreibe und mir dann die Tastendrücke klauen und die sonstwie interpretieren und irgendwelchen Blödsinn machen.

Udalrich

Anmeldungsdatum:
15. Mai 2019

Beiträge: 533

Zwar kann man ein Fenster in den "immer im Hintergrund" schicken, also das Gegenteil von Rechtsklick über dem Programmsymbol in der „Fensterknöpfe“-Symbolleiste und dann „Immer im Vordergrund“:

wmctrl -r Libreoffice -b add,below

Doch wenn das Programm dieses Fensters, hier Libreoffice, ein neues Unterfenster aufmacht – ich nehme an „MsgBox“ macht sowas? –, dann hält sich dieses Unterfenster nicht an die Einstellungen des Hauptfensters und erscheint im Vordergrund und stiehlt den Fokus…

Also nix gewonnen, fürchte ich.

uzfH8

(Themenstarter)
Avatar von uzfH8

Anmeldungsdatum:
3. Mai 2013

Beiträge: 1011

Udalrich schrieb:

Doch wenn das Programm dieses Fensters, hier Libreoffice, ein neues Unterfenster aufmacht – ich nehme an „MsgBox“ macht sowas?

Keine Ahnung. Ich habe es gerade probiert und das MsgBox-Fenster erscheint nach wie vor und klaut die Tastatur. Der Unterschied ist, dass es jetzt nicht mehr das LibreOfficefenster mit in den Vordergrund zieht; also leider wie Du vorhergesagt hast.

Zusatzfrage: Das Hauptfenster kommt jetzt hartnäckig nicht mehr in den Vordergrund. Ein Klick auf das Symbol in der Taskleiste ist wirkungslos. Mit

1
wmctrl -r Libreoffice -b toggle,below

hat sich das gebessert. Ist das ausreichend oder muss ich da noch irgendwelche Neben-und Spätwirkungen befürchten.

Udalrich

Anmeldungsdatum:
15. Mai 2019

Beiträge: 533

Schade, wie befürchtet.

Ja, das Entfernen des below-Attributes genügt (mittels toggle oder remove). Auch, wenn man das per wmctrl konfigurierte Programmfenster, Libreoffice in dem Fall, beenden und neu starten würde.

Antworten |