Seite 1 von 4

Rechner herunterfahren per Makro

Verfasst: Mo 1. Jul 2013, 23:24
von Sephan
Ist es möglich per Makro und Button in Base den Rechner herunterzufahren? Über eine kurze Suche konnte ich dazu nichts finden.

Re: Rechner herunterfahren per Makro

Verfasst: Di 2. Jul 2013, 06:27
von F3K Total
Hi,
ohne Angabe des Betriebssystemes?
Für W7 -32 geht z.B. diese Batch-Datei per Makro auszuführen:
Batch(Shutdown.bat):

Code: Alles auswählen

@echo off
cd C:\Windows\System32
C:\Windows\System32\shutdown.exe -s -f -t 900
Die 900 steht für die Zeit in Sekunden bis zum Herunterfahren.
Makro:

Code: Alles auswählen

Sub S_Shutdown_Windows
    if msgbox ("Soll Windows heruntergefahren werden?",36,"Shutdown") = 6 then
        sfolder = "C:\Users\<Ordner>" 'hierhin wird in der Batch mit CD gewechselt
        surl = sfolder + "/Shutdown.bat" '
        sfolderpath = convertfromurl(sfolder)
        sPath = convertfromurl(surl)
        Shell(sPath,4,sfolderpath)
    endif
End Sub
R

Re: Rechner herunterfahren per Makro

Verfasst: Di 2. Jul 2013, 07:31
von Sephan
Oh sorry, ich wollte ja erstmal nur wissen, ob es überhaupt geht. Und es handelt sich dabei um ein Ubuntu :)
Das wird dann einfach so gehen wie hier beschrieben:
http://wiki.ubuntuusers.de/Herunterfahr ... zerrechten

Cool wäre es, wenn das Makro auch das System erkennen könnte und für Windows und Linux dann das passende Makro verwendet.

Re: Rechner herunterfahren per Makro

Verfasst: Di 2. Jul 2013, 18:10
von lorbass
Sephan hat geschrieben:Cool wäre es, wenn das Makro auch das System erkennen könnte […]
Lies in Michael Dannenhöfers StarBasic / OpenOffice.org Basic FAQ den Abschnitt 2.3.35 Wie kann man das verwendete Betriebssystem auslesen?. Ubuntu sortierst du unter 4 ein ;)

shutdown musst du als root – also mit sudo – starten oder sudoers mit sudo visudo entsprechend anpassen.

Gruß
lorbass

Re: Rechner herunterfahren per Makro

Verfasst: Di 2. Jul 2013, 18:14
von Sephan
lorbass hat geschrieben: shutdown musst du als root – also mit sudo – starten oder sudoers mit sudo visudo entsprechend anpassen.
Jep, siehe mein Link ;)

Und danke für deine Links ;)

Re: Rechner herunterfahren per Makro

Verfasst: Do 4. Jul 2013, 17:08
von Sephan
Gibt es bei "sfolder =" auch die Möglichkeit relative Pfade zu verwenden? Zum Beispiel möchte ich die Skripte in das gleiche Verzeichnis der Base Datei packen, die diese Skripte aufruft. Habs grad unter Windows getestet. Ein .\ funktioniert nicht.

Re: Rechner herunterfahren per Makro

Verfasst: Do 4. Jul 2013, 20:47
von F3K Total
Hallo Sephan,
Sephan hat geschrieben:Gibt es bei "sfolder =" auch die Möglichkeit relative Pfade zu verwenden?
um den aktuellen Ordener zu bestimmen, verwende ich meist diesen Code. Wichtig:Keine Sonderzeichen/Leerzeichen im Pfad.

Code: Alles auswählen

sub S_get_Current_Folder
sFolderUrl =replace(ThisComponent.url,ThisComponent.Title,"")
msgbox sFolderUrl 
end sub
Allerdings:
Sephan hat geschrieben:... in das gleiche Verzeichnis der Base Datei packen ...
Damit wäre ich vorsichtig.
Wenn Du Base so, wie es kommt, verwendest, wird die eingebettete HSQL-DB erst dann korrekt heruntergefahren, wenn LibreOffice korrekt beendet wurde, du erkennst es an einer .lck Datei, die erst dann verschwindet. Nur zu Speichern reicht nicht.
Fährst Du also das Betriebssystem per Makro herunter, ohne das LibreOffice korrekt beendet wurde, läuftst du Gefahr, Daten zu verlieren, ggf. sogar die ganze Datenbank.

Gruß R

Re: Rechner herunterfahren per Makro

Verfasst: Do 4. Jul 2013, 22:03
von Sephan
Also aktuell mache ich es so. Das Makro ruft die batch/shell Datei auf und diese macht ein verzögertes Shutdown.

Danach folgt in meinem Base Makro dieses hier zum Beenden von LibreOffice:

'Formular schiesen
oDoc = thisComponent.currentController.frame
oDispatch = createUnoService("com.sun.star.frame.DispatchHelper")
oDispatch.executeDispatch(oDoc, ".uno:CloseDoc", "", 0, Array())

'Oo beenden Version 1 (ohne Shell)
oDoc = ThisDatabaseDocument
oDoc.store()
oDoc.close(True)
'Shell("soffice.exe",1)

EDIT: Bei mir liefert dein Skript nen leeren Wert zurück. Sowohl unter Windows als auch unter Linux.

Re: Rechner herunterfahren per Makro

Verfasst: Do 4. Jul 2013, 22:46
von F3K Total
Liegt vermutlich am "Startort" des Makros, wenn es in der Base-Datei liegt, kannst Du auch dieses nehmen:

Code: Alles auswählen

sub S_get_Current_Folder
sFolderUrl =replace(ThisDatabasedocument.url,ThisDatabasedocument.Title,"")
msgbox sFolderUrl
end sub
Gruß R
EDIT: Funktioniert sowohl unter W7 als auch unter Linux Mint, die aktuelle Datei muss natürlich gespeichert sein, sonst hat sie keinen Pfad.
Ausserdem funktioniert

Code: Alles auswählen

ThisComponent
nicht aus eingebetteten Base-Formularen heraus, die haben auch keinen eigenen Speicherpfad. Darum dann

Code: Alles auswählen

ThisDatabaseDocument
verwenden.

Re: Rechner herunterfahren per Makro

Verfasst: Do 4. Jul 2013, 23:19
von Sephan
Habs eben auf WinXP und Ubuntu getestet. Läuft.

Hatte es zwar im Internet gesucht, aber leider nichts passendes bzw. funktionierendes zu gefunden. Also Danke dir nochmal ;)