SF_Platform.xba 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
  3. <script:module xmlns:script="http://openoffice.org/2000/script" script:name="SF_Platform" script:language="StarBasic" script:moduleType="normal">REM =======================================================================================================================
  4. REM === The ScriptForge library and its associated libraries are part of the LibreOffice project. ===
  5. REM === Full documentation is available on https://help.libreoffice.org/ ===
  6. REM =======================================================================================================================
  7. Option Compatible
  8. Option Explicit
  9. &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
  10. &apos;&apos;&apos; SF_Platform
  11. &apos;&apos;&apos; ===========
  12. &apos;&apos;&apos; Singleton class implementing the &quot;ScriptForge.Platform&quot; service
  13. &apos;&apos;&apos; Implemented as a usual Basic module
  14. &apos;&apos;&apos;
  15. &apos;&apos;&apos; A collection of properties about the execution environment:
  16. &apos;&apos;&apos; - HW platform
  17. &apos;&apos;&apos; - Operating System
  18. &apos;&apos;&apos; - current user
  19. &apos;&apos;&apos; - LibreOffice version
  20. &apos;&apos;&apos;
  21. &apos;&apos;&apos; Service invocation example:
  22. &apos;&apos;&apos; Dim platform As Variant
  23. &apos;&apos;&apos; platform = CreateScriptService(&quot;Platform&quot;)
  24. &apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;&apos;
  25. REM ================================================================== EXCEPTIONS
  26. REM ============================================================ MODULE CONSTANTS
  27. REM ===================================================== CONSTRUCTOR/DESTRUCTOR
  28. REM -----------------------------------------------------------------------------
  29. Public Function Dispose() As Variant
  30. Set Dispose = Nothing
  31. End Function &apos; ScriptForge.SF_Array Explicit destructor
  32. REM ================================================================== PROPERTIES
  33. REM -----------------------------------------------------------------------------
  34. Property Get Architecture() As String
  35. &apos;&apos;&apos; Returns the actual bit architecture
  36. &apos;&apos;&apos; Example:
  37. &apos;&apos;&apos; MsgBox platform.Architecture &apos; 64bit
  38. Architecture = _PropertyGet(&quot;Architecture&quot;)
  39. End Property &apos; ScriptForge.SF_Platform.Architecture (get)
  40. REM -----------------------------------------------------------------------------
  41. Property Get ComputerName() As String
  42. &apos;&apos;&apos; Returns the computer&apos;s network name
  43. &apos;&apos;&apos; Example:
  44. &apos;&apos;&apos; MsgBox platform.ComputerName
  45. ComputerName = _PropertyGet(&quot;ComputerName&quot;)
  46. End Property &apos; ScriptForge.SF_Platform.ComputerName (get)
  47. REM -----------------------------------------------------------------------------
  48. Property Get CPUCount() As Integer
  49. &apos;&apos;&apos; Returns the number of Central Processor Units
  50. &apos;&apos;&apos; Example:
  51. &apos;&apos;&apos; MsgBox platform.CPUCount &apos; 4
  52. CPUCount = _PropertyGet(&quot;CPUCount&quot;)
  53. End Property &apos; ScriptForge.SF_Platform.CPUCount (get)
  54. REM -----------------------------------------------------------------------------
  55. Property Get CurrentUser() As String
  56. &apos;&apos;&apos; Returns the name of logged in user
  57. &apos;&apos;&apos; Example:
  58. &apos;&apos;&apos; MsgBox platform.CurrentUser
  59. CurrentUser = _PropertyGet(&quot;CurrentUser&quot;)
  60. End Property &apos; ScriptForge.SF_Platform.CurrentUser (get)
  61. REM -----------------------------------------------------------------------------
  62. Property Get Machine() As String
  63. &apos;&apos;&apos; Returns the machine type like &apos;i386&apos; or &apos;x86_64&apos;
  64. &apos;&apos;&apos; Example:
  65. &apos;&apos;&apos; MsgBox platform.Machine
  66. Machine = _PropertyGet(&quot;Machine&quot;)
  67. End Property &apos; ScriptForge.SF_Platform.Machine (get)
  68. REM -----------------------------------------------------------------------------
  69. Property Get ObjectType As String
  70. &apos;&apos;&apos; Only to enable object representation
  71. ObjectType = &quot;SF_Platform&quot;
  72. End Property &apos; ScriptForge.SF_Platform.ObjectType
  73. REM -----------------------------------------------------------------------------
  74. Property Get ServiceName As String
  75. &apos;&apos;&apos; Internal use
  76. ServiceName = &quot;ScriptForge.Platform&quot;
  77. End Property &apos; ScriptForge.SF_Platform.ServiceName
  78. REM -----------------------------------------------------------------------------
  79. Property Get OfficeVersion() As String
  80. &apos;&apos;&apos; Returns the office software version in the form &apos;LibreOffice w.x.y.z (The Document Foundation)&apos;
  81. &apos;&apos;&apos; Example:
  82. &apos;&apos;&apos; MsgBox platform.OfficeVersion
  83. OfficeVersion = _PropertyGet(&quot;OfficeVersion&quot;)
  84. End Property &apos; ScriptForge.SF_Platform.OfficeVersion (get)
  85. REM -----------------------------------------------------------------------------
  86. Property Get OSName() As String
  87. &apos;&apos;&apos; Returns the name of the operating system like &apos;Linux&apos; or &apos;Windows&apos;
  88. &apos;&apos;&apos; Example:
  89. &apos;&apos;&apos; MsgBox platform.OSName
  90. OSName = _PropertyGet(&quot;OSName&quot;)
  91. End Property &apos; ScriptForge.SF_Platform.OSName (get)
  92. REM -----------------------------------------------------------------------------
  93. Property Get OSPlatform() As String
  94. &apos;&apos;&apos; Returns a single string identifying the underlying platform with as much useful and human-readable information as possible
  95. &apos;&apos;&apos; Example:
  96. &apos;&apos;&apos; MsgBox platform.OSPlatform &apos; Linux-4.15.0-117-generic-x86_64-with-Ubuntu-18.04-bionic
  97. OSPlatform = _PropertyGet(&quot;OSPlatform&quot;)
  98. End Property &apos; ScriptForge.SF_Platform.OSPlatform (get)
  99. REM -----------------------------------------------------------------------------
  100. Property Get OSRelease() As String
  101. &apos;&apos;&apos; Returns the operating system&apos;s release
  102. &apos;&apos;&apos; Example:
  103. &apos;&apos;&apos; MsgBox platform.OSRelease &apos; 4.15.0-117-generic
  104. OSRelease = _PropertyGet(&quot;OSRelease&quot;)
  105. End Property &apos; ScriptForge.SF_Platform.OSRelease (get)
  106. REM -----------------------------------------------------------------------------
  107. Property Get OSVersion() As String
  108. &apos;&apos;&apos; Returns the name of the operating system build or version
  109. &apos;&apos;&apos; Example:
  110. &apos;&apos;&apos; MsgBox platform.OSVersion &apos; #118-Ubuntu SMP Fri Sep 4 20:02:41 UTC 2020
  111. OSVersion = _PropertyGet(&quot;OSVersion&quot;)
  112. End Property &apos; ScriptForge.SF_Platform.OSVersion (get)
  113. REM -----------------------------------------------------------------------------
  114. Property Get Processor() As String
  115. &apos;&apos;&apos; Returns the (real) processor name, e.g. &apos;amdk6&apos;. Might return the same value as Machine
  116. &apos;&apos;&apos; Example:
  117. &apos;&apos;&apos; MsgBox platform.Processor
  118. Processor = _PropertyGet(&quot;Processor&quot;)
  119. End Property &apos; ScriptForge.SF_Platform.Processor (get)
  120. REM ===================================================================== METHODS
  121. REM -----------------------------------------------------------------------------
  122. Public Function GetProperty(Optional ByVal PropertyName As Variant) As Variant
  123. &apos;&apos;&apos; Return the actual value of the given property
  124. &apos;&apos;&apos; Args:
  125. &apos;&apos;&apos; PropertyName: the name of the property as a string
  126. &apos;&apos;&apos; Returns:
  127. &apos;&apos;&apos; The actual value of the property
  128. &apos;&apos;&apos; If the property does not exist, returns Null
  129. &apos;&apos;&apos; Exceptions:
  130. &apos;&apos;&apos; ARGUMENTERROR The property does not exist
  131. Const cstThisSub = &quot;Platform.GetProperty&quot;
  132. Const cstSubArgs = &quot;&quot;
  133. If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
  134. GetProperty = Null
  135. Check:
  136. If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
  137. If Not SF_Utils._Validate(PropertyName, &quot;PropertyName&quot;, V_STRING, Properties()) Then GoTo Catch
  138. End If
  139. Try:
  140. GetProperty = _PropertyGet(PropertyName)
  141. Finally:
  142. SF_Utils._ExitFunction(cstThisSub)
  143. Exit Function
  144. Catch:
  145. GoTo Finally
  146. End Function &apos; ScriptForge.SF_Platform.GetProperty
  147. REM -----------------------------------------------------------------------------
  148. Public Function Methods() As Variant
  149. &apos;&apos;&apos; Return the list of public methods of the Model service as an array
  150. Methods = Array( _
  151. )
  152. End Function &apos; ScriptForge.SF_Platform.Methods
  153. REM -----------------------------------------------------------------------------
  154. Public Function Properties() As Variant
  155. &apos;&apos;&apos; Return the list or properties of the Platform class as an array
  156. Properties = Array( _
  157. &quot;Architecture&quot; _
  158. , &quot;ComputerName&quot; _
  159. , &quot;CPUCount&quot; _
  160. , &quot;CurrentUser&quot; _
  161. , &quot;Machine&quot; _
  162. , &quot;OfficeVersion&quot; _
  163. , &quot;OSName&quot; _
  164. , &quot;OSPlatform&quot; _
  165. , &quot;OSRelease&quot; _
  166. , &quot;OSVersion&quot; _
  167. , &quot;Processor&quot; _
  168. )
  169. End Function &apos; ScriptForge.SF_Platform.Properties
  170. REM =========================================================== PRIVATE FUNCTIONS
  171. REM -----------------------------------------------------------------------------
  172. Public Function _GetProductName() as String
  173. &apos;&apos;&apos; Returns Office product and version numbers found in configuration registry
  174. &apos;&apos;&apos; Derived from the Tools library
  175. Dim oProdNameAccess as Object &apos; configmgr.RootAccess
  176. Dim sProdName as String
  177. Dim sVersion as String
  178. Dim sVendor As String
  179. On Local Error GoTo Catch &apos; Prevent any error
  180. _GetProductName = &quot;&quot;
  181. Try:
  182. Set oProdNameAccess = SF_Utils._GetRegistryKeyContent(&quot;org.openoffice.Setup/Product&quot;)
  183. sProdName = oProdNameAccess.ooName
  184. sVersion = oProdNameAccess.ooSetupVersionAboutBox
  185. sVendor = oProdNameAccess.ooVendor
  186. _GetProductName = sProdName &amp; &quot; &quot; &amp; sVersion &amp; &quot; (&quot; &amp; sVendor &amp; &quot;)&quot;
  187. Finally:
  188. Exit Function
  189. Catch:
  190. GoTo Finally
  191. End Function &apos; ScriptForge.SF_Platform._GetProductName
  192. REM -----------------------------------------------------------------------------
  193. Private Function _PropertyGet(Optional ByVal psProperty As String) As Variant
  194. &apos;&apos;&apos; Return the value of the named property
  195. &apos;&apos;&apos; Args:
  196. &apos;&apos;&apos; psProperty: the name of the property
  197. Dim sOSName As String &apos; Operating system
  198. Const cstPyHelper = &quot;$&quot; &amp; &quot;_SF_Platform&quot;
  199. Dim cstThisSub As String
  200. Const cstSubArgs = &quot;&quot;
  201. cstThisSub = &quot;Platform.get&quot; &amp; psProperty
  202. SF_Utils._EnterFunction(cstThisSub, cstSubArgs)
  203. Select Case psProperty
  204. Case &quot;Architecture&quot;, &quot;ComputerName&quot;, &quot;CPUCount&quot;, &quot;CurrentUser&quot;, &quot;Machine&quot; _
  205. , &quot;OSPlatform&quot;, &quot;OSRelease&quot;, &quot;OSVersion&quot;, &quot;Processor&quot;
  206. With ScriptForge.SF_Session
  207. _PropertyGet = .ExecutePythonScript(.SCRIPTISSHARED, _SF_.PythonHelper &amp; cstPyHelper, psProperty)
  208. End With
  209. Case &quot;OfficeVersion&quot;
  210. _PropertyGet = _GetProductName()
  211. Case &quot;OSName&quot;
  212. &apos; Calc INFO function preferred to Python script to avoid ScriptForge initialization risks when Python is not installed
  213. sOSName = _SF_.OSName
  214. If sOSName = &quot;&quot; Then
  215. sOSName = SF_Session.ExecuteCalcFunction(&quot;INFO&quot;, &quot;system&quot;)
  216. Select Case sOSName
  217. Case &quot;WNT&quot; : sOSName = &quot;Windows&quot;
  218. Case &quot;MACOSX&quot; : sOSName = &quot;macOS&quot;
  219. Case &quot;LINUX&quot; : sOSName = &quot;Linux&quot;
  220. Case &quot;SOLARIS&quot; : sOSName = &quot;Solaris&quot;
  221. Case Else : sOSName = SF_String.Capitalize(sOSName)
  222. End Select
  223. EndIf
  224. _PropertyGet = sOSName
  225. Case Else
  226. _PropertyGet = Null
  227. End Select
  228. Finally:
  229. SF_Utils._ExitFunction(cstThisSub)
  230. Exit Function
  231. End Function &apos; ScriptForge.SF_Platform._PropertyGet
  232. REM ============================================ END OF SCRIPTFORGE.SF_PLATFORM
  233. </script:module>