Umgebungsvariablen ermitteln

  • Mit

    -

    Code
    SET PC_

    kann ich alle Umgebungsvariablen ermitteln, die mit PC_ beginnen. Wie setze ich so etwas in Autoit um? Einzelne Umgebungsvariablen auszulesen ist kein Problem, wie läuft es aber mit unbekannten Variablen? Die sollen mir am besten als Liste in einer Messagebox präsentiert werden.

    Man kann natürlich basteln, aber als Newbie will es mir zunächst nicht einleuchten, wie ich ein Kommandozeilentool mit Parametern starte und ganz ehrlich, elegant ist es nicht gerade:

    Code
    Run("SET PC_ >> %temp%\pc-umgebungsvariablen.txt")

    Einmal editiert, zuletzt von r0m (14. Februar 2013 um 21:28)

  • Hi,

    Zitat

    ganz ehrlich, elegant ist es nicht gerade:

    Nein, elegant ist das nicht.....
    Elegant ist,

    Code
    Umgebungsvariable site:autoit.de

    in google einzugeben und die ersten 1-2 links durchzuklickern....
    oder direkt in der AutoIt-Hilfe im "Suchen" Reiter einfach *umgebungsvariable* einzugeben und dort dann das entsprechende Ergebnis abzufragen ;)

  • Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    [/autoit] [autoit][/autoit] [autoit]

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Environment", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output = $Output & "Name: " & $objItem.Name & @CRLF
    $Output = $Output & "Status: " & $objItem.Status & @CRLF
    $Output = $Output & "SystemVariable: " & $objItem.SystemVariable & @CRLF
    $Output = $Output & "UserName: " & $objItem.UserName & @CRLF
    $Output = $Output & "VariableValue: " & $objItem.VariableValue & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Environment" )
    Endif

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func WMIDateStringToDate($dtmDate)

    [/autoit] [autoit][/autoit] [autoit]

    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]


    Script wurde erstellt vom Tool AutoIt Scriptomatic von GEOSoft, dass von mir durch einen einfachen Filter erweitert wurde....

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (14. Februar 2013 um 22:04)

  • Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Func _GetEnvironmentStrings()

    [/autoit] [autoit][/autoit] [autoit]

    ;Retrieve a pointer to the environment string block.
    ;Format: (C-Style WString)
    ; Var1=Value1\0
    ; Var2=Value2\0
    ; ...
    ; VarN=ValueN\0\0
    ;

    [/autoit] [autoit][/autoit] [autoit]

    Local $aRes = DllCall("kernel32.dll", "ptr", "GetEnvironmentStringsW")
    If (@error <> 0) Then Return SetError(-1, 0, 0) ;DllCall failed.
    If ($aRes[0] == 0) Then Return SetError(-2, 0, 0) ;No variables returned.

    [/autoit] [autoit][/autoit] [autoit]

    Local $aEnvRet[1] = [0]
    Local $pVar = $aRes[0]
    While 1
    Local $sTmp = ""
    Local $i = 0
    While 1
    Local $struct = DllStructCreate("WORD", $pVar)
    If $struct == 0 Then
    ;MsgBox(0, "Error - DllStructCreate()", @error)
    DllCall("kernel32.dll", "BOOL", "FreeEnvironmentStringsW", "ptr", $aRes[0])
    Return SetError(-3, 0, 0)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $pVar += 2
    Local $chr = DllStructGetData($struct, 1)
    If $chr == 0 Then ExitLoop
    $sTmp &= ChrW($chr)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    $aEnvRet[0] += 1
    ReDim $aEnvRet[$aEnvRet[0] + 1]
    $aEnvRet[$aEnvRet[0]] = $sTmp

    [/autoit] [autoit][/autoit] [autoit]

    If DllStructGetData(DllStructCreate("WORD", $pVar), 1) == 0 Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    DllCall("kernel32.dll", "BOOL", "FreeEnvironmentStringsW", "ptr", $aRes[0])
    Return SetError(0, 0, $aEnvRet)
    EndFunc ;==>_GetEnvironmentStrings

    [/autoit] [autoit][/autoit] [autoit]

    Func _main()

    [/autoit] [autoit][/autoit] [autoit]

    Local $a = _GetEnvironmentStrings()
    Local $error = @error
    If IsArray($a) Then Exit (_ArrayDisplay($a))
    MsgBox(0, "Error", $error)

    [/autoit] [autoit][/autoit] [autoit]

    Exit (0)
    EndFunc ;==>_main

    [/autoit] [autoit][/autoit] [autoit]

    _main()

    [/autoit]

    Du müsstest nur noch mit StringRegExp() "drüber fahren" und schon hast du deine Variablen.

    Einmal editiert, zuletzt von CentuCore (14. Februar 2013 um 22:25)