Как использовать fb.RunMainMenuCommand(command) с нажатой клавишей Shift

Список разделов foobar2000 Есть вопрос!

Описание: У вас проблемы с foobar2000 и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть. Подробно описывайте проблему. Не забывайте указать версию плеера, название сборки, по возможности добавить скриншоты проблемы.

Сообщение #1 imfam » 07.05.2019, 15:02

Задумался вывести переключатель вывода звука на WSH панель.
Скрипт
Код: Выделить всё
Buttons.DEV = new Button(300, 7, 40, 10, {normal: imgPath + "Dev.png", hover: imgPath + "DevMH.png"}, function () {fb.RunMainMenuCommand("Playback/Device/Preferences...");}, "Device");
не работает
Нашёл ещё utils.IsKeyPressed(vkey), но не знаю, как этим пользоваться.
В DUI такая кнопка ставится без шифта.
imfam M
Автор темы
Откуда: Германия
Репутация: 28
С нами: 10 лет 10 месяцев

Сообщение #2 AHAPXICT » 07.05.2019, 17:00

imfam, не совсем понял зачем клавиша Shift к кнопке прямого действия? Клавишу Shift обычно используют для отображения скрытых пунктов контекстного меню. Команда fb.RunMainMenuCommand("Playback/Device/Preferences...") работает как и раньше на foobar2000 v1.3.20, может в новой версии v1.4 и выше изменилась строка команды? (Пример: было fb.RunMainMenuCommand("DSP #1 config") стало fb.RunMainMenuCommand("View/DSP/DSP #1 config") )
Ну и пример использования клавиши Shift для контекстного меню по ПКМ, без нажатой клавиши пункты меню Properties... и Configure... скрыты.
Код: Выделить всё
var rbtnDown, ShiftDown;
function on_mouse_rbtn_down(x, y, vkey){
    rbtnDown = true;
    ShiftDown = vkey==6 ? true : false;
}

function on_mouse_rbtn_up(x, y, vkey){
    if (!rbtnDown) return true;
    rbtnDown = false;
    if (ShiftDown)
    return;
}

====================================
///////////////////////////////////
    if (ShiftDown){
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0)
    _menu.AppendMenuItem(MF_STRING, 7, "Properties...");
    _menu.AppendMenuItem(MF_STRING, 8, "Configure...");
}
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #3 imfam » 08.05.2019, 13:19

AHAPXICT, пункт меню "Device" я вижу только при нажатом шифт. Нет его в меню без шифта ни в старых, ни в новых портабельных версиях.
Ничего у меня не получается с этой командой.
imfam M
Автор темы
Откуда: Германия
Репутация: 28
С нами: 10 лет 10 месяцев

Сообщение #4 LUR » 08.05.2019, 15:18

imfam, идем в горячие клавиши в настройках, добавляем новую и исследуем пути команд.

Аннотация 2019-05-08 141724.jpg


Аннотация 2019-05-08 141743.jpg


Как видим путь к выбору устройства: Playback/Device/Устройство. И в таком же духе далее.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #5 MC Web » 08.05.2019, 15:36

imfam, не вижу особого смысла в создании специальной кнопки для переключения вывода звука в Вашем варианте. Практически в любой сборке есть кнопка открывающее окно настроек (поз. 1), в окне выбрал (поз. 2) и будет искомый вариант. Для оперативности уж лучше назначить клавиши быстрого вызова (поз. 3).
Изображение
Ну, а если уж хочется отдельную кнопочку, то можете посмотреть примеры скриптов которые идут вместе с панелями foo_uie_wsh_panel_mod или foo_jscript_panel в папке samples.
MC Web
Репутация: 248
С нами: 10 лет 7 месяцев

Сообщение #6 imfam » 08.05.2019, 16:40

Спасибо всем за советы. Примеры скриптов я, конечно, смотрел, но не нашёл подходящего. Мне хотелось сделать линейку из 4-х кнопок для вывода на громкоговорители, наушники, внешний цап и выбор - многовато для горячих клавиш. Кнопки легко ставятся на Меню-бар в DUI, поэтому я подумал, что это можно сделать и на WSH панели.
imfam M
Автор темы
Откуда: Германия
Репутация: 28
С нами: 10 лет 10 месяцев

Сообщение #7 vladj » 08.05.2019, 19:32

imfam:{fb.RunMainMenuCommand("Playback/Device/Preferences...");}, "Device");не работает
Для того тебя и отправили посмотреть на команды, которые есть в настройках горячих клавиш. Ты написал "Device", а может-быть там "Устройство"....если едешь на русифицированной.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #8 AHAPXICT » 08.05.2019, 23:08

imfam, вам посоветовали другие способы переключения девайсов и это здорово, но ещё раз повторюсь - для WSH/JS panel прекрасно работают команды! Вы можете сделать как вы хотите:
imfam:Мне хотелось сделать линейку из 4-х кнопок для вывода на громкоговорители, наушники, внешний цап и выбор
эти строки прекрасно работают(проверил сегодня на foobar2000 v1.4.3, JS v2.2.2)
Пример:
{fb.RunMainMenuCommand("Playback/Device/DS : Динамики (Realtek High Definition Audio)")}
{fb.RunMainMenuCommand("Playback/Device/DS : Первичный звуковой драйвер")}
{fb.RunMainMenuCommand("Playback/Device/Preferences...")}
ссылки по теме: pccar.r и Help for scripting button to select an output device!
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #9 imfam » 08.05.2019, 23:46

AHAPXICT, спасибо за компетентный ответ. Раз у вас работает, будет и у меня, добьюсь. Я ошибался, думая, что дело в шифте - я ведь совсем не программист, просто пытаюсь компилировать чужой код.
imfam M
Автор темы
Откуда: Германия
Репутация: 28
С нами: 10 лет 10 месяцев

Сообщение #10 imfam » 10.05.2019, 11:10

У меня была поставлена лишняя ";" - и никто не заметил! Убрал и всё заработало.
imfam M
Автор темы
Откуда: Германия
Репутация: 28
С нами: 10 лет 10 месяцев

Сообщение #11 AHAPXICT » 12.05.2019, 10:23

imfam:У меня была поставлена лишняя ";" - и никто не заметил! Убрал и всё заработало.
Да я не заметил ";", но дело в том что, я как раз копировал эту часть кода function () {fb.RunMainMenuCommand("Playback/Device/Preferences...");}, "Device"); и всё работало.(как и сейчас протестировал по новой для перепроверки) Понятное дело что, "точка с запятой" там лишняя :smoke:
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #12 imfam » 16.05.2019, 14:15

Чтобы закрыть тему: всё работает, как АНАРХИСТ прописал. Почему сначала не получалось, теперь уже не разобраться - обновлял компоненты, что-то менял в скриптах... Результат на картинке
interface.jpg
imfam M
Автор темы
Откуда: Германия
Репутация: 28
С нами: 10 лет 10 месяцев


Вернуться в Есть вопрос!