Samwatas
|
Posted: Fri Oct 15, 2010 21:22 Post subject: |
|
|
Кстати, чтобы не вводить вручную все переменные окружения, можно автоматически получать их из системы (посредством cmd-команды set).
Вот набросал пример такой функции:
Code: | #include <Array.au3>
$aArray = _GetAllEnvVar(); Вызываем функцию, возвращающую массив всех переменных окружения,
If @error Then MsgBox(16, @error, @extended); Если не возникло никаких проблем,
_ArrayDisplay($aArray); То показываем полученный массив переменных.
Func _GetAllEnvVar()
Local $aTmp1, $aTmp2, $iReturn, $sConsoleRead = '', $iPID, $vStruct1, $vStruct2
$iPID = Run(@ComSpec & ' /c set', @SystemDir, @SW_HIDE, 2)
While 1
$sConsoleRead &= StdoutRead($iPID)
If @error Then ExitLoop
Wend
$vStruct1 = DllStructCreate('char[' & StringLen($sConsoleRead) & ']')
$vStruct2 = DllStructCreate('char[' & StringLen($sConsoleRead) & ']')
DllStructSetData($vStruct1, 1, $sConsoleRead)
$iReturn = DllCall('User32.dll','BOOLEAN', 'OemToCharA', 'ptr', DllStructGetPtr($vStruct1), 'ptr', DllStructGetPtr($vStruct2))
If @error Then Return SetError(@error, @extended, '')
$aTmp1 = StringSplit(DllStructGetData($vStruct2, 1), @CRLF, 3)
If @error Then Return SetError(@error, @extended, '')
Dim $aResult[UBound($aTmp1)-1][2]
For $i = 0 to UBound($aResult)-1
$aTmp2 = StringSplit($aTmp1[$i], '=')
If @error Then Return SetError(@error, @extended, '')
If $aTmp2[0] = 2 Then
$aResult[$i][0] = $aTmp2[1]
$aResult[$i][1] = $aTmp2[2]
Else
Return SetError(@error, @extended, '')
EndIf
Next
Return $aResult
EndFunc |
|
|