cmd Befehl ausführen

  • Hallo,
    ich bin VB und C# Programmierer und muss für ein Projekt auf AutoIt zurückgreifen.

    Ich muss dafür in einem AutoIt Script cmd aufrufen und ein Befehl ausführen mit mehreren Parametern, dann das Ergebnis auslesen und noch ein Befehl ausführen in der cmd mit dem Ergebnis als Parameter.

    In VB und C# geht das mit Shell(pfaddesprogramms /parameter /parameter2)


    Wie geht das in AutoIt
    Danke

  • Ist es nicht so, dass alle Run-Befehle als Admin ausgeführt werden, wenn das AutoIt-Skript mit Admin-Rechten ausgeführt wird?

  • Ich hab im Netz "ShellExecute" gefunden. Das scheint auch zu funktionieren. Das cmd-Fenster verschwindet sofort wieder. Wo kann ich denn den Ausgabetext auslesen?

  • Genau dafür brauchst du Run und Stdoutread.

    [autoit]

    #RequireAdmin

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

    $ergebnis = _RunWaitRead('C:\Programm.exe /Parameter')

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

    Func _RunWaitRead($sCommand, $sWorking=@ScriptDir)
    ; Author: ProgAndy
    Local $pid = Run($sCommand, $sWorking, @SW_HIDE, 0x8)
    If @error Then Return SetError(1,@error,'')
    Local $result = ""
    Do
    Sleep(100)
    $result &= StdoutRead($pid)
    Until @error <> 0
    StdioClose($pid)
    Return $result
    EndFunc

    [/autoit]
  • Sicher dass es in der cmd ausgeführt wird. Bin zwar kein AutoItler aber kann das nirgendswo sehen. Die Syntax ist so ähnlich wie in Vb und C#.
    Also müsste in $ergebnis jetzt ein String liegen in dem das Ergebnis steht.

    Das Ergebnis sieht so aus:
    [Blockierte Grafik: http://img3.imagebanana.com/img/z6ebru5f/Unbenannt.png]
    Das was ich brauche sind jeweils die erste Zeile nach "Hardware ID's:"

    • Offizieller Beitrag

    Warum holst Du die Informationen nicht aus der Registry?

    Habe mal schnell eine Funktion geschrieben:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $aMouse = _RegGetHIDs('mouse') ; <- mouse or keyboard
    _ArrayDisplay($aMouse)

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

    Func _RegGetHIDs($sClass)
    Local $iInstance1 = 0, $iInstance2 = 0, $sRegPath1, $sRegPath2, $sRegKey, $sRegClass, $sTmp, $aTmp, $aTmpKey
    $sRegPath1 = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID'
    While True
    $iInstance1 += 1
    $sRegPath2 = RegEnumKey($sRegPath1, $iInstance1)
    If @error Then ExitLoop
    $iInstance2 = 0
    While True
    $iInstance2 += 1
    $sRegKey = RegEnumKey($sRegPath1 & '\' & $sRegPath2, $iInstance2)
    If @error Then ExitLoop
    $sRegClass = RegRead($sRegPath1 & '\' & $sRegPath2 & '\' & $sRegKey, 'Class')
    If $sRegClass = $sClass Then $sTmp &= RegRead($sRegPath1 & '\' & $sRegPath2 & '\' & $sRegKey, 'HardwareID') & @CR
    WEnd
    WEnd
    If $sTmp = '' Then Return SetError(1, 0, 0)
    $aTmp = StringSplit($sTmp, @CR)
    Local $aOut[$aTmp[0] - 1][2]
    For $i = 1 To $aTmp[0] - 1
    $aTmpKey = StringSplit($aTmp[$i], @LF)
    If $aTmpKey[0] > UBound($aOut, 2) Then ReDim $aOut[$aTmp[0] - 1][$aTmpKey[0]]
    For $j = 1 To $aTmpKey[0]
    $aOut[$i - 1][$j - 1] = $aTmpKey[$j]
    Next
    Next
    Return $aOut
    EndFunc

    [/autoit]
  • Um devcon auszuführen, wird aber keine CMD benötigt, das kannst du direkt über Run machen wie im Beispiel.

    Aber die Registry-Lösung ist besser.