Seite 1 von 2

runprogram() mit gewählter app

Verfasst: 08.01.2021 18:53
von kartmanne
HI,
ich möchte aus meiner Anwendung heraus einen Mediaplayer meiner Wahl starten und damit ein media-file (Sound oder Film) abspielen.

Mittels

Code: Alles auswählen

mediaplayer$ =OpenFileRequester("Mediaplayer wählen",b$,"*.*",0)
wähle ich die app aus dem Ordner programme aus. (z.B. QT oder VLC)

Und dann möchte ich diese ausgewählten app starten. Dazu nutze ich

Code: Alles auswählen

RunProgram(#DQUOTE$+mediaplayer$+#DQUOTE$,
                     #DQUOTE$+songs(index)\link.s+#DQUOTE$,
                     ordner_path$+songs$)
songs(index)\link.s beinhaltet die existierende Mediadatei z.B. "film.mp4", die in ordner_path$+songs$ liegt.

mediaplayer$ = "/Applications/QuickTime Player.app" - und die app existiert auch dort.
oder
mediaplayer$ = "/Applications/VLC.app" - und die app existiert auch dort.

Wenn ich den 1. Parameter in runprogram() durch "open" ersetzte startet quicktime (Standardplayer) und spielt den film ab.
Setzte ich aber mediaplayer$ ein (mit oder ohne #DQUOTE$ startet nix.

Wie kann ich meine Wunsch-mediaplayer-app richtig definieren?

Re: runprogram() mit gewählter app

Verfasst: 08.01.2021 19:38
von mk-soft
Unter macOS ist eine APP ein Ordner. Du must den gesamten Path bei RunProgram zur Anwendung angeben

Siehe Finder -> Rechte Maus auf APP -> Paketinhalt zeigen
"/Applications/VLC.app/Contents/MacOS/VLC"

Re: runprogram() mit gewählter app

Verfasst: 08.01.2021 20:19
von kartmanne
HI,
ahso. Mit openfilerequester() kann ich nicht "in einen app-Ordner" einsteigen. Oder doch?

Ich würde also den gewählten app-Ordner nach einer ausführbaren Datei durchsuchen. Wenn's da mehrere gibt... hmmm...

Re: runprogram() mit gewählter app

Verfasst: 08.01.2021 21:37
von kartmanne
HI,

habe mir ein paar "app-Pakete" angesehen.
Ist es Konvention, dass ein app Ordner den Namen der app hat und die app dann in dem app-Paket immer in /Contents/MacOS/ liegt?

Also im Paket "XYZ.app" liegt die ausführbare datei immer hier: /Contents/MacOS/XYZ.app

Korrekt?

Re: runprogram() mit gewählter app

Verfasst: 08.01.2021 21:47
von mk-soft
Ja, "../MyApp.app/Contents/MacOS/MyApp"

Auch zugehörige Dateien (Nur lesend) gehören in diesen Ordner. "MyApp.app/Contents/Resources"

Siehe PB IDE Tool MyAppData

Re: runprogram() mit gewählter app

Verfasst: 09.01.2021 08:54
von kartmanne
HI,

klasse. Vielen Dank.

Re: runprogram() mit gewählter app

Verfasst: 09.01.2021 11:10
von kartmanne
HI,
mit VLC geht's, VLC startet ud spielt den song(mp3) ab:

Code: Alles auswählen

mediaplayer$ =OpenFileRequester("Mediaplayer wählen",b$,"*.*",0)

Code: Alles auswählen

a$=mediaplayer$+"/Contents/MacOS/"+RemoveString(GetFilePart(mediaplayer$),".app",#PB_String_NoCase)

Code: Alles auswählen

RunProgram(a$,
                     #DQUOTE$+songs(index)\link.s+#DQUOTE$,
                     ordner_path$+songs$)
Mit Quicktime geht's nicht.
Quicktime startet, wenn ich das so mache:

Code: Alles auswählen

RunProgram(#DQUOTE$+a$+#DQUOTE$,
                     #DQUOTE$+songs(index)\link.s+#DQUOTE$,
                     ordner_path$+songs$)
Dann allerdings meldet MacOSX, dass ich keine Zugriffsrechte hätte.
Mit

Code: Alles auswählen

RunProgram("open",
                     #DQUOTE$+songs(index)\link.s+#DQUOTE$,
                     ordner_path$+songs$)
allerdings startet Quicktime und spielt den song ab.

Wenn im app-path keine Leerzeichen sind, dann darf ich auch nicht die #DQUOTE$ verwenden. So bei VLC. VLC startet nicht, wenn ich

Code: Alles auswählen

runprogram(#DQUOTE$+a$+#DQUOTE$,... 
verwende.

Ich möchte nun ungern für QT oder Leerzeichen eine Sonderlocke einbauen. Es möge ja für alle apps funktionieren.
Wie könnte das gehen?

Re: runprogram() mit gewählter app

Verfasst: 09.01.2021 13:47
von mk-soft
Programm ohne dquotes und Media File mit dquotes

Code: Alles auswählen

Debug "Player"
prog.s = OpenFileRequester("Prog", "", "", 0)

Debug "Media"
media.s = OpenFileRequester("Media", "", "", 0)

media.s = #DQUOTE$ + media + #DQUOTE$

run_prog.s = prog + "/Contents/MacOS/" + GetFilePart(prog, #PB_FileSystem_NoExtension)

Debug "Player " + run_prog
Debug "Media " + media

r1 = RunProgram(run_prog, media, "")
Debug r1

CallDebugger

Re: runprogram() mit gewählter app

Verfasst: 09.01.2021 15:48
von kartmanne
HI,

ja, danke, schön klar dargestellt - so wie ich's schon verstanden hatte ;-)

Aber... wenn ich mit

Code: Alles auswählen

prog.s = OpenFileRequester("Prog", "", "", 0)
Quicktime ("Quicktime Player.app", beinhaltet chr(34), deshalb hatte ich #dquotes probiert) auswähle, dann wird zwar QT geöffnet, meldet aber, dass die media.s nicht göffnet werden kann, da mir die Zugriffsrechte fehlen. Dafür hätt ich ne Lösung gesucht.
Aber, ich kann den Fall auch einfach "ignorieren" und dem Nutzer meiner App empfehlen, nur einen anderen mediaplayer zu wählen, wenn's nicht QT ( üblich Standard bei MacOS) sein soll. Per "open" spielt QT (als Standardplayer) das media.s ja ab.

Re: runprogram() mit gewählter app

Verfasst: 09.01.2021 16:59
von mk-soft
Der prog String kann keine dquotes enthalten, sonst ist bei dir etwas am OS nicht in Ordnung.
Der QT ist bei mir auch nicht mehr der Standard Player (Big Sur)
Wenn du auf die Media Datei keine zugriff hast, sind die Ordner Berechtigungen nicht richtig.

Zeige mal deinen Lauffähigen Code ...

P.S. Ich Denker eher das kein Zugriff fehler ist, sondern das der QT das Format nicht abspielen kann (QT ist zu alt)