Sitzungsinformationen abrufen
Die Berechnung des Benutzerprofils von LibreOffice und der Systemdateipfade für gemeinsam genutzte Module kann mit Python oder mit Basissprachen durchgeführt werden. Aus diesen Informationen können die Speicherorte von BeanShell-, Java-, JavaScript- und Python-Skripten abgeleitet werden.
Beispiele:
Mit Python-Shell.
>>> from <the_module> import Session
>>> print(Session.SharedPythonScripts()) # statische Methode
>>> print(Session().UserName) # Objekteigenschaft
>>> input(Session().UserProfile) # Objekteigenschaft
Wählen Sie
.
from <the_module> import Session
def demo_session():
import screen_io as ui
ui.MsgBox(Session.Share(),title='Installation Share') # statische Methode
ui.Print(Session.SharedPythonScripts()) # statische Methode
s = Session() # Instanzerstellung
ui.MsgBox(s.UserName,title='Hello') # Objekteigenschaft
ui.Print(s.UserPythonScripts) # Objekteigenschaft
g_exportedScripts = (demo_session,) # öffentliche Makros
Mit LibreOffice Basic.
Sub Session_example()
Dim s As New Session ' instance of Session class
Print "Speicherort für freigegebene Skripte:", s.SharedScripts
MsgBox s.UserName,,"Hallo"
Print s.UserScripts, Chr(13), s.UserPythonScripts
End Sub ' Session_example
Verwenden von COM/OLE und Visual Basic-Skriptsprache.
' Der Service Manager ist immer der Einstiegspunkt
' Wenn kein Anwendung läuft, wird ein Anwendung gestartet
Set sm = WScript.CreateObject("com.sun.star.ServiceManager")
' Der Dienst PathSubstitution zeigt Informationen an, auf die geschlossen werden kann
' Standort <UserProfile|Share>/Scripts/python von
Set obj = sm.createInstance("com.sun.star.util.PathSubstitution")
MsgBox CreateObject("WScript.Network").UserName,, "Hello"
user = obj.getSubstituteVariableValue("$(user)")
MsgBox user & "/Scripts",, "User scripts location"
libO = Replace(obj.getSubstituteVariableValue("$(inst)"), "program/..", "Share")
MsgBox libO & "/Scripts",, "Shared scripts location"
Python-Sitzungsklasse:
import getpass, os, os.path, uno
class Session():
@staticmethod
def substitute(var_name):
ctx = uno.getComponentContext()
ps = ctx.getServiceManager().createInstanceWithContext(
'com.sun.star.util.PathSubstitution', ctx)
return ps.getSubstituteVariableValue(var_name)
@staticmethod
def Share():
inst = uno.fileUrlToSystemPath(Session.substitute("$(prog)"))
return os.path.normpath(inst.replace('program', "Share"))
@staticmethod
def SharedScripts():
return ''.join([Session.Share(), os.sep, "Scripts"])
@staticmethod
def SharedPythonScripts():
return ''.join([Session.SharedScripts(), os.sep, 'python'])
@property # Alternative zur Variable '$(username)'
def UserName(self): return getpass.getuser()
@property
def UserProfile(self):
return uno.fileUrlToSystemPath(Session.substitute("$(user)"))
@property
def UserScripts(self):
return ''.join([self.UserProfile, os.sep, 'Scripts'])
@property
def UserPythonScripts(self):
return ''.join([self.UserScripts, os.sep, "python"])
Im Gegensatz zu Basic wird die Normalisierung von Pfadnamen mit Python in der Session-Klasse durchgeführt.
LibreOffice Basic-Sitzungsklasse:
Option Explicit
Option Compatible
Option ClassModule
Private _ps As Object ' Privates Mitglied
Private Sub Class_Initialize()
GlobalScope.BasicLibraries.LoadLibrary("Tools")
Set _ps = CreateUnoService("com.sun.star.util.PathSubstitution")
End Sub ' Konstruktion
Private Sub Class_Terminate()
_ps = Nothing
End Sub ' Destruktion
Public Property Get SharedScripts() As String
Dim inst As String, shr As String
inst = ConvertFromURL(_ps.getSubstituteVariableValue("$(prog)"))
shr = Tools.Strings.ReplaceString(inst,"Share","program")
SharedScripts = shr & GetPathSeparator() &"Scripts"
End Property ' Session.sharedScripts
Public Property Get SharedPythonScripts() As String
sharedPythonScripts = sharedScripts() & GetPathSeparator() &"python"
End Property ' Session.sharedPythonScripts
Public Property Get UserName() As String ' Benutzerkontoname
userName = _ps.getSubstituteVariableValue("$(username)")
End Property ' Session.userName
Public Property Get UserProfile() As String ' Systempfad für Benutzerprofil
userProfile = ConvertFromURL(_ps.getSubstituteVariableValue("$(user)"))
End Property ' Session.userProfile
Public Property Get UserScripts() As String ' Systempfad für Benutzerskripte
userScripts = userProfile() & GetPathSeparator() &"Scripts"
End Property ' Session.userScripts
Public Property Get UserPythonScripts() As String ' Systempfad für Benutzer-Python-Skripte
userPythonScripts = userScripts() & GetPathSeparator() &"python"
End Property ' Session.userPythonScripts