mit runprogram starten einige Programme 2 mal

Für allgemeine Fragen zur Programmierung mit PureBasic.
gh249@online.de
Beiträge: 11
Registriert: 14.05.2022 21:43

mit runprogram starten einige Programme 2 mal

Beitrag 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.
Benutzeravatar
kpeters58
Beiträge: 20
Registriert: 16.12.2014 18:51

Re: mit runprogram starten einige Programme 2 mal

Beitrag 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()
gh249@online.de
Beiträge: 11
Registriert: 14.05.2022 21:43

Re: mit runprogram starten einige Programme 2 mal

Beitrag 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.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8484
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 20.10
NVIDIA Quadro P2200
Wohnort: Saarbrücken
Kontaktdaten:

Re: mit runprogram starten einige Programme 2 mal

Beitrag von NicTheQuick »

Damit ein Klick nur einmal registriert wird, musst du auch EventType() nutzen. Schau dir dazu das Beispiel in der Hilfe an.
Bild
gh249@online.de
Beiträge: 11
Registriert: 14.05.2022 21:43

Re: mit runprogram starten einige Programme 2 mal

Beitrag 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.
Benutzeravatar
Bisonte
Beiträge: 2400
Registriert: 01.04.2007 20:18

Re: mit runprogram starten einige Programme 2 mal

Beitrag 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 ? :?
PureBasic 5.73 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Axolotl
Beiträge: 79
Registriert: 31.12.2008 16:34

Re: mit runprogram starten einige Programme 2 mal

Beitrag 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.
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 10 Home
gh249@online.de
Beiträge: 11
Registriert: 14.05.2022 21:43

Re: mit runprogram starten einige Programme 2 mal

Beitrag 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.
Antworten