Нажмите кнопку в приложении Electron, чтобы запустить файл в VL C? - PullRequest
0 голосов
/ 27 марта 2020

Я написал небольшое приложение-органайзер для медиатек с использованием Electron и Node, в основном для изучения фреймворков. Приложение читает в каталоге, сохраняет содержимое в локальном sqlite, а затем отображает данные в красиво отформатированных таблицах данных. Однако мне было интересно, можно ли было добавить функциональность, чтобы затем открыть эти файлы в VL C. Поиск действительно только отображает информацию для воспроизведения медиа-файлов в самом приложении Electron, но я хочу иметь возможность щелкать по кнопке в строке, чтобы открыть соответствующий файл в VL C или аналогичном медиаплеере. Есть какой-либо способ сделать это?

1 Ответ

0 голосов
/ 27 марта 2020

На самом деле вы можете запустить VL C как «дочерний процесс» вашего приложения Electron.

Если вы сохранили путь к файлу мультимедиа в переменной с именем filepath, вы можете использовать NodeJS * child_process модуль, подобный этому:

var child_process = require ("child_process");

// Spawn VLC
var proc = child_process.spawn ("vlc", [ filepath ], { shell: true });

// Handle VLC error output (from the process' stderr stream)
proc.stderr.on ("data", (data) => {
    console.error ("VLC: " + data.toString ());
});

// Optionally, also handle VLC general output (from the process' stdout stream)
proc.stdout.on ("data", (data) => {
    console.log ("VLC: " + data.toString ());
});

// Finally, detect when VLC has exited
proc.on ("exit", (code, signal) => {
    // Every code > 0 indicates an error.
    console.log ("VLC exited with code " + code);
});

Вся эта регистрация данных через proc.stderr, proc.stdout и proc.on ("exit") необязательна, но если вы если вы хотите, чтобы ваше приложение одновременно порождало только один экземпляр VL C, вы можете установить глобальную переменную при создании первого экземпляра, удалить ее (или установить в значение false или подобное) и обернуть весь этот блок в if () {}, поэтому этот код позволяет одновременно запускать только один экземпляр.

Обратите внимание, что порожденные таким образом дочерние процессы фактически не зависят от вашего приложения; если ваше приложение закрывается до закрытия VL C, VL C продолжит работу.

...