RunProgram() Parameter mit Anführungszeichen an mpv

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
jogo
Beiträge: 118
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

RunProgram() Parameter mit Anführungszeichen an mpv

Beitrag von jogo »

es geht um den Start einer Filmwiedergabe oder Stream mit mpv über RunProgram()
Ich schaffe es nicht den Fenstertitel, wenn er Leerzeichen enthält, komplett darzustellen.

Im Terminal funktioniert es, wie erwartet:

Code: Alles auswählen

mpv --title="Mein Fenstertitel" "Pfad/zur/Videodatei/oder/Stream" 
oder auch mit Hochkommas:

Code: Alles auswählen

mpv --title='Mein Fenstertitel' 'Pfad/zur/Videodatei/oder/Stream' 
Das gleiche jetzt mit RunProgram() mit maskierten Anführungszeichen wird alles korrekt gestartet, nur im mpv-Fenstertitel steht nur "Mein":

Code: Alles auswählen

 
Debug "--title=" + ~"\"" + "Mein Fenstertitel" + ~"\""  + " " + ~"\""+ "Pfad/zur/Videodatei/oder/Stream"+ ~"\""
RunProgram("mpv", "--title=" + ~"\"" + "Mein Fenstertitel" + ~"\""  + " " + ~"\""+ "Pfad/zur/Videodatei/oder/Stream"+ ~"\"", "")
Debugausgabe ist auch ok: --title="Mein Fenstertitel" "Pfad/zur/Videodatei/oder/Stream"

oder auch mit Hochkommas wird alles ausgeführt, nur der Fenstertitel wird nur bis zum ersten Leerzeichen angezeigt:

Code: Alles auswählen

 RunProgram("mpv", "--title='Mein Fenstertitel' "  + ~"\""+ "Pfad/zur/Videodatei/oder/Stream"+ ~"\"", "") 
Klar, ich könnte auch einfach Fenstertitel ohne Leerzeichen übergeben, irgendwie hat mich jedoch die Neugier gepackt, warum das nicht geht ;)
Vermutlich liegt das auch nicht an PureBasic - könnte auch an mpv liegen, vllt. kennt jemand eine Lösung?
--
Ideen gibt es viele - man muss sie nur haben...
Mint LMDE5+6 // PureBasic 6.12
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: RunProgram() Parameter mit Anführungszeichen an mpv

Beitrag von Bisonte »

Code: Alles auswählen

RunProgram("mpv", "--title=" + #DQUOTE$ + "Mein Fenstertitel" + #DQUOTE$ + " " + #DQUOTE$ + "Pfad/zur/Videodatei/oder/Stream" + #DQUOTE$, "") 
Wie sieht es mal ganz oldschool aus... (nicht diese "Escaperei" ;) )
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
jogo
Beiträge: 118
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: RunProgram() Parameter mit Anführungszeichen an mpv

Beitrag von jogo »

Danke für den Tip, hab ich gleich mal probiert - erzeugt das gleiche Ergebnis, wie die anderen Varianten.
Bei allen Varianten ist mir aufgefallen, dass die gequoteten/maskierten Anführungszeichen komischerweise im Fenstertitel dargestellt werden.
Wenn ein Leerzeichen im Titel enthalten ist, wird nur das erste Anführungszeichen dargestellt, bei einen durchgehenden String, werden beide Anführungszeichen dargestellt - sollte ja eigentlich nicht so sein.
Das beweist, dass RunProgramm() den Parameterstring mit Anführungszeichen an mpv übergibt, aber mpv das irgendwie falsch verarbeitet.
Warum das direkt über das Terminal richtig läuft, passt allerdings nicht zu dieser Logik. Letztendlich macht das Terminal ja auch nix anderes, als die Funktion RunProgram().
Schwer zu sagen, aus welcher Ecke das Problem nun wirklich kommt. Ich werde jetzt erstmal den Titelstring vorher auf Leerzeichen überprüfen und diese durch Unterstrich ersetzen.
--
Ideen gibt es viele - man muss sie nur haben...
Mint LMDE5+6 // PureBasic 6.12
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: RunProgram() Parameter mit Anführungszeichen an mpv

Beitrag von matbal »

Ich vermute, die Kommandozeile wird nicht direkt übergeben. Wenn die Anführungszeichen nicht am Anfang und Ende des Parameters sind, werden sie falsch interpretiert. Das ist beim Parameter --title. Eine Kombination von doppelten und einfachen Anführungszeichen hat den kompletten Titel übergeben. Allerdings sind die einfachen Anführungszeichen im Fenstertitel zu sehen.

Kommandozeile:

Code: Alles auswählen

 "--title='Mein Fenstertitel'" "Pfad/zur/Videodatei/oder/Stream"
PB-Code:

Code: Alles auswählen

Film$ = "/media/matthias/2T/vhs/Geschnitten/Abi Abschluss/01 Intro.mpg"
App$ = "mpv"

#DQ = #DQUOTE$

cmdline$ = #DQ + "--title='Mein Fenstertitel'" + #DQ + " " + #DQ + Film$ + #DQ

Debug cmdline$
RunProgram(App$, cmdline$, "")
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: RunProgram() Parameter mit Anführungszeichen an mpv

Beitrag von Axolotl »

Anstelle von "_" geht vielleicht auch Chr(160)?
Unter Windows ist das meistens auch ein Leerzeichen, allerdings wird es anders behandelt als Chr(32).
Über die Tastatur kann man u.W. das Zeichen auch durch ALT+0160 (Zahlen auf dem NUMPAD) eingeben.
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
jogo
Beiträge: 118
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: RunProgram() Parameter mit Anführungszeichen an mpv

Beitrag von jogo »

@matbal: dein Ansatz führte zur Lösung. Die zusätzlichen Anführungszeichen am Anfang & Ende jeden Parameters waren ausschlaggebend
Habe dann einfach mal die Hochkommas rausgenommen - es funktionierte trotzdem, der Titel wird makellos angezeigt ;)

Code: Alles auswählen

Film$ = "/media/matthias/2T/vhs/Geschnitten/Abi Abschluss/01 Intro.mpg"
App$ = "mpv"

#DQ = #DQUOTE$

cmdline$ = #DQ + "--title=Mein Fenstertitel" + #DQ + " " + #DQ + Film$ + #DQ ; <-- hab hier nur die Hochkommas entfernt - funktioniert trotzdem

Debug cmdline$
RunProgram(App$, cmdline$, "")
@Axolotl: Chr(160) funktioniert - auch in Linux - verrückt, sieht aus wie ein Leerzeichen, ist aber keins.
Das ist ein wirklich praktischer Trick, wenn irgendwo Leerzeichen Probleme machen. ;)

Danke für die Hilfe & Tips
--
Ideen gibt es viele - man muss sie nur haben...
Mint LMDE5+6 // PureBasic 6.12
Antworten