matrixnz Posted July 10, 2009 Posted July 10, 2009 Using Opt(ExpandVarStrings, 1) I wish to replace a variable value within a string with an expanded variable for example: Change C:\Documents and Settings\<Username>\Desktop to '@DesktopDir@' (A snippet of my code is below) In the StringReplace "ReplaceString" field I've tried to use literal "@" signs but @@DesktopDir@@ and various other combinantions always returns the complete expanded variable value rather than @DesktopDir@. I've also tried using @ in compination with Chr(64) but with the same results for instance '@@DesktopDir' & Chr(64). The only way I've been able to resolve this is by using $OPT_AUTOVARS = Opt('ExpandVarStrings', 1) And then toggle it within the _FNC_CHCKFUNC Function, not sure if this is the best way or if maybe I'm missing something. Cheers expandcollapse popup#include <GUIConstantsEx.au3> #Include <WindowsConstants.au3> Opt('ExpandVarStrings', 1) Opt('GUICoordMode', 0) Opt('MustDeclareVars', 1) Global $GUI_FILENAME Global $GUI_FILESELE Global $MSG_FILESELE Global $TMP_CHKMACRO Global Const $WS_EX_COMPOSITED = 0x02000000 Example() Func Example() Local $msg GUICreate("Example", 320, 40, -1, -1, BitOR($WS_CAPTION, $WS_SIZEBOX, $WS_SYSMENU), $WS_EX_COMPOSITED) GUISetCoord(10, 10) $GUI_FILENAME = GUICtrlCreateInput('', -1, -1, 200, 20) $GUI_FILESELE = GUICtrlCreateButton('Browse...', 210, -1, 90, 20) GUISetState() While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit Case $msg = $GUI_FILESELE $MSG_FILESELE = FileOpenDialog('Please Select a File', @ScriptDir, 'exe (*.exe)') If @error <> 1 Then GUICtrlSetData($GUI_FILENAME, _FNC_CHKMACRO($MSG_FILESELE)) EndSelect WEnd EndFunc Func _FNC_CHKMACRO($TMP_CHKMACRO) If StringInStr($TMP_CHKMACRO, @DesktopDir) Then $TMP_CHKMACRO = StringReplace($TMP_CHKMACRO, @DesktopDir, '@@DesktopDir@') EndIf Return $TMP_CHKMACRO EndFunc
Authenticity Posted July 10, 2009 Posted July 10, 2009 It's still @DesktopDir@ but you need to temporary change the Opt flag to see the changes: expandcollapse popup#include <GUIConstantsEx.au3> #Include <WindowsConstants.au3> Opt('ExpandVarStrings', 1) Opt('GUICoordMode', 0) Opt('MustDeclareVars', 1) Global $GUI_FILENAME Global $GUI_FILESELE Global $MSG_FILESELE Global $TMP_CHKMACRO Global Const $WS_EX_COMPOSITED = 0x02000000 Example() Func Example() Local $msg GUICreate("Example", 320, 40, -1, -1, BitOR($WS_CAPTION, $WS_SIZEBOX, $WS_SYSMENU), $WS_EX_COMPOSITED) GUISetCoord(10, 10) $GUI_FILENAME = GUICtrlCreateInput('', -1, -1, 200, 20) $GUI_FILESELE = GUICtrlCreateButton('Browse...', 210, -1, 90, 20) GUISetState() While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit Case $msg = $GUI_FILESELE $MSG_FILESELE = FileOpenDialog('Please Select a File', @ScriptDir, 'exe (*.exe)') If @error <> 1 Then GUICtrlSetData($GUI_FILENAME, _FNC_CHKMACRO($MSG_FILESELE)) EndSelect WEnd EndFunc Func _FNC_CHKMACRO($TMP_CHKMACRO) If StringInStr($TMP_CHKMACRO, @DesktopDir) Then $TMP_CHKMACRO = StringReplace($TMP_CHKMACRO, @DesktopDir, '@@DesktopDir@') EndIf Opt('ExpandVarStrings', 0) ConsoleWrite($TMP_CHKMACRO & @LF) Opt('ExpandVarStrings', 1) Return $TMP_CHKMACRO EndFunc
PsaltyDS Posted July 10, 2009 Posted July 10, 2009 (edited) It's still @DesktopDir@ but you need to temporary change the Opt flag to see the changes: expandcollapse popup#include <GUIConstantsEx.au3> #Include <WindowsConstants.au3> Opt('ExpandVarStrings', 1) Opt('GUICoordMode', 0) Opt('MustDeclareVars', 1) Global $GUI_FILENAME Global $GUI_FILESELE Global $MSG_FILESELE Global $TMP_CHKMACRO Global Const $WS_EX_COMPOSITED = 0x02000000 Example() Func Example() Local $msg GUICreate("Example", 320, 40, -1, -1, BitOR($WS_CAPTION, $WS_SIZEBOX, $WS_SYSMENU), $WS_EX_COMPOSITED) GUISetCoord(10, 10) $GUI_FILENAME = GUICtrlCreateInput('', -1, -1, 200, 20) $GUI_FILESELE = GUICtrlCreateButton('Browse...', 210, -1, 90, 20) GUISetState() While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Exit Case $msg = $GUI_FILESELE $MSG_FILESELE = FileOpenDialog('Please Select a File', @ScriptDir, 'exe (*.exe)') If @error <> 1 Then GUICtrlSetData($GUI_FILENAME, _FNC_CHKMACRO($MSG_FILESELE)) EndSelect WEnd EndFunc Func _FNC_CHKMACRO($TMP_CHKMACRO) If StringInStr($TMP_CHKMACRO, @DesktopDir) Then $TMP_CHKMACRO = StringReplace($TMP_CHKMACRO, @DesktopDir, '@@DesktopDir@') EndIf Opt('ExpandVarStrings', 0) ConsoleWrite($TMP_CHKMACRO & @LF) Opt('ExpandVarStrings', 1) Return $TMP_CHKMACRO EndFunc That doesn't work. Getting rid of the annoying GUI distraction makes it easier to see: Opt('ExpandVarStrings', 1) Global $sBefore = @DesktopDir & '\MySubDir\MyFile.exe' ConsoleWrite("$sBefore = " & $sBefore & @LF) Global $s_After = _FNC_CHKMACRO($sBefore) ConsoleWrite("$s_After = " & $s_After & @LF) Func _FNC_CHKMACRO($TMP_CHKMACRO) Local $iSave = Opt('ExpandVarStrings', 0) If StringInStr($TMP_CHKMACRO, @DesktopDir) Then $TMP_CHKMACRO = StringReplace($TMP_CHKMACRO, @DesktopDir, '@@DesktopDir@') EndIf ConsoleWrite("$TMP_CHKMACRO = " & $TMP_CHKMACRO & @LF) Opt('ExpandVarStrings', $iSave) Return $TMP_CHKMACRO EndFunc Edited July 10, 2009 by PsaltyDS Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
matrixnz Posted July 11, 2009 Author Posted July 11, 2009 Thanks everyone for your repsonses That's the only work around I found as well, except I used $OPT_AUTOVARS rather than $iSave, I just wasn't sure if I was overlooking something obvious. Thanks again for the replies. Cheers
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now