Kommanozeile

• Nov 19, 2019 - 14:27

Ich möchte Musescore von einem anderen Programm aus starten und dabei eine Midi Datei öffnen. Mit Anvil Studio klappt das. Kann man eine Kommandozeilenoption dafür benutzen? Oder gibt es ein OLE Interface?


Comments

Antwort auf von Jojo-Schmitz

Danke für den Hinweis. Musescore liegt bei mir (Windows 10) im Verzeichnis "C:\Program Files\MuseScore 3\bin\".
Dieser Pfad enthält ein Leerzeichen. Er ist wohl in der Registry in "Computer\HKEY_CLASSES_ROOT\Applications" abgelegt und dort in Gänsefüßchen eingefasst.
Ich rufe dann Musescore auf mit den Anweisungen

  ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.lpVerb := 'open';
  ShExecInfo.lpFile := 'MuseScore3.exe';
  ShExecInfo.lpDirectory := PChar(extractfilepath(fn));
  ShExecInfo.lpParameters := pwidechar('"'+extractfilename(fn)+'"');
  ShExecInfo.nShow := SW_SHOWNORMAL;
  res:= shellExecuteEx(@ShExecInfo);
  if res then BitBtn_MP3Notes.Font.color:=clred
  else
  showmessage('Die Anwendung "MuseScore" muss installiert sein'#13+
   'siehe "https://musescore.org/de"');

Das funktioniert jetzt problemlos.
Nur ein Schönheitsfehler:
Wenn ich den erzeugten Musescore Prozess über "TerminateProcess" beende (und nicht über den Musescore Menü-Befehl), dann erhalte ich beim nächsten Start von Musescore die Meldung "Die letzte Sitzung wurde unerwartet beendet. Sitzung wiederherstellen?".
Wenn ich da mit "Nein" antworte, klappt alles wie gewünscht.
Ich glaube, hiermit kann der Anwender leben.

Nochmal vielen Dank!
Wichard

Antwort auf von wichard

Was heißt Schönheitsfehler. Du schlägst Musescore den Boden unter den Füßen weg und schickst es ohne Widerspruch zu dulden in den Tod. Sei dankbar, das es dabei keine geöffneten Dateien schreddert.
Kenne allerdings auch keine Möglichkeit, Musescore sauber von außen zu beenden. Wird vermutlich auch nichts dafür einprogrammiert sein. (Mit OSC geht sowas meines Wissens nach nicht.)

Antwort auf von Jojo-Schmitz

Naja, MS exportiert eine Datei. Ist gut, wenn man auf die schnelle ein PDF oder eine Midi-Datei, oder ... haben will.
Mir ist allerdings etwas schleierhaft, was der OP erreichen will. Von extern in Musescore öffnen, ok. Aber warum mit SIGTERM dann Musescore abschießen, verstehe ich nicht. Das Öffnen sollte ja einen Sinn ergeben, also irgendeine Aktivität erfolgen und da muß man Musescore anfassen. Und wenn man dann schon dabei ist, kann man auch kontrolliert beenden.

Antwort auf von tuxan

Ich habe hier eine Anwendung, in der Liedtexte mit dem Beamer projiziert werden. Gelegentlich ist es gewünscht, ein Lied, zu dem eine MIDI Datei existiert, als Notenbild anzuzeigen. Dann klickt der User auf eine Taste und MuseScore wird mit der MIDI Datei aufgerufen und Musescore mit dem Notenbild wird angezeigt (klappt jetzt auch). Die Taste wird dann rot markiert.
Wenn die Taste dann wieder gedrückt wird, soll MuseScore geschlossen werden und die Taste wieder schwarz werden.
Das funktioniert auch indem ich den MusicScore Prozess mit "TerminateProcess" kille (mit "-o filename.pdf" klappt es nicht). Aber MusicScore ist dann beim nächsten Aufruf so freundlich und fragt, ob die letzte abgebrochene Sitzung wiederhergestellt werden soll. Das muss der User dann halt mit "nein" beantworten. (Die User sind Senioren und im Umgang mit dem Computer unerfahren).
Ich bin jetzt aber recht zufrieden mit der Lösung!
Danke für eure Hilfe!
Wichard

Antwort auf von wichard

Würde das mit der Taste auch bei einem PDF-Viewer funktionieren? Wenn ja, dann folgendes in einer Batchdatei ausführen:
musescore -o view.pdf $mididatei.mid
$pdfviewer view.pdf

Also Midi-Datei Mit Musescore im Batchmodus in Notenbild umwandeln und das in PDF-Datei speichern. Danach PDF-Datei mit entsprechendem Programm anzeigen.

Edit: Musescore kann auch Grafiken erstellen.

Do you still have an unanswered question? Please log in first to post your question.