Seite 1 von 1

mit runprogram starten einige Programme 2 mal

Verfasst: 14.05.2022 22:00
von gh249@online.de
Nach folgender Passage im Programm startet Thunderbird doppelt.
progmail$ ist thunderbird, File.s ist der geklammerte Pfad + Dateiname, der angezeigt werden soll und pathwork$ ist nochmals der Pfad zur Datei. Das gleiche Problem besteht bei html-Dateien mit firefox und bei Fotos mit Fotoflare was aber wenigstens nur einen 2.Reiter öffnet. Auch VLC für videos zeigt den Fehler. Die beiden einzigen Programme. die richtig nur einmal starten sin LibreOffice und foxitreader.

ElseIf pathwork$ = pathfiles$ And Right(File$,4) = ".eml"
RunProgram(progmail$, File.s, pathwork$)

Ich suche und suche und finde keinen Grund für das Verhalten. Hier zur Übersicht die komplette Auswertung welche Datei mit welchem Programm angezeigt werden soll:

Code: Alles auswählen

    If pathwork$ = pathaudio$
      RunProgram(progaudio$, File.s, pathwork$)             ; z.Zt noch unbenutzt 
    ElseIf pathwork$ = pathfoto$
      RunProgram(progfoto$, File.s, pathwork$)              ; fotoflare
    ElseIf pathwork$ = pathvideo$
      RunProgram(progvideo$, File.s, pathwork$)             ; vlc
    ElseIf pathwork$ = pathfiles$ And Right(F$, 3) = "pdf"  
      RunProgram(progpdf$, File.s , pathwork$)              ; foxitreader
    ElseIf pathwork$ = pathfiles$ And ((Left(Right(File$,4) ,2)) =".o" Or (Left(Right(File$,4) ,3)) = ".do" Or (Left(Right(File$,5) ,2)) = ".do" Or (Left(Right(File$,4) ,3)) = ".xl" Or (Left(Right(File$,5) ,3)) = ".xl")
      RunProgram(progfile$, File.s, pathwork$)              ; libreoffice
    ElseIf pathwork$ = pathfiles$ And Right(File$,4) = ".eml"
      RunProgram(progmail$, File.s, pathwork$)              ; thunderbird
    Else
      RunProgram(proghtml$, File.s, pathwork$)              ; firefox
    EndIf  
Ich hoffe, das irgendwer eine Idee hat woran es liegen kann.

Re: mit runprogram starten einige Programme 2 mal

Verfasst: 15.05.2022 05:48
von kpeters58
Deine Frage kann ich Dir leider nicht beantworten, da unzureichende Information...

Was Dir aber sicher bei der Ursachenforschung helfen könnte, ist Code-Refactoring. Wie Du unten siehst, habe ich die schrecklichen if-else Konstrukte durch eine Map ersetzt. BTW, das Mischen von $ und .s Variablen fand ich inkonsistent und so habe ich alle $ Variablen ersetzt.

Einiges mußte ich "erfinden", da Du nur einen Ausschnitt gezeigt hast - das kannst Du sicher anpassen.

Im Code gibt es somit nur noch eine Stelle, wo RunProgram aufgerufen wird, statt sieben. Da kannst Du dann sehr einfach ein paar Debug Befehle einsetzen und sicherstellen, daß Du z.b. RunProgram nicht versehentlich mehrmals aufrufst und daß alle Programmnamen, Parameter etc. korrekt sind. Hoffe, es hilft!

Code: Alles auswählen

EnableExplicit

; Pfad Konstanten - Deine Werte hier eintragen
#pathaudio  = "c:\temp\audio\"
#pathfoto   = "c:\temp\foto\"
#pathvideo  = "c:\temp\video\"
#pathfiles  = "c:\temp\files\"
; Programm Konstanten - Deine Werte hier eintragen
#progaudio  = "audio.exe"
#progfoto   = "foto.exe"
#progvideo  = "video.exe"
#progmail   = "mail.exe"     ;  eine von diesen beiden Konstanten -> Profile.s
#progoffice = "office.exe"   ;       - " - 
;

