#FEATURE by stefan
class: Win32OperatingSystem
added:
#expandEnvironmentStrings:
#primExpandEnvironmentStringsA:into:size:
#primExpandEnvironmentStringsW:into:size:
--- a/Win32OperatingSystem.st Thu Aug 11 19:00:34 2016 +0200
+++ b/Win32OperatingSystem.st Fri Aug 12 17:27:03 2016 +0200
@@ -8053,6 +8053,37 @@
"Modified: / 23-08-2011 / 21:14:45 / jv"
!
+expandEnvironmentStrings:aString
+ "expand the environmentStrings (e.g. %ProgramFiles%) in aString"
+
+ |count resultString resultCount|
+
+ count := aString size + 128.
+ [
+ aString isWideString ifTrue:[
+ resultString := Unicode16String new:count.
+ resultCount := self primExpandEnvironmentStringsW:aString into:resultString size:count.
+ ] ifFalse:[
+ resultString := String new:count.
+ resultCount := self primExpandEnvironmentStringsA:aString into:resultString size:count.
+ ].
+ resultCount <= count ifTrue:[
+ true
+ ] ifFalse:[
+ "resultString was too small. resultCount is the required buffer size"
+ count := resultCount.
+ false
+ ].
+ ] whileFalse.
+ ^ resultString copyTo:resultCount-1.
+
+
+ "
+ self expandEnvironmentStrings:'%ProgramFiles%\test\x'
+ self expandEnvironmentStrings:'%ProgramFiles%\test\x' asUnicode16String
+ "
+!
+
getDomainName
"return the DNS domain this host is in.
Notice:
@@ -10333,6 +10364,26 @@
^ OSProcessStatus
"Created: / 12.6.1998 / 16:30:43 / cg"
+!
+
+primExpandEnvironmentStringsA:inString into:outString size:outBuffer
+
+ <apicall: ulongReturn "ExpandEnvironmentStringsA" (pointer pointer ulong) module: "kernel32.dll" >
+ ^self primitiveFailed
+
+ "
+ self primExpandEnvironmentStringsA:'%ProgramFiles%\test\x' into:(String new:256) inspect size:256
+ "
+!
+
+primExpandEnvironmentStringsW:inString into:outString size:outBuffer
+
+ <apicall: ulongReturn "ExpandEnvironmentStringsW" (pointer pointer ulong) module: "kernel32.dll" >
+ ^self primitiveFailed
+
+ "
+ self primExpandEnvironmentStringsW:'%ProgramFiles%\test\x' asUnicodeString into:(Unicode16String new:256) inspect size:256
+ "
! !
!Win32OperatingSystem class methodsFor:'regional settings'!