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:
ZitatAlles anzeigen$wget = Run(@ComSpec & ' /c 7za.exe a -tzip test.zip test.avi', 'e:', @SW_HIDE, 2 + 4)
Do
$line = StdoutRead($wget,-88,1) ; "peek" auf True !
If @error Then ExitLoop
ConsoleWrite('std: ' & $line & @LF)
sleep(10)
Until ProcessExists($wget) = 0
Exit
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
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=disk3.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; AutoIt Version: 3.2
; Template Version: 90129
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
#include <Process.au3>
#include <File.au3>
; Output-Folder
$opfd = RegRead ( "HKEY_CURRENT_USER\Software\OSCDIMG", "OutputFolder" )
; MsgBox(0 , "Info", "Output-Folder = " & $opfd & "")
$indir = $CmdLine[1]
;$indir = "C:\Programme\CyberLink"
$TimeCode = StringRight(@YEAR, 2) & (@MON) & (@MDAY)
$uffix = "-" & $TimeCode & ""
$label = InputBox("OSCDIMG", "Disk-Label:", "", " M", 300, 115, "600", "200")
if @error Then
Exit
EndIf
$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 & "")
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
$Save = FileSaveDialog ( "Datei speichern unter", $opfd, "CD-Image (*.iso)", 16+2, $label & $uffix)
if @error Then
Exit
EndIf
$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
$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
$log = @ScriptDir & "\oscdimg.log"
FileOpen($log, 1)
FileWrite($log, @CRLF)
FileWrite($log, $zeit & @CRLF)
FileWrite($log, $command & @CRLF)
FileWrite($log, $fin & @CRLF)
FileClose($log)
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.