Procedure.s GetProgramForExtension(Extension.s) ; returns 'program string' for given extension
  Select LCase(Extension) ; Extension ohne  '.'
    Case "doc", "xls", "xlsx"      ; etc.
      ProcedureReturn  #progoffice
    Case "eml"
      ProcedureReturn #progmail
    Default
      ProcedureReturn "ERROR"  ; weder Thunderbird noch LibreOffice - Fehlerbehandlung mußt Du noch einbauen
  EndSelect    
EndProcedure     
  
Global File.s      = "c:\temp\files\some_file.doc",
       Pathwork.s  = #pathfiles,
       Progfile.s  = GetProgramForExtension(GetExtensionPart(File.s))
     
Global NewMap ProgramPaths.s()
ProgramPaths(#pathaudio) = #progaudio
ProgramPaths(#pathfoto)  = #progfoto
ProgramPaths(#pathvideo) = #progvideo
ProgramPaths(#pathfiles) = Progfile

Procedure.i RunExternalProgram()
  Protected Result.i
  
  Debug "Executable: " + ProgramPaths(Pathwork)
  Debug "Parameter(s): " + File
  Debug "WorkingDirectory: " + PathWork
  ;
  Result = RunProgram(ProgramPaths(Pathwork), File, Pathwork)
  If Result = 0
    Debug "External program could not be started!"
  EndIf
EndProcedure

RunExternalProgram()

Re: mit runprogram starten einige Programme 2 mal

Verfasst: 15.05.2022 06:09
von gh249@online.de
Vielen Dank für Deine Antwort. Die Ursache habe ich heute morgen gefunden. Der Einsprung in den Programmteil geschieht durch anklicken des Dateititels in einem ListViewGadget. Hier liegt das Problem denn anscheinend meldet dieses Gadget bei Mausbewegung darüber erneut ein anklicken. Habe das Problem jetzt so gelöst, dass ich die Auswertung nur bei einem ungleichem ausgewählten Dateinamen wieder durchlaufe. Dass das Problem bei FoxitReader nicht auftrat liegt einfach daran, dass dieser eine 2.Instanz für das gleiche Dokument von selbst verhindert. LibreOffice anscheinend genauso.

Re: mit runprogram starten einige Programme 2 mal

Verfasst: 15.05.2022 11:24
von NicTheQuick
Damit ein Klick nur einmal registriert wird, musst du auch EventType() nutzen. Schau dir dazu das Beispiel in der Hilfe an.

Re: mit runprogram starten einige Programme 2 mal

Verfasst: 16.05.2022 08:41
von gh249@online.de
Danke für die Info, nutze PB zwar schon seit ca. 1985 habe allerdings eine längere Pause aus privaten Gründen gehabt und muss jetzt erst mal einiges wieder auffrischen. Nochmals danke.

Re: mit runprogram starten einige Programme 2 mal

Verfasst: 16.05.2022 09:14
von Bisonte
gh249@online.de hat geschrieben: 16.05.2022 08:41 Danke für die Info, nutze PB zwar schon seit ca. 1985 habe allerdings eine längere Pause aus privaten Gründen gehabt und muss jetzt erst mal einiges wieder auffrischen. Nochmals danke.
Seit 1985 ? :o

Wurde PB nicht erst im Jahre 2000 offiziell releast ? :?

Re: mit runprogram starten einige Programme 2 mal

Verfasst: 16.05.2022 14:14
von Axolotl
Seit 1985 ? :o

Wurde PB nicht erst im Jahre 2000 offiziell releast ? :?
Und ich dachte immer, das nur bei mir die Zeit immer schneller voranschreitet. :bounce:
Willkommen zurück.

Re: mit runprogram starten einige Programme 2 mal

Verfasst: 17.05.2022 17:48
von gh249@online.de
Sorry stimmt, das war vorher auf dem Amiga das Amiga-Basic. Man wird halt alt und dusselig.
Aber dann war ich wohl schon direkt am Anfang mit dabei.