ReadProgramString

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Re: ReadProgramString

Beitrag von dibro »

Hi Axolotl,
danke, ich werde dein Tool mal probieren.
Das Exiftool gibts auf der Seite https://exiftool.org , ist Open souce und in Perl geschrieben.
Ich brauche es, weil ich an das DateCreated mit Pb nicht drankomme und schiebe das Datum in die unter Windows zugänglichen Formate.
Erst mal vielen Dank, ich melde mich wieder.
Dieter
Gruß aus Solingen, PB 6.0 Win 10 Pro
Axolotl
Beiträge: 150
Registriert: 31.12.2008 16:34

Re: ReadProgramString

Beitrag von Axolotl »

Also Tool ist vielleicht ein bisschen hochgegriffen.
Man kann LogToFile(Message$) anstelle eines MessageReguesters("Debug", Message$) verwenden.

Auf jeden Fall würde ich mal for Zeile 61 (siehe Code) den Wert der Variablen 'ExifTool_Pfad$' anschauen.
Program müsste ja auch ZERO sein....

Code: Alles auswählen

; ... schnipp 
  MessageReguesters("Debug", "ExifTool = '" + ExifTool_Pfad$ + "'")  
  ;LogToFile("ExifTool = '" + ExifTool_Pfad$ + "'") 
  Program = RunProgram(ExifTool_Pfad$, Pfad$, Arbeitsverzeichnis$, Flags)
; ... schnapp 
Ansonsten würde ich mal bei den Flags das #PB_Program_Hide wegnehmen (nur um das Console fenster zu sehen, wärend der tests)
So, mehr fällt mir jetzt spontan nicht dazu ein.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Re: ReadProgramString

Beitrag von dibro »

...ich hatte den Messagerequester in Zeile 61,62,63 platziert. Meldung kommt nur in Zeile 61, dann überspringt er alles bis Zeile 96.
Der Dateiname Exiftool.exe wird nicht übernommen. Starte ich im Editor, ist alles da und läuft. ---> Ratlos
Ich habe vor über 10 Jahren das letzte Mal programmiert und wollte jetzt auf die Schnelle ein Prpg bauen, das die Zeiten verschiedener Videos deren Kameras nicht ordentlich eingestellt waren, in die Reihe bringen.
Gruß aus Solingen, PB 6.0 Win 10 Pro
Axolotl
Beiträge: 150
Registriert: 31.12.2008 16:34

Re: ReadProgramString

Beitrag von Axolotl »

Dann wird die RunProgram() Procedure nicht richtig ausgeführt, dh. Variable Program is 0.

Meine Vermutung um den Fehler einzukreisen....

in Variable ExifTool_Pfad$ steht nicht der richtige pfad auf das exiftool drin?
Z.B.: ohne Pfadangabe hängt die ganze Sache vom aktuellen Arbeitsverzeichnis ab?

Leider stocher ich ein bisschen im Nebel,
Hilfreich wäre: Was sind die Werte der Variablen rund um RunProgram()
insbesondere ExifTool_Pfad$
D.h. wie lautet der komplete Pfad zum exiftool.exe

Wo unterscheiden sich die Werte bei der Debug- und bei der Release-Version?
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: ReadProgramString

Beitrag von juergenkulow »

Code: Alles auswählen

; Programm läuft mit Compiler Executable erstellen, löst aber eine Fehlermeldung in der IDE aus. 
RunProgram("notepad.exe","","",#PB_Program_Wait | #PB_Program_Open | #PB_Program_Read|  #PB_Program_Error)
; [16:34:28] [ERROR] startedit.pb (Zeile: 2)
; [16:34:28] [ERROR] RunProgram(): Ungültige Flags: Kann nicht #PB_Program_Wait mit den Kommunikations-Flags kombinieren.
Brauchst Du wirklich #PB_Program_Wait?
Wann kann ExifName$ ="" sein und warum mag das RunProgram nicht?
Axolotl
Beiträge: 150
Registriert: 31.12.2008 16:34

Re: ReadProgramString

Beitrag von Axolotl »

Ja, die Frage stellt sich mir auch gerade...
Bei mir stürtzt das Program mit #PB_Program_Wait in den Flags ab.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Re: ReadProgramString

Beitrag von dibro »

Bei mir macht es keinen Unterschied, ob mit oder ohne #PB_Program_Hide. In beiden Fällen wird der Pfad nicht richtig übergeben.
Im Editor geht kurz das Fenster auf oder auch nicht, und das Programm läuft - die .exe nicht
ich habe die Zeilen beim "Case Exif_Button" nochmal ergänzt. In der IDE/Compilerversion wird Datei$="Exiftool.exe" richtig übergeben
In der compilierten exe ist im MessageRequester die Stelle leer und es wird nichts übergeben, sodass die Prozedur das Exiftool nicht startet und mit dem Fehler endet.
Kann das am Compiler liegen oder an irgendwelchen Parametern zum Compiler?
Es geht auch nicht, wenn ich vorher den aus der INI übernommenen Pfad neu wähle.
Wenn ich noch Haare hätte, würde ich mir die raufen :mrgreen:
Ab Zeile 283 geändert

Code: Alles auswählen

Case #Exif_Button
        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 
        ClearGadgetItems(#Exif_Text)
        Pfad_File$ = Option$+Arbeitsverzeichnis$+Datei$ 
        ExifTool_Pfad$ = ExifPfad$ + ExifName$   
        MessageRequester("Exif_Pfad_File  ",ExifTool_Pfad$+" "+Pfad_File$)
        ExifRun(ExifTool_Pfad$, Pfad_File$, Arbeitsverzeichnis$, Flags) 
        AddGadgetItem(#Exif_Text,-1,Ausgabetext$+#NewLine)
    EndSelect
Außerdem, warum löscht ClearGadgetItems(#Exif_Text) den Text nur teilweise --> Rudi Ratlos :twisted:
Aber vielen Dank für die bisherige Unterstützung.
Dieter
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Re: ReadProgramString

Beitrag von dibro »

E S L Ä U F T
Ich habe nochmal geändert:

Code: Alles auswählen

  Case #Exif_Button
        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 
        ClearGadgetItems(#Exif_Text)
        Pfad_File$ = Option$+Arbeitsverzeichnis$+Datei$ 
        ExifTool_Pfad$ = ExifPfad$ + "Exiftool.exe"   
        ExifRun(ExifTool_Pfad$, Pfad_File$, Arbeitsverzeichnis$, Flags) 
        AddGadgetItem(#Exif_Text,-1,Ausgabetext$+#NewLine)
    EndSelect
Außerdem aus den Flags #PB_Program_Wait herausgenommen und siehe da: es läuft, warum auch immer :allright:
Alles gut jetzt, prima Forum :allright: :allright: :allright:
Viele Grüße
Dieter
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Re: ReadProgramString

Beitrag von dibro »

Hi zusammen,
da bin ich nochmal.
Erstens hatte ich mich zu früh gefreut. Die compilierte EXE zeigte ein seltsames Verhalten. Mal ging es mal nicht. Das Exiftool machte eine Menge Fehlermeldungen und auch der Teil der das Filedatum manipulierte, macht was er nicht sollte :mrgreen:
Bis da eine Meldung von einem Herrn Norton kam. Ich hatte vorher Bullguard drauf und damit keinen Ärger. Norton hat Bullguard keschluckt und ich hatte plötzlich Norton auf dem Rechner - und den Ärger. Ich habe den Scheiß deinstalliert und siehe, fortan keine Probleme mehr. Mag sein, dass die Konflikte mit Norton daher stammen, dass ich den Code, die exe und die Beispieldateien auf einem Stick gespeichert habe und Norton das als Bedrohung von außen interpretierte.
Jetzt mache ich mich auf, den Code in eine vernünftige Form zu bringen, so ohne Global usw.
Viele Grüße an das Forum
Dieter
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Re: ReadProgramString

Beitrag von dibro »

Hi,
ich habe das lauffähige Tool weiter vorne aktualisiert.viewtopic.php?p=363063#p363063
Das Problem, dass das Editorgadget nicht sofort gelöscht wird, besteht weiterhin.
An dem Code kann es m.E. nicht liegen.
Ich habe ein kleines Beispiel eingefügt, bei dem der identische Code läuft. Vielleicht kann sich das jemand mit mehr Ahnung als ich mal beim vorstehenden Programm ansehen.
Hier das Example das läuft:

Code: Alles auswählen

#NewLine=#CRLF$ 
If OpenWindow(0,100,100,200,500,"Editorgadget Löschversuch",#PB_Window_SystemMenu    )
EditorGadget(1,5,5,190,400, #PB_Editor_ReadOnly)
ButtonGadget(2,10,450,50,30,"Start")
ButtonGadget(3,75,450,50,30,"lösch")
ButtonGadget(4,140,450,50,30,"Ende")
EndIf 
Repeat    
      Event = WaitWindowEvent()
        
  If Event = #PB_Event_Gadget
    Select EventGadget()
      Case 2      
        For i = 0 To 50
          
          SetGadgetItemText(1,i,"Das ist ein Text "+ i+ Chr(13)+Chr(10) )
          Ausgabetext$ =" Das ExifTool von von Phil Harvey muss auf dem Rechner installiert sein " + #NewLine +
                   " ------------------------------------------"                   + #NewLine +
                   " 1. Pfade setzen "        + Chr(13)+Chr(10) +
                   " 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 "
   
        Next
        SetGadgetItemText(1,i,Ausgabetext$+ i+ Chr(13)+Chr(10) )
      Case 3
        ClearGadgetItems(1)
      Case 4
        End  
    EndSelect     
  EndIf
ForEver 
    
    
Gruß aus Solingen, PB 6.0 Win 10 Pro
Antworten