Snippets ( Miscellaneous ): Difference between revisions
Jump to navigation
Jump to search
(Edited snippets to conform to template Snippet Header.) |
|||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
__TOC__ | |||
===== | [[category:Snippets]] | ||
{{Snippet Credit Header}} | |||
== Basic Installer Example == | |||
{{Snippet Header | |||
| AuthorURL = 35302-guinness | |||
| AuthorName = guinness | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
; Basic idea for an installer. | ; Basic idea for an installer. | ||
Line 70: | Line 80: | ||
EndFunc ;==>_Toggle_EnableOrDisable | EndFunc ;==>_Toggle_EnableOrDisable | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _DummyFile == | |||
{{Snippet Header | |||
| AuthorURL = 35302-guinness | |||
| AuthorName = guinness | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
Line 91: | Line 107: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _nDaysTrial_Check_Proc == | |||
{{Snippet Header | |||
| AuthorURL = 20477-mrcreator | |||
| AuthorName = MrCreatoR | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
;#include-once ;Can be used as Include, only an idea ;) | ;#include-once ;Can be used as Include, only an idea ;) | ||
#include <String.au3> | #include <String.au3> | ||
Line 105: | Line 128: | ||
Local $nDays_Over = $nTrial | Local $nDays_Over = $nTrial | ||
Local $iFiles_Counter = 0 | Local $iFiles_Counter = 0 | ||
Local $iTotal_Files = 4 | Local $iTotal_Files = 4 | ||
Local $aTrial_File[$iTotal_Files+1] | Local $aTrial_File[$iTotal_Files+1] | ||
$aTrial_File[0] = $iTotal_Files-1 | $aTrial_File[0] = $iTotal_Files-1 | ||
$aTrial_File[1] = @WindowsDir & "\" & $sTrialExp_Title & ".sys" | $aTrial_File[1] = @WindowsDir & "\" & $sTrialExp_Title & ".sys" | ||
Line 114: | Line 137: | ||
$aTrial_File[3] = @UserProfileDir & "\Local Settings\Application Data\" & $sTrialExp_Title & ".sys" | $aTrial_File[3] = @UserProfileDir & "\Local Settings\Application Data\" & $sTrialExp_Title & ".sys" | ||
$aTrial_File[4] = @AppDataCommonDir & "\" & $sTrialExp_Title & ".sys" | $aTrial_File[4] = @AppDataCommonDir & "\" & $sTrialExp_Title & ".sys" | ||
For $i = 1 To $aTrial_File[0] | For $i = 1 To $aTrial_File[0] | ||
$iFiles_Counter += FileExists($aTrial_File[$i]) | $iFiles_Counter += FileExists($aTrial_File[$i]) | ||
Next | Next | ||
If $iFiles_Counter > 0 And $iFiles_Counter < $aTrial_File[0] Then ;One of the files doesn't exists, that means that we got uncovered | If $iFiles_Counter > 0 And $iFiles_Counter < $aTrial_File[0] Then ;One of the files doesn't exists, that means that we got uncovered | ||
$nDays_Over += 1 | $nDays_Over += 1 | ||
ElseIf $iFiles_Counter = 0 Then ;All files are missing, that means one of two: we got uncovered, or this is the first run :) | ElseIf $iFiles_Counter = 0 Then ;All files are missing, that means one of two: we got uncovered, or this is the first run :) | ||
$iTimer_Init = TimerInit() | $iTimer_Init = TimerInit() | ||
For $i = 1 To $aTrial_File[0] | For $i = 1 To $aTrial_File[0] | ||
FileWriteLine($aTrial_File[$i], _ | FileWriteLine($aTrial_File[$i], _ | ||
Line 129: | Line 152: | ||
_StringEncrypt(1, $aTrial_File[$i] & "=" & $iTimer_Init, @ComputerName) & @CRLF & _ | _StringEncrypt(1, $aTrial_File[$i] & "=" & $iTimer_Init, @ComputerName) & @CRLF & _ | ||
_StringEncrypt(1, @ComputerName & @UserName & @MIN & @YEAR & @HOUR & @SEC, @ComputerName)) | _StringEncrypt(1, @ComputerName & @UserName & @MIN & @YEAR & @HOUR & @SEC, @ComputerName)) | ||
FileSetAttrib($aTrial_File[$i], "+SH") | FileSetAttrib($aTrial_File[$i], "+SH") | ||
FileSetTime($aTrial_File[$i], "") ;Only as an option to check in the future... | FileSetTime($aTrial_File[$i], "") ;Only as an option to check in the future... | ||
Line 137: | Line 160: | ||
Local $aTimer_Inits[$aTrial_File[0]+1] | Local $aTimer_Inits[$aTrial_File[0]+1] | ||
$aTimer_Inits[0] = $aTrial_File[0] | $aTimer_Inits[0] = $aTrial_File[0] | ||
;Here we get the Encrypted timer inits... | ;Here we get the Encrypted timer inits... | ||
For $i = 1 To $aTrial_File[0] | For $i = 1 To $aTrial_File[0] | ||
$aReadFile = StringSplit(FileRead($aTrial_File[$i]), @CRLF) | $aReadFile = StringSplit(FileRead($aTrial_File[$i]), @CRLF) | ||
For $j = 1 To UBound($aReadFile)-1 | For $j = 1 To UBound($aReadFile)-1 | ||
$sCurent_Decrypted_Line = _StringEncrypt(0, $aReadFile[$j], @ComputerName) | $sCurent_Decrypted_Line = _StringEncrypt(0, $aReadFile[$j], @ComputerName) | ||
Line 150: | Line 173: | ||
Next | Next | ||
Next | Next | ||
;Now we check if all the init are the same values (to insure that they all is untouched)... | ;Now we check if all the init are the same values (to insure that they all is untouched)... | ||
For $i = $aTimer_Inits[0] To 2 Step -1 | For $i = $aTimer_Inits[0] To 2 Step -1 | ||
Line 158: | Line 181: | ||
EndIf | EndIf | ||
Next | Next | ||
;Ok, if the Timer Inits all the same, we check the time differences... | ;Ok, if the Timer Inits all the same, we check the time differences... | ||
If $nDays_Over = $nTrial Then | If $nDays_Over = $nTrial Then | ||
Line 165: | Line 188: | ||
EndIf | EndIf | ||
EndIf | EndIf | ||
If $nDays_Over > $nTrial Then | If $nDays_Over > $nTrial Then | ||
MsgBox(262144+48, "*" & $sTrialExp_Title & "*", StringFormat($sTrialExp_Msg, $nTrial)) | MsgBox(262144+48, "*" & $sTrialExp_Title & "*", StringFormat($sTrialExp_Msg, $nTrial)) | ||
Line 173: | Line 196: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _PasswordCrypt == | |||
{{Snippet Header | |||
| AuthorURL = 4920-valuater | |||
| AuthorName = Valuater | |||
| ModifierURL = 35302-guinness | |||
| ModifierName = guinness | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
Line 197: | Line 229: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _RandomText == | |||
{{Snippet Header | |||
| AuthorURL = 35302-guinness | |||
| AuthorName = guinness | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
ConsoleWrite(_RandomText() & @CRLF) ; Generates a random block of text | ConsoleWrite(_RandomText() & @CRLF) ; Generates a random block of text | ||
Func _RandomText($iLength = 10) | Func _RandomText($iLength = 10) | ||
Line 212: | Line 251: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _ReturnCard == | |||
{{Snippet Header | |||
| AuthorName = KentonBomb | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
Line 250: | Line 295: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _ReturnCard == | |||
{{Snippet Header | |||
| AuthorURL = 35302-guinness | |||
| AuthorName = guinness | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
Line 262: | Line 314: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _TextSize == | |||
{{Snippet Header | |||
| AuthorURL = 44525-jscript | |||
| AuthorName = JScript | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
;Author: JScript - Snippet Version No. = 1.0 | ; Author: JScript - Snippet Version No. = 1.0 | ||
;Snippet was Created Using AutoIt Version = 3.3.8.1, Creation Date = 23/05/12. | ; Snippet was Created Using AutoIt Version = 3.3.8.1, Creation Date = 23/05/12. | ||
Local $sText = "Sample text to determine the dimensions!" | Local $sText = "Sample text to determine the dimensions!" | ||
Line 290: | Line 350: | ||
EndFunc ;==>_TextSize | EndFunc ;==>_TextSize | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===== | [[#top | ReturnToContents]] | ||
== _UnExpandEnvStrings == | |||
{{Snippet Header | |||
| AuthorURL = 35302-guinness | |||
| AuthorName = guinness | |||
| Desc = A simple wrapper for _WinAPI_PathUnExpandEnvStrings which will return a blank string if no replacements are made though this will return the original path. | |||
}} | |||
<syntaxhighlight lang="autoit"> | <syntaxhighlight lang="autoit"> | ||
#include <WinAPIEx.au3> | #include <WinAPIEx.au3> | ||
Line 310: | Line 378: | ||
EndFunc ;==>_UnExpandEnvStrings | EndFunc ;==>_UnExpandEnvStrings | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[#top| | |||
[[#top | ReturnToContents]] |
Latest revision as of 16:59, 18 November 2012
Basic Installer Example
Author: guinness
; Basic idea for an installer.
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
Example()
Func Example()
Local $aArray[11] = [10], $hGUI, $iBack, $iHeight = 500, $iIndex = 0, $iNext, $iTab, $iWidth = 500
$hGUI = GUICreate("", $iWidth, $iHeight)
$iBack = GUICtrlCreateButton("Back", $iWidth - 180, $iHeight - 30, 85, 25)
$iNext = GUICtrlCreateButton("Next", $iWidth - 90, $iHeight - 30, 85, 25)
$iTab = GUICtrlCreateTab(-99, -99, 0, 0) ; Create a Tab group.
For $i = 1 To $aArray[0]
GUICtrlCreateTabItem($i)
GUICtrlCreateLabel('Page ' & $i, 10, 10)
Next
GUICtrlCreateTabItem("") ; Close the Tab group.
_Toggle_EnableOrDisable($iBack, 0) ; Disable the back button.
GUISetState(@SW_SHOW, $hGUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $iBack
If $iIndex = ($aArray[0] - 1) Then ; Enabled the next button if the index is currently at the maximum number of tabs minus 1.
_Toggle_EnableOrDisable($iNext, 1) ; Enable the next button.
EndIf
$iIndex -= 1 ; Decrease the item index.
If $iIndex <= 0 Then ; Disable the back button if the index is less than the number of tab items.
$iIndex = 0
_Toggle_EnableOrDisable($iBack, 0) ; Disable the back button.
EndIf
GUICtrlSendMsg($iTab, $TCM_SETCURFOCUS, $iIndex, 0)
Case $iNext
$iIndex += 1 ; Increase the item index.
If $iIndex = 1 Then
_Toggle_EnableOrDisable($iBack, 1) ; Enable the back button if the index is equal to 1.
EndIf
If $iIndex >= ($aArray[0] - 1) Then ; Disable the next button if the index is greater than the number of tab items minus 1.
$iIndex = ($aArray[0] - 1)
_Toggle_EnableOrDisable($iNext, 0) ; Disable the next button.
EndIf
GUICtrlSendMsg($iTab, $TCM_SETCURFOCUS, $iIndex, 0)
EndSwitch
WEnd
EndFunc ;==>Example
Func _Toggle_EnableOrDisable($iControlID, $iOverride = -1) ; By guinness.
Local $aState[2] = [$GUI_ENABLE, $GUI_DISABLE]
If $iOverride > -1 Then
$iOverride = Number(Not $iOverride)
Else
$iOverride = Number(BitAND(GUICtrlGetState($iControlID), $aState[0]) = $aState[0])
EndIf
GUICtrlSetState($iControlID, $aState[$iOverride])
EndFunc ;==>_Toggle_EnableOrDisable
_DummyFile
Author: guinness
#include <WinAPI.au3>
; Create a dummy file that is 1MB in size.
_DummyFile(@ScriptDir & "\Test.txt", 1, 1) ; Initial idea by trancexx who created it in AutoIt code.
Func _DummyFile($sFilePath, $iSizeMB, $iOverwrite = 0)
Local $hFile = _WinAPI_CreateFile($sFilePath, 0 + $iOverwrite, 4)
If Not $hFile Then
Return SetError(1, 0, 0)
EndIf
_WinAPI_SetFilePointer($hFile, 1048576 * $iSizeMB)
_WinAPI_SetEndOfFile($hFile)
Return Number(_WinAPI_CloseHandle($hFile))
EndFunc ;==>_DummyFile
_nDaysTrial_Check_Proc
Author: MrCreatoR
;#include-once ;Can be used as Include, only an idea ;)
#include <String.au3>
_nDaysTrial_Check_Proc("My_App", "Your registration period (%s Hour :) ) has expired!", 1)
;=================== Here goes your script code ===================
;==================================================================
Func _nDaysTrial_Check_Proc($sTrialExp_Title, $sTrialExp_Msg, $nTrial=30)
Local $nDays_Over = $nTrial
Local $iFiles_Counter = 0
Local $iTotal_Files = 4
Local $aTrial_File[$iTotal_Files+1]
$aTrial_File[0] = $iTotal_Files-1
$aTrial_File[1] = @WindowsDir & "\" & $sTrialExp_Title & ".sys"
$aTrial_File[2] = @SystemDir & "\" & $sTrialExp_Title & ".sys"
$aTrial_File[3] = @UserProfileDir & "\Local Settings\Application Data\" & $sTrialExp_Title & ".sys"
$aTrial_File[4] = @AppDataCommonDir & "\" & $sTrialExp_Title & ".sys"
For $i = 1 To $aTrial_File[0]
$iFiles_Counter += FileExists($aTrial_File[$i])
Next
If $iFiles_Counter > 0 And $iFiles_Counter < $aTrial_File[0] Then ;One of the files doesn't exists, that means that we got uncovered
$nDays_Over += 1
ElseIf $iFiles_Counter = 0 Then ;All files are missing, that means one of two: we got uncovered, or this is the first run :)
$iTimer_Init = TimerInit()
For $i = 1 To $aTrial_File[0]
FileWriteLine($aTrial_File[$i], _
_StringEncrypt(1, @YEAR & @MON & @UserName & @MIN & @SEC, @ComputerName) & @CRLF & _
_StringEncrypt(1, $aTrial_File[$i] & "=" & $iTimer_Init, @ComputerName) & @CRLF & _
_StringEncrypt(1, @ComputerName & @UserName & @MIN & @YEAR & @HOUR & @SEC, @ComputerName))
FileSetAttrib($aTrial_File[$i], "+SH")
FileSetTime($aTrial_File[$i], "") ;Only as an option to check in the future...
Next
ElseIf $iFiles_Counter = $aTrial_File[0] Then ;All files found, now we check the synchronization and the times..
Local $sCurent_Decrypted_Line
Local $aTimer_Inits[$aTrial_File[0]+1]
$aTimer_Inits[0] = $aTrial_File[0]
;Here we get the Encrypted timer inits...
For $i = 1 To $aTrial_File[0]
$aReadFile = StringSplit(FileRead($aTrial_File[$i]), @CRLF)
For $j = 1 To UBound($aReadFile)-1
$sCurent_Decrypted_Line = _StringEncrypt(0, $aReadFile[$j], @ComputerName)
If StringInStr($sCurent_Decrypted_Line, $aTrial_File[$i]) Then
$aTimer_Inits[$i] = Int(StringReplace($sCurent_Decrypted_Line, $aTrial_File[$i] & "=", ""))
ExitLoop
EndIf
Next
Next
;Now we check if all the init are the same values (to insure that they all is untouched)...
For $i = $aTimer_Inits[0] To 2 Step -1
If $aTimer_Inits[$i] <> $aTimer_Inits[$i-1] Or Int($aTimer_Inits[$i]) < 1 Then
$nDays_Over += 1
ExitLoop
EndIf
Next
;Ok, if the Timer Inits all the same, we check the time differences...
If $nDays_Over = $nTrial Then
;If has been over $nTrial Hours, then we declare a state that our trial has expired
If Round(Int(TimerDiff($aTimer_Inits[1])) / 1000 / 60 / 60, 2) >= $nTrial Then $nDays_Over += 1
EndIf
EndIf
If $nDays_Over > $nTrial Then
MsgBox(262144+48, "*" & $sTrialExp_Title & "*", StringFormat($sTrialExp_Msg, $nTrial))
Exit
EndIf
EndFunc
_PasswordCrypt
Author: Valuater
Modified: guinness
#include <Crypt.au3>
Local $sGenericPassword_1 = 'Password@AutoIt', $sGenericPassword_2 = 'NewPassword@AutoIt', $sSavePath = @ScriptDir & '\License.dat'
ConsoleWrite('1. ' & _PasswordCrypt($sGenericPassword_1, $sSavePath) & @CRLF) ; Write the password to a file located in the @ScriptDir. The password we wrote is returned by the function.
ConsoleWrite('2. ' & _PasswordCrypt($sGenericPassword_1, $sSavePath) & @CRLF) ; Since the password has been written already, we now want to check if the user has entered the password correctly. Returns True or False.
ConsoleWrite('3. ' & _PasswordCrypt($sGenericPassword_2, $sSavePath, 1) & @CRLF) ; Overwrite the old password with a new one.
ConsoleWrite('4. ' & _PasswordCrypt($sGenericPassword_1, $sSavePath) & @CRLF) ; Check the password matches. This will fail as we're checking the old password against the new one.
FileDelete($sSavePath)
Func _PasswordCrypt($sPassword, $sFilePath, $iOverwrite = 0) ; By guinness, idea by Valuater.
If FileExists($sFilePath) And $iOverwrite = 0 Then
Return BinaryToString(_Crypt_DecryptData(IniRead($sFilePath, 'PasswordKey', 'Password', ''), @ComputerName, $CALG_AES_256)) == $sPassword
Else
If IniWrite($sFilePath, 'PasswordKey', 'Password', _Crypt_EncryptData($sPassword, @ComputerName, $CALG_AES_256)) Then
Return $sPassword
EndIf
EndIf
Return SetError(1, 0, '')
EndFunc ;==>_PasswordCrypt
_RandomText
Author: guinness
ConsoleWrite(_RandomText() & @CRLF) ; Generates a random block of text
Func _RandomText($iLength = 10)
Local $sData = "", $sRandom
For $A = 1 To $iLength
$sRandom = Random(55, 116, 1)
$sData &= Chr($sRandom + 6 * ($sRandom > 90) - 7 * ($sRandom < 65))
Next
Return $sData
EndFunc ;==>_RandomText
_ReturnCard
KentonBomb
;===============================================================================
; Function Name: _ReturnCard()
; Description: Returns a random card W/ Face value, Includes optional "Joker" card W/ No face valie
; Syntax: _ReturnCard([$nJoker)
; Parameter(s): $nJoker- Boolean representing whether or not the "Joker" is a possible card
; 0 - (default) Joker is not included
; Requirement(s):
; Return Value(s): $nJoker = 1: Card "Of" Face Value OR "Joker"
; $nJoker = 0: Card "Of" Face Value
; Author(s): KentonBomb (KentonBomb@gmail.com)
; Modification(s): None
; Note(s): This UDF may be useful for games, but Autoit's Random function may not be just "Random" Enough
; Example(s): MsgBox(0, "Your Card", "Your card was " & _ReturnCard())
;===============================================================================
MsgBox(0, "Your Card", "Your card was " & _ReturnCard())
Func _ReturnCard($nJoker = 0)
Local $nNumbers, $azSplits, $nRandom, $nReturn, $sFace, $sFaces, $nRandom2
$nNumbers = "Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,King,Queen,Ace"
If $nJoker Then
$nNumbers &= ",Joker"
EndIf
$azSplits = StringSplit($nNumbers, ",")
$sReturn = $azSplits[Random(1, $azSplits[0], 1)]
$sFaces = StringSplit("Spades|Clubs|Hearts|Diamonds", "|")
$nRandom2 = Random(1, $sFaces[0] - 1)
$sFace = $sFaces[Round($nRandom2)]
If $sReturn = "Joker" Then
Return $sReturn
Else
Return $sReturn & " Of " &$sFace
EndIf
EndFunc ;==>_ReturnCard
_ReturnCard
Author: guinness
ConsoleWrite( _ReturnCard() & @LF)
Func _ReturnCard()
Local $aFaces[5] = [4, "Clubs", "Diamonds", "Hearts", "Spades"], _
$aNumbers[14] = [13, "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King", "Ace"]
Return $aNumbers[Random(1, $aNumbers[0], 1)] & " Of " & $aFaces[Random(1, $aFaces[0], 1)]
EndFunc ;==>_ReturnCard
_TextSize
Author: JScript
; Author: JScript - Snippet Version No. = 1.0
; Snippet was Created Using AutoIt Version = 3.3.8.1, Creation Date = 23/05/12.
Local $sText = "Sample text to determine the dimensions!"
Local $aiSize = _TextSize($sText)
MsgBox(4096, "TextSize", "String: " & $sText & @CRLF & @CRLF & "Width: " & $aiSize[0] & @CRLF & "Height: " & $aiSize[1])
Func _TextSize($sString, $iSize = 9, $iWeight = 400, $sFontName = "")
Local $hWnd, $hGuiSwitch, $aCtrlSize, $aRetSize[2] = [0, 0]
$hWnd = GUICreate($sString, 0, 0, 0, 0, BitOR(0x80000000, 0x20000000), BitOR(0x00000080, 0x00000020))
$hGuiSwitch = GUISwitch($hWnd)
GUISetFont($iSize, $iWeight, -1, $sFontName, $hWnd)
$aCtrlSize = ControlGetPos($hWnd, "", GUICtrlCreateLabel($sString, 0, 0))
GUIDelete($hWnd)
GUISwitch($hGuiSwitch)
If IsArray($aCtrlSize) Then
$aRetSize[0] = $aCtrlSize[2]; Width
$aRetSize[1] = $aCtrlSize[3]; Height
Return SetError(0, 0, $aRetSize)
EndIf
Return SetError(1, 0, $aRetSize)
EndFunc ;==>_TextSize
_UnExpandEnvStrings
Author: guinness
A simple wrapper for _WinAPI_PathUnExpandEnvStrings which will return a blank string if no replacements are made though this will return the original path.
#include <WinAPIEx.au3>
ConsoleWrite(_UnExpandEnvStrings(@AppDataDir) & @CRLF)
ConsoleWrite(_UnExpandEnvStrings('C:') & @CRLF)
ConsoleWrite(_UnExpandEnvStrings('E:Scripts') & @CRLF) ; Would normally be blank with _WinAPI_PathUnExpandEnvStrings.
; Version: 1.00. AutoIt: V3.3.8.1
; Is a simple wrapper for _WinAPI_PathUnExpandEnvStrings which will return a blank string if no replacements are made, though this will return the original path.
Func _UnExpandEnvStrings($sFilePath)
Local $sUnExpanded = _WinAPI_PathUnExpandEnvStrings($sFilePath)
If StringStripWS($sUnExpanded, 8) = '' Then
Return $sFilePath
EndIf
Return $sUnExpanded
EndFunc ;==>_UnExpandEnvStrings