Kommandozeilenausgabe in AutoIt-Fenster

  • Hallo Community
    Ich verwende oscdimg.exe um ein ISO zu erstellen.
    Mit einem autoIt-script lege ich Input und Dateiname fest.
    Die eigentliche ISO-Erstellung läuft ohne eigenes Fenster im Hintergrund ab.

    Um den Fortschritt bzw die Ausgaben des Programms zu sehen würde ich gern eine Progressbar einbauen bzw die Ausgabe in einem AutoIt-Fenster sehen.

    Einen Beitrag mit dem hinweis auf "StdoutRead" für 7za.exe habe ich hier im Forum gefunden:


    Leider verstehe ich die Syntax nicht, nur daß dadurch die Ausgaben in ein anderes Fenster erfolgen ?

    Mein Script:
    - verwendet übergebenen Ordner zur erstellung einer ISO-Datei mit Bootloader:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=disk3.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; AutoIt Version: 3.2
    ; Template Version: 90129

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

    Opt("WinWaitDelay", 500)
    Opt("TrayIconHide", 0) ;0=show, 1=hide tray icon
    Opt("MouseCoordMode", 0) ;1=absolute, 0=relative, 2=client
    Opt("ExpandEnvStrings", 1) ;0=don't expand, 1=do expand
    Opt("ExpandVarStrings", 1) ;0=don't expand, 1=do expand
    Opt("WinDetectHiddenText", 0) ;0=don't detect, 1=do detect
    Opt("WinTitleMatchMode", 1) ;1=start, 2=subStr, 3=exact, 4=advanced
    Opt("WinTextMatchMode", 1) ;1=complete, 2=quick

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

    #include <Process.au3>
    #include <File.au3>
    ; Output-Folder
    $opfd = RegRead ( "HKEY_CURRENT_USER\Software\OSCDIMG", "OutputFolder" )
    ; MsgBox(0 , "Info", "Output-Folder = " & $opfd & "")

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

    $indir = $CmdLine[1]
    ;$indir = "C:\Programme\CyberLink"

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

    $TimeCode = StringRight(@YEAR, 2) & (@MON) & (@MDAY)
    $uffix = "-" & $TimeCode & ""

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

    $label = InputBox("OSCDIMG", "Disk-Label:", "", " M", 300, 115, "600", "200")
    if @error Then
    Exit
    EndIf

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

    $loader = FileOpenDialog ( "Datei auswählen", $indir, "Bootloader (*.*)", 3, "")
    ; MsgBox(0 , "Info", " $loader = " & $loader & "")
    if @error Then
    $bfo = ""
    $egment = ""
    $bootable = "NO"
    $Find = "xxx"
    ; MsgBox(0 , "Info", "$bootable = " & $bootable & "")
    Else
    ;If $loader = 1 Then
    ; MsgBox(0 , "Info", " $loader = " & $loader & "")
    $short = FileGetShortName( $loader )
    ; MsgBox(0 , "Info", " $short = " & $short & "")
    $lower = StringLower ( $short )
    ; MsgBox(0 , "Info", " $lower = " & $lower & "")
    $Find = StringRight($lower, 5)
    ; MsgBox(0 , "Info", " $Find = " & $Find & "")
    $bootable = "YES"
    ; MsgBox(0 , "Info", "$bootable = " & $bootable & "")
    EndIf

    $ldr = "grldr"
    ; MsgBox(0 , "Info", " $ldr = " & $ldr & "")

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

    If $Find = $ldr Then
    ; MsgBox(0 , "Info", " IF " & $Find & " = " & $ldr & " Then ")
    ; MsgBox(0 , "Info", " grldr selected")
    $bfo = "-b"
    $egment = "-yt0x1000"
    ElseIf $bootable = "YES" Then
    ; MsgBox(0 , "Info", "$bootable = " & $bootable & "")
    $bfo = "-b"
    $egment = ""
    Else
    $bfo = ""
    $egment = ""
    EndIf

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

    $Save = FileSaveDialog ( "Datei speichern unter", $opfd, "CD-Image (*.iso)", 16+2, $label & $uffix)
    if @error Then
    Exit
    EndIf

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

    $EXE = @ScriptDir & "\OSCDIMG.exe"

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

    $zeit = StringRight(@YEAR, 1) & (@MON) & (@MDAY) & "-" & (@HOUR) & (@MIN)

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

    $command = "" & $EXE & " -l" & $label & " -h -n -m -o " & $bfo & "" & $loader & " " & $egment & " " & $indir & " " & $Save & ".iso "

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

    $rc = _RunDos( $command ); -------------> die Ausführung des Programms, die eigentlich in einer DOS-Box bzw. AutoIt-Fenster zu sehen sein soll. --------------------

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

    ; MsgBox(0 , "Info", " $rc = " & $rc & "")
    $test = "" & $Save & ".iso "
    ; MsgBox(0 , "Info", " $test = " & $test & "")
    $size = FileGetSize( $test )
    ; MsgBox(0 , "Info", " $size = " & $size & "")
    if $size < 1048576 Then
    MsgBox(48 , "Warning", "Check Filesize!", 3)
    ;FileDelete($test)
    EndIf
    if $size < 1024 Then
    MsgBox(16 , "ERROR", "Filesize inacceptable!", 3)
    FileDelete($test)
    EndIf

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

    $result = FileExists ( $test )
    ; MsgBox(0 , "Info", " $result = " & $result & "")
    if $result = 0 Then
    MsgBox(16 , "ERROR", "Image was NOT created!", 3)
    $fin = "Error"
    Else
    MsgBox(64 , "Info", "Image successfully created.", 2)
    $fin = "Success"
    EndIf

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

    $log = @ScriptDir & "\oscdimg.log"
    FileOpen($log, 1)
    FileWrite($log, @CRLF)
    FileWrite($log, $zeit & @CRLF)
    FileWrite($log, $command & @CRLF)
    FileWrite($log, $fin & @CRLF)
    FileClose($log)

    [/autoit]

    Wie kann ich die Ausgabe des Programms oscdimg.exe sichtbar machen ?

    An der Stelle "_RunDos( $command )" hab ich versucht mit "GUICreate" einen Schalter einzubauen,
    der dann den Vorgang startet (mit Progressbar), leider hab ich´s nicht hinbekommen.
    (Muß ein "Child-Prozess" gestartet werden?)

    Auch den CMD-Vorgang mit "StdoutRead" in einem AutoIt-Fenster darzustellen ist mir mißlungen.

    Kann mir bitte jemand helfen die entsprechenden Scriptzeilen zu formulieren.

    Vielen Dank im Vorraus.

    Gruß M.

    3 Mal editiert, zuletzt von Macrostop (25. März 2009 um 00:59)

  • Danke für Deine schnelle Antwort Xenobiologist

    Habe das gefunden:


    Verstehe aber nicht wie ich es in mein Script einbauen soll!
    Muß gestehen daß ich noch nie eine Funktion verwendet hab.
    Werd mal schauen was ich hinkrieg.
    Danke derweil.
    Gruß M.