ich bin schon etwas weiter, stecke aber jetzt mit einem neuen Problem fest.
Ich habe mir hier in dem ausgezeichneten Forum einige Beispiele zusammengesucht und mit deren Hilfe mein Prog komplettiert.
Das Problem: Im Editor läuft es, mit und ohne Debugger, aber als EXE kann es das Exiftool nicht finden/ausführen.
Für Verbesserungstipps bin ich dankbar.
nachstehend mein letzter Code, der läuft, auch als EXE. Kleiner Schönheitsfehler, das Editorgadget wird nicht richtig gelöscht, d.h. nur verzögert.
Ich habe schon alles Mögliche probiert, leider ohne Erfolg. Ich weiß nicht, woran es liegt.
Code: Alles auswählen
;MEXDatum Modifiziere EXif DaTum von Video-Dateien mit EXiftool
;exiftool.exe -G1 -a -s -time:all *.MP4) =>> alle Zeiten auslesen
;exiftool.exe "-filemodifydate<createdate" "-filecreatedate<createdate" *.MP4 =>> Zeiten kopieren
;exiftool.exe -G1 -a -s -time:all G*.MP4
;exiftool "-filemodifydate<createdate" "-filecreatedate<createdate" G*.MP4
; -------------------------------------------------------------------------------------------------------
Declare.s ExifRun(ExifTool_Pfad$, Pfad_File$, Arbeitverzeichnis$, Flags)
EnableExplicit
#Mainwindow = 1
Enumeration : #Datgadg : #Pfad_Wahl : #Start_Button : #Ende_Button : #TxtGadg_Std_Korr
#Pfad_Txt : #TxtGadg_Zeit : #combogadg_DaT_Art : #combogadg_DaT_Std : #Exif_Button : #Exif_Verzeichnis
#Exif_Text: #Exif_Pfad_Text : #Combogadget_Datei
EndEnumeration
#TxtConsoleName = "Fehlercode"
#TxtmyRunProgramRuntime = "Laufzeit"
#TxtmyRunProgramms = " ms"
#TxtmyRunProgramOK = "OK"
#TxtmyRunProgramErrorcode = "Fehlercode: "
#TxtmyRunProgramFATAL = "Fataler Fehler"
#TxtmyRunProgramCantStart = "Programm kann nicht gestartet werden:"
#NewLine=#CRLF$ ;Windows
Global Arbeitsverzeichnis$ = " "
Global ExifName$ = "ExifTool.exe"
Global ExifPfad$ = " "
Global ExifTool_Pfad$= " "
Global Datei$ = " "
Global Option$ = " -filemodifydate<createdate" + " -filecreatedate<createdate "
Global Pfad_File$ = Option$+Arbeitsverzeichnis$+Datei$
Global Flags=#PB_Program_Open | #PB_Program_Read | #PB_Program_Error | #PB_Program_Hide ;| #PB_Program_Wait
Global datum$ = FormatDate("%dd.%mm.%yyyy.%hh:%mm:%ss",Date())
Global datums_flag = #PB_Date_Created
Global shift_hour_flag = 0 ; Stundendifferenz (-2)-(-1)- 0 - (+1) -(+2)
Global DatumsWert ; Zahlenwert Datum
Global DW_neu ; Änderung mit Stundendifferenz
Global Ausgabetext$ ; "Datenausgabe"
Global Gadget
Global Top = 5
Global Hoehe = 30
Global Neu = 1
Global Ende, i
; -------------------------------
Procedure.s ExifRun(ExifTool_Pfad$, Pfad_File$, Arbeitsverzeichnis$, Flags)
Protected Exitcode, NoErrText
Protected NewErrorText$, AllErrorText$=""
Protected start = ElapsedMilliseconds()
Protected Pfad$ = Pfad_File$
Protected Program
Program = RunProgram(ExifTool_Pfad$, Pfad$, Arbeitsverzeichnis$, Flags)
If Program
While ProgramRunning(Program)
If AvailableProgramOutput(Program)
Ausgabetext$ = Datei$ +" "+ ReadProgramString(Program) ;+ #NewLine
EndIf
NewErrorText$=ReadProgramError(Program)
While NewErrorText$<>""
NoErrText+1
AllErrorText$ + Str(NoErrText)+":"+NewErrorText$+#NewLine
NewErrorText$=ReadProgramError(Program)
Wend
Wend
Ausgabetext$+" "+#TxtmyRunProgramRuntime+":"+Str(ElapsedMilliseconds()-start)+#TxtmyRunProgramms+#NewLine
If ElapsedMilliseconds()-start
Exitcode=ProgramExitCode(Program)
If Exitcode<>0
If 0=Exitcode
Ausgabetext$+#TxtmyRunProgramOK
Else
Ausgabetext$ + #TxtmyRunProgramErrorcode + Str(Exitcode) + #NewLine
Ausgabetext$ + AllErrorText$
EndIf
EndIf
Else
If 0<>IsProgram(Program)
KillProgram(Program)
CloseProgram(Program)
Ausgabetext$ = Ausgabetext$ +" " + #NewLine +AllErrorText$ +" "
EndIf
EndIf
ProcedureReturn Ausgabetext$
Else
MessageRequester(#TxtmyRunProgramFATAL,#TxtmyRunProgramCantStart+" "+ ExifTool_Pfad$+Pfad$+" 2 ")
EndIf
EndProcedure
Procedure AendereDatum(Arbeitsverzeichnis$)
Protected Zeit$, gefunden, Pfad$
gefunden = ExamineDirectory(#PB_Any, Arbeitsverzeichnis$, Datei$)
If gefunden
While NextDirectoryEntry(gefunden)
If DirectoryEntryType(gefunden) = #PB_DirectoryEntry_File
Pfad$ = DirectoryEntryName(gefunden)
If FileSize(Pfad$) = FileSize(Datei$)
Pfad$ = Arbeitsverzeichnis$ + Pfad$
DatumsWert = GetFileDate(Pfad$,datums_flag)
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",Datumswert)
DW_neu = AddDate(DatumsWert,#PB_Date_Hour,shift_hour_flag)
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",DW_neu)
DW_neu = DatumsWert + (3600 * shift_hour_flag)
Zeit$ = FormatDate("%dd.%mm.%yyyy:%hh.%ii",DW_neu)
SetFileDate(Pfad$,datums_flag,ParseDate("%dd.%mm.%yyyy:%hh.%ii",zeit$))
SetGadgetText(#TxtGadg_Zeit, Zeit$)
Ausgabetext$ = Pfad$ + " " + Zeit$
AddGadgetItem(#Exif_Text, -1, Ausgabetext$) ; +#NewLine
Else
Ausgabetext$ = "keine Datei gefunden"
AddGadgetItem(#Exif_Text, -1, Ausgabetext$ + #NewLine)
EndIf
EndIf
Wend
FinishDirectory(gefunden)
Else
Ausgabetext$ = "Datei nicht gefunden, Arbeitsverzeichnis gesetzt?"
AddGadgetItem(#Exif_Text, -1, Ausgabetext$ + #NewLine)
EndIf
EndProcedure
; Erstellt eine Preference-Datei namens MEXDatum.ini ------------------------------
If OpenPreferences("MEXDatum.ini")
PreferenceGroup("Global")
Arbeitsverzeichnis$ = ReadPreferenceString("Arbeitsverzeichnis$","")
ExifName$ = ReadPreferenceString("ExifName$","")
ExifPfad$ = ReadPreferenceString("ExifPfad$","")
ExifTool_Pfad$ = ReadPreferenceString("ExifTool_Pfad$","")
Datei$ = ReadPreferenceString("Datei$","")
ClosePreferences()
Else
CreatePreferences("MEXDatum.ini")
ClosePreferences()
EndIf
; ----------------------------------
; --- Window #HWnd,0,0,250,250,"Dateidatum und Zeiten einstellen, verwendet das Exiftool von Phil Harvey"
OpenWindow(#Mainwindow, 0,0,500,420,"Modifiziere Exif Datum mit dem Exiftool von Phil Harvey",
#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StickyWindow(#Mainwindow,#True)
TextGadget(#TxtGadg_Std_Korr, 10,Top,180,20,"Stundenkorrektur",#PB_Text_Center) : Top =Top + 30
ComboBoxGadget(#combogadg_DaT_Art,10,Top,180,30) : Top = Top + 40
AddGadgetItem(#combogadg_DaT_Art,0,"Zeit -2 Std")
AddGadgetItem(#combogadg_DaT_Art,1,"Zeit -1 Std")
AddGadgetItem(#combogadg_DaT_Art,2,"Zeit +/-0 Std")
AddGadgetItem(#combogadg_DaT_Art,3,"Zeit +1 Std")
AddGadgetItem(#combogadg_DaT_Art,4,"Zeit +2 Std")
SetGadgetState(#combogadg_DaT_Art,2)
If #combogadg_DaT_Art = 2
GadgetToolTip(#combogadg_DaT_Art, "das Datum wird nicht verändert")
EndIf
; keine Korrektur, nicht verändert, es wird nur die Zeit ausgelesen
ComboBoxGadget(#combogadg_DaT_Std,10,Top,180,30) : Top = Top + 40
AddGadgetItem(#combogadg_DaT_Std,0,"Setzen: Datum erstellt")
AddGadgetItem(#combogadg_DaT_Std,1,"Setzen: Datum geändert")
SetGadgetState(#combogadg_DaT_Std,0)
GadgetToolTip(#combogadg_DaT_Std,"Wählt welches Datum korrigiert werden soll")
TextGadget(#TxtGadg_Zeit, 10,Top,180,30,datum$,#PB_Text_Border|#PB_Text_Center) : Top = Top + 40
ButtonGadget(#Pfad_Wahl, 10,Top,180,30,"Setzen: Arbeitsverzeichnis",#PB_Text_Center) : Top = Top + 40
TextGadget (#Pfad_Txt, 10,Top,180,35,"",#PB_Text_Border|#PB_Text_Center) : Top = Top + 45 ; zeigt den Pfad
SetGadgetText(#Pfad_Txt,Arbeitsverzeichnis$)
GadgetToolTip(#Pfad_Wahl,"Wählt dasArbeitsverzeichnis mit den Dateien")
ComboBoxGadget(#Combogadget_Datei,10, Top, 180, Hoehe) : Top = Top+40
AddGadgetItem(#Combogadget_Datei,0,"Gopro: G* . MP4")
AddGadgetItem(#Combogadget_Datei,1,"Video: * . MP4")
AddGadgetItem(#Combogadget_Datei,2,"Video: * . MOV")
SetGadgetState(#Combogadget_Datei,0)
ButtonGadget(#Exif_Verzeichnis, 10,Top,180,30,"Setzen: Exifverzeichnis",#PB_Text_Center) : Top = Top + 40
GadgetToolTip(#Exif_Verzeichnis, "Stellt das Verzeichnis mit dem ExifTool ein")
TextGadget(#Exif_Pfad_Text, 10,Top,180,30,"",#PB_Text_Border|#PB_Text_Center) : Top = Top + 60 ; zeigt den Pfad
SetGadgetText(#Exif_Pfad_Text,ExifPfad$)
ExifTool_Pfad$ = ExifPfad$+ExifName$
ButtonGadget(#Start_Button, 10, Top, 120, 30,"Start: Zeit",#PB_Text_Center) ; #Start_Button,5,200,60,30
GadgetToolTip(#Start_Button, "startet einen Durchlauf, kann auch mehrfach betätigt werden")
ButtonGadget(#Exif_Button, 270,Top,120,30,"Exiftool",#PB_Text_Center) ; #Start_Button,5,200,60,30
GadgetToolTip(#Exif_Button, "startet das ExifTool")
ButtonGadget(#Ende_Button, 140,Top,120,30,"Ende",#PB_Text_Center) ;#Ende_Button,135,200,60,30,
SetGadgetColor(#Ende_Button, #PB_Gadget_FrontColor, $0000FF)
GadgetToolTip(#Ende_Button, "beendet das Programm")
EditorGadget(#Exif_Text, 205,8,285, 355,#PB_Editor_ReadOnly|#PB_Editor_WordWrap)
Ausgabetext$ = " Das ExifTool von von Phil Harvey muss auf dem Rechner installiert sein " + #NewLine +
" ------------------------------------------" + #NewLine +
" 1. Pfade setzen " + #NewLine +
" 2. Dateiart wählen " + #NewLine +
" 3. ExifTool starten " + #NewLine +
" 4. Zeitänderung wählen " + #NewLine +
" 5. Zeit starten " + #NewLine +
" 6. Freuen " + #NewLine +
"------------------------------------------" + #NewLine +
" Das Programm speichert die aktuellen Einstellungen in einer MEXDatum.ini " + #NewLine +
" Die Funktionen Start und ExifTool können mehrfach aufgerufen werden " + #NewLine +
" Der Button ExifTool setzt die Zeitänderungen wieder zurück "
If Neu
SetGadgetText(#Exif_Text,Ausgabetext$)
Neu = 0
EndIf
StartDrawing(WindowOutput(#Mainwindow)) ;Rahmen zeichnen
DrawingMode(#PB_2DDrawing_Outlined)
Box( 5, 5, 190, 360, RGB(255, 0, 0) )
Box( 202, 5, 290, 360, RGB(255, 0, 0))
StopDrawing()
; --- Main -------------
Repeat
Select WaitWindowEvent() ;Fenster aufrufen und auf Ereignis warten
Case #PB_Event_CloseWindow ;Fenster schließen
Ende=1
Case #PB_Event_Gadget ; Ende-Taste drücken
Select EventGadget()
Case #Ende_Button
Ende=1
Case #Pfad_Wahl ;Ordner auswählen
Arbeitsverzeichnis$=PathRequester("Arbeitsordner wählen",Arbeitsverzeichnis$)
SetGadgetText(#Pfad_Txt,Arbeitsverzeichnis$)
Pfad_File$ = Arbeitsverzeichnis$ +Datei$
Case #Exif_Verzeichnis ; Exif-Pfad auswählen
ExifPfad$=PathRequester("Ordner wählen",ExifPfad$)
SetGadgetText(#Exif_Pfad_Text,ExifPfad$+ExifName$)
ExifTool_Pfad$=ExifPfad$+ExifName$
Case #combogadg_DaT_Std ; Auswählen welche Zeitdaten korrigiert werden sollen
Select GetGadgetState(#combogadg_DaT_Std)
Case 0 : datums_flag = #PB_Date_Created: ; gibt das Erstellungsdatum der Datei zurück
Case 1 : datums_flag = #PB_Date_Modified: ; gibt das Änderungsdatum der Datei zurück
EndSelect
Case #combogadg_DaT_Art ; Auswählen um wieviel Stunden
Select GetGadgetState(#combogadg_DaT_Art) ; das Datum korrigiert werden soll
Case 0 : shift_hour_flag = -2
Case 1 : shift_hour_flag = -1
Case 2 : shift_hour_flag = 0
Case 3 : shift_hour_flag = 1
Case 4 : shift_hour_flag = 2
EndSelect
Case #Combogadget_Datei ; Auswählen welche Dateien korrigiert werden sollen
Select GetGadgetState(#Combogadget_Datei)
Case 0 : Datei$ = "G*.MP4"
Case 1 : Datei$ = "*.MP4"
Case 2 : Datei$ = "*.MOV"
EndSelect
Case #PB_Event_CloseWindow : End
Case #Start_Button ; Zeitänderung starten
ClearGadgetItems(#Exif_Text)
AendereDatum(Arbeitsverzeichnis$)
Case #Exif_Button ; Exif Datum nach Filedatum verschieben
ClearGadgetItems(#Exif_Text)
While WindowEvent() : Wend
If GetGadgetState(#Combogadget_Datei) = 0 : Datei$ = "G*.MP4" : EndIf
If GetGadgetState(#Combogadget_Datei) = 1 : Datei$ = "*.MP4" : EndIf
If GetGadgetState(#Combogadget_Datei) = 2 : Datei$ = "*.MOV" : EndIf
Pfad_File$ = Option$+Arbeitsverzeichnis$+Datei$
ExifTool_Pfad$ = ExifPfad$ + "Exiftool.exe"
ExifRun(ExifTool_Pfad$, Pfad_File$, Arbeitsverzeichnis$, Flags)
AddGadgetItem(#Exif_Text,-1,Ausgabetext$+#NewLine)
EndSelect
EndSelect
Until Ende
OpenPreferences("MEXDatum.ini")
PreferenceGroup("Global")
WritePreferenceString("Arbeitsverzeichnis$",Arbeitsverzeichnis$)
WritePreferenceString("ExifName$",ExifName$)
WritePreferenceString("ExifPfad$",ExifPfad$)
WritePreferenceString("ExifTool_Pfad$",ExifTool_Pfad$)
WritePreferenceString("Datei$",Datei$)
ClosePreferences()
End