🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Rechner herunterfahren per Makro

Alles zur Programmierung im LibreOffice.
F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Rechner herunterfahren per Makro

Beitrag von F3K Total » Fr 5. Jul 2013, 06:40

Moin,
Sephan hat geschrieben:Danach folgt in meinem Base Makro dieses hier zum Beenden von LibreOffice: ...
Problem: Du schließt ein Dokument, und beendest LO so. Hast Du ein zweites Dokument in LO geöffnet, kommte es zu dem angesprochenen Problem.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Sephan
Beiträge: 153
Registriert: Mi 26. Jan 2011, 13:16

Re: Rechner herunterfahren per Makro

Beitrag von Sephan » Fr 5. Jul 2013, 08:19

Dass ein zweites Dokument geöffnet ist kommt eigentlich nicht vor. Aber wer weiß :)

Kann man denn das Makro dahingehend verbessern?

EDIT:
Mir ist gerade noch was aufgefallen. Wenn man die Base Datei mit einer Verküpfung auf dem Desktop startet und dann mit dem genannten makro beendet, klappt das nicht. Scheinbar weil der Pfad irgendwie anders ist?

EDIT2:
Und noch ein Problem. Mit dem beenden Skript wird libreoffice nicht ganz beendet. Die Fenster gehen zwar weg, aber in der Prozessliste taucht es noch auf. Schlecht, denn ich wollte prüfen, ob das Programm geschlossen ist und dann den Computer runterfahren lassen.

Sephan
Beiträge: 153
Registriert: Mi 26. Jan 2011, 13:16

Re: Rechner herunterfahren per Makro

Beitrag von Sephan » Sa 6. Jul 2013, 19:41

Habe mich mal zu dem Thema durchs Internet gewühlt. Scheinbar gibt es keine echten Lösungen für das Beenden Problem. Ich habe auch mal mein Auto Formular öffnen Skript deaktiviert. Das hilft auch nichts. Gibt es also keine ordentliche Möglichkeit Base per Makro zu schließen?

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Rechner herunterfahren per Makro

Beitrag von F3K Total » Sa 6. Jul 2013, 20:09

Hi,
so könnte es funktionieren, dazu den Schnellstarter deaktivieren (Extras/Optionen/LOorg/Arbeisspeicher)

Code: Alles auswählen

Sub Shutdown_AOO_and_OS
    ocontroller = thisdatabasedocument.currentcontroller
    oConnection = ocontroller.ActiveConnection
    oStatement = oconnection.createstatement
    sSQL = "Shutdown Compact"
    oStatement.execute(sSQL)
    thisdatabasedocument.store
    thisdatabasedocument.close -1
   wait 1000
    if msgbox ("Soll Windows heruntergefahren werden?",36,"Shutdown") = 6 then
        sfolder = "C:\Users\<folder>" 'hierhin wird in der Batch mit CD gewechselt
        surl = sfolder + "/Shutdown.bat" '
        sfolderpath = convertfromurl(sfolder)
        sPath = convertfromurl(surl)
        Shell(sPath,4,sfolderpath)
    endif
    stardesktop.terminate
end sub
EDIT: habe terminate ans Ende gestellt, sonst wird das OS nicht heruntergefahren weil der Shell-Befehl nicht mehr ausgeführt wird ...
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Sephan
Beiträge: 153
Registriert: Mi 26. Jan 2011, 13:16

Re: Rechner herunterfahren per Makro

Beitrag von Sephan » Sa 6. Jul 2013, 20:55

Damit wird Libreoffice zwar wirklich beendet, allerdings kommt es immer wieder mal zu einer Dateiwiederherstellung beim nächsten Libreoffice Start.

EDIT: Kann es sein, dass es auch noch ein Problem ist LibreOffice zu beenden, wenn man noch das Beenden Skript läuft? Denn so wie ich das gerade probiert habe, kann dann auch dein Skript LibreOffice nicht mehr beenden.

EDIT2: Hab es eben mal noch öfter getestet ohne shutdown skript. LibreOffice scheint auch so hin und wieder nicht richtig beendet zu werden. Hat aber keinen Einfluss auf die Dokumentenwiederherstellung.

EDIT3: Test übrigens unter Ubuntu ;)

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Rechner herunterfahren per Makro

Beitrag von F3K Total » Sa 6. Jul 2013, 22:20

Hi,
schau mal hier, da gibt es die deutsche Fassung von Andrew Pitonyak's OpenOffice.org Macros Explained. Darin findest Du ab Seite 258 (.pdf-Version) das Kapitel:
12.3.1. Schließen des Desktops und der enthaltenen Komponenten
Vielleicht hilft es Dir.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Sephan
Beiträge: 153
Registriert: Mi 26. Jan 2011, 13:16

Re: Rechner herunterfahren per Makro

Beitrag von Sephan » So 7. Jul 2013, 00:35

Da steht aber auch: "Manche Komponententypen unterstützen das Interface XCloseable nicht. Ein Beispiel ist die Basic-IDE." Jedenfalls funktioniert das dort erwähnte Beispiel leider nicht :(

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Rechner herunterfahren per Makro

Beitrag von F3K Total » So 7. Jul 2013, 08:21

Tja,
mehr Ideen habe ich auch nicht ... Da kannst Du nur selbst versuchen wie du mit dispose und close klar kommst.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Sephan
Beiträge: 153
Registriert: Mi 26. Jan 2011, 13:16

Re: Rechner herunterfahren per Makro

Beitrag von Sephan » So 7. Jul 2013, 10:29

Wenn du das nicht mal hinbekommst, brauch ich mir gar nicht die Mühe machen, denke ich ;)

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Rechner herunterfahren per Makro

Beitrag von gogo » So 7. Jul 2013, 13:02

Sephan hat geschrieben:Habe mich mal zu dem Thema durchs Internet gewühlt. Scheinbar gibt es keine echten Lösungen für das Beenden Problem.
Ob es mit der HSQL-DB funktioniert weiß ich nicht, auf jeden Fall funktioniert folgendes Makro unter diversen Win und Linux-Versionen und LO ab etwa 3.3.2 wenn Du eine externe Datenbank verwendest:

Code: Alles auswählen

sub Datenbank_schliessen(oEvent)
	oEvent.Source.Model.Parent.Parent.Parent.Parent.close(true)
end sub
unter folgenden Voraussetzungen:
1. Das Makro muss außerhalb der Base-Datei gespeichert sein (z.B. in einer Extension)
2. der Auslöser (oEvent) muss sich auf ein Kontrollelement in einem Formular (nicht Unterformular) eines Datenbank-Formulars befinden. - kompliziert ausgedrückt ... einfacher:

Code: Alles auswählen

oEvent.Source.Model.Parent.Parent.Parent.Parent.close(true)
'-------------------------------------------------------------------------------
OEVENT.: "Aktion ausführen" eines Buttons
      .SOURCE.MODEL.: das Model dieses Buttons
                   .PARENT.: "Formular-Objekt" in dem sich der Button befindet
                          .PARENT.: "Forms-Container" in dem sich das "Formular-Objekt" befindet
                                 .PARENT.: "Writer-Dokument" in dem sich der "Forms-Container" befindet
                                        .PARENT.: Base-Dokument in dem sich das "Writer-Dokument" befindet
                                               .CLOSE(TRUE): Methode die die Base-Datei schließt
... sollte sich der Auslöser in einem Unterformular befinden einfach noch ein .PARENT. dazwischenhängen.
Ob man so ähnlich den Stardesktop auch beenden kann weiß ich nicht, aber auch wenn du das mit .terminate machst: wenn die Base-Datei vorher korrekt beendet wurde, ist ein Datenverlust nicht zu befürchten.
Auf Unix-Dateisystemen kannst Du das anlegen von lck-Dateien verhindern indem Du die Dateirechte für die odb-Datei und das Verzeichnis entsprechend anpasst. Das machen wir um bei Problemen zu verhindern, dass sich die User die Datei "wiederherstellen" obwohl sie das gar nicht sollten ;)
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten