Hallo
Vorspann:
da ich desöfteren ISO Dateien überprüfen muss, ob diese fragmentiert sind (falls ja gibt es beim booten von Stick Probleme) hab' ich mir gedacht, ich baue mir mal gschwind eine kleine GUI dafür.
Als externes Programm nutze Contig. (Contig.exe ist ein Konsolenprogramm mit Befehlsparametern) Ich habe Kenntnis davon, dass es bereits Programme zum Download gibt, die mein Vorhaben auch realisieren würden aber ich möchte es zur Übung selbst schreiben.
Problem:
Wenn ich einen Pfad zur Abarbeitung auswähle, funktioniert alles perfekt.
Aber wenn ich eine Datei (oder mehrere Dateien) auswähle, bekomme ich nur eine leere Ausgabe.
Was habe ich bereits getan um den Fehler auszugrenzen?
Alles mir bekannte und für mich machbare.
Wie könnt Ihr mir helfen?
Bin über jeden nützlichen Hinweis sehr dankbar.
Hier mein Skript:
Eigentlich ist es bis auf wenige andere Funktionen fertig, wenn es mir eine (dammne) Ausgabe einer Datei auswerfen würde. Eventuell könnt ihr es ja auch brauchen.
#Region
#AutoIt3Wrapper_Icon=
#AutoIt3Wrapper_Outfile=ReadDefrag.exe
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Res_Comment=BSP
#AutoIt3Wrapper_Res_Description=BSP
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=-BSP
#AutoIt3Wrapper_Res_Language=1031
#EndRegion
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
;;;;;;;;;;;;;;;;;;;;;;;;
;; Read Defrag: ;;
;; ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;
#include <AutoItConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <FileConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Global $g_hGUI, $Inputbox1, $Dateiwahl, $Text1, $filedrefrag, _
$opentxt
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
$g_hGUI = GUICreate("ReadDefrag", 758, 250, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME))
$Inputbox1 = GUICtrlCreateInput("Dateiauswahl nur über -Datei wählen- möglich!", 230, 63, 500, 23)
GUICtrlSetTip(-1, "Dieses Feld füllt sich automatisch" & @CRLF & "über den Button -Datei wählen-!")
$dateiwahl = GUICtrlCreateButton("Datei auswählen", 36, 63, 177, 25, $BS_ICON)
GUICtrlSetTip(-1, "Datei zur Defragmentierung auswählen")
$Text1 = GUICtrlCreateLabel("Bitte Datei-Pfad zur Defragmentierung auswählen:", 36, 22, 396, 21)
$opentxt = GUICtrlCreateButton("Bericht", 401, 115, 153, 41)
GUISetOnEvent($GUI_EVENT_CLOSE, __GUI_EVENT_CLOSE__)
GUICtrlSetOnEvent($dateiwahl, __idButton_dateiwahl__)
GUICtrlSetOnEvent($opentxt, __idButton_opentxt__)
GUISetState(@SW_SHOW)
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
While Sleep(200)
WEnd
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func __GUI_EVENT_CLOSE__()
Exit
EndFunc
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func __idButton_dateiwahl__()
Local Const $sMessage = "Gedrückt halten um mehrere Dateien auszuwählen."
Local $dateiwahl = FileOpenDialog($sMessage, @ScriptDir & "\", "Alle Dateien (*.*)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
If @error Then
MsgBox(64, "Info", "Es wurde keine Datei ausgewählt.")
FileChangeDir(@ScriptDir)
EndIf
If @error Then Return
GUICtrlSetData($Inputbox1, $dateiwahl)
EndFunc ;==>__idButton_dateiwahl__
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func __idButton_opentxt__()
Local $FileName = ("Contig.exe")
Local $daten
Local $datei = (@ScriptDir & "\test.txt")
Local $contigdir = (@ScriptDir & "\Contig.exe")
Local $dateiwahl = GUICtrlRead($Inputbox1)
If $dateiwahl = "Dateiauswahl nur über -Datei wählen- möglich!" Then Return MsgBox(64, "Hinweis", "Bitte wählen Sie zunächst über den Button -Datei wählen- eine Datei zur Berichtausgabe aus!", 0, $g_hGUI)
If Not FileExists(@ScriptDir & '\' & $FileName) Then
MsgBox(64, "Fehler!", "Contig.exe ist nicht im Installationsverzeichnis vorhanden!" & @CRLF & "Bitte installieren Sie ReadDefrag neu!", 20)
Exit
EndIf
Local $bericht = Run($contigdir & ' *', $dateiwahl, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
; Informationen schreiben
StdinWrite($bericht)
; Informationen auslesen
While True
$daten &= StdoutRead($bericht)
If @error Then ExitLoop
Sleep(100)
WEnd
; Datei anlegen
FileOpen($datei, 2)
sleep(100)
;Datei schreiben
FileWrite($datei, $daten)
sleep(100)
;Datei speichern
FileClose($datei)
sleep(100)
;Datei öffnen
ShellExecute($datei)
;Ausgabe einer Messagebox alternativ zur Ausgabedatei, falls erwünscht
;~ MsgBox(64, "Ergebnis", $daten)
Return
EndFunc ;==>__idButton_opentxt__
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Alles anzeigen