Настройка программы SlyControl для чайников

Граббинг, Шаринг, Настройка ресиверов...
Аватара пользователя
Blaze
Информатик-аналитик
Информатик-аналитик
Сообщения: 8934
Зарегистрирован: 24.05.2007 17:23
Модель телефона: POCO X3 Pro 6/128
Прошивка: crDroid v7.7
Sat-ресивер: Tiviar Mini HD
Откуда: Данков
Контактная информация:

Настройка программы SlyControl для чайников

Непрочитанное сообщение#1 » Blaze » 22.11.2011 21:46

Настройка программы SlyControl для чайников
В этой статье я попытаюсь вам максимально быстро и просто объяснить, как настроить известную программу SlyControl, под свой пульт управления. И как создать скрипт под свою программу, чтоб SlyControl её понимал, не вдаваясь в подробности различных плагинов.

1. Итак, приступим. Качаем и устанавливаем саму программу, заходим в неё первый раз, и что мы видим, появляется Мастер настройки, и мы выбираем наш плагин пульта. Тут я думаю, ничего сложного нет, и я покажу пример под свой плагин для ИК порта Tekram Ir210. Под любой другой плагин делается всё практический идентично :
Изображение


2. Затем жмём кнопку "настройка", и появляется окно, где нам нужно выбрать пульт либо ТВ тюнер, в зависимости от плагина. Если у вас ТВ тюнер то следующий пункт вы можете не читать, а просто выбрать свой Тюнер из списка и нажать кнопку "ОК". А вот если вы сидите по ИК порту то здесь вам надо настроить кнопки на пульте, делается это так: Направляем пульт к ИК, жмём нужную кнопку, но надо сделать так чтобы в мониторинге снизу была не короткая а длинная волна, вот такая :
Изображение


3. Затем нажимаем кнопку "Add->" и задаём название кнопки, осторожно! Надо чтоб кнопки соответствовали требуемой команде, вот список всех нужных команд (остальные я решил не предлагать вам из-за ненадобности) :
Изображение
Полный список команд вы можете прочитать здесь : C:\Program Files\SlyDiman\SlyControl2\Data\std_keys.txt


4. Дальше жмём кнопку "применить", там появиться WinLirc, вам скорее всего он не понадобиться, жмём "применить" дальше. Появляется настройка управления общей громкостью, тоже жмём "применить". Вот появилось очень интересное и нужное окно со скриптами, ставьте все скрипты, которые вам нужны и жмите далее (и поставьте скрипты для WinAmp 2.x, Windows Media Player 6.4, TVtool и bRadio) . Вот здесь надо быть осторожнее, выставите программы по умолчанию для кнопок ТВ, Видео, Аудио, Радио. Ставьте те которые вам нужны, а если среди них нет нужной выберите любую, я лично расскажу вам на примере первых скриптов чтоб не путать, т.е. вот так :
Изображение


5. Жмём кнопку "Применить" до конца. Итак, он запустился, но не так как нужно. Причём я заметил одну ошибку при использовании порта Tekram IR210, неправильно прописан плагин, чтобы исправить это, жмём на вкладку "Структура", выбираем скрипт RemoteCFG.scs и правим StartRemote и StopRemote, меняем модуль IrDA на IR210, вот так вот :
Изображение

ПРИМЕЧНИЕ: Да, неувязочка вышла ;-) В последней версии это уже исправлено. Чтобы устранить проблему в корне нужно было в файле - C:\Program Files\SlyDiman\SlyControl2\Data\CfgWizard\remotecfg.scs заменить IrDA.Start() и IrDA.Stop() на Ir210.Start() и Ir210.Stop()

Итак, исправили. Теперь займёмся скриптами.


6. Чтобы SlyControl знал вашу программу надо написать скрипт, делается это очень легко (я покажу пример с TV из ATI Multimedia Center), нажимаем во вкладке "структура" кнопку новый скрипт :
Изображение

Набираем в поле "имя файла" название программы, допустим TV :
Изображение

Нажимаем открыть, нас спрашивают "создать файл TV.scs ?", жмём "Создать". Теперь у нас появился пустой скрипт во вкладке "скрипт", переходим туда и вставьте вот этот текст в скрипт :
PROG_Always = Group( Enabled ){
OnGroupEnable(){ WinMon.StartPreset( PROG ) }
PROG_Start = Hook( "TV", "PROG", Enabled, Break ){
h = WinMon.ActionPreset( PROG)
Skip( 2, h = 0 )
WinCtrl( "ACTIVATE", h )
Skip( 2 )
e = ExecFile( "c:\ПАПКА\ПРОГРАММА", "ПАРАМЕТР ЗАПУСКА можно стереть" )
Break( e = 0 )
GroupEnable( PROG )
}
PROG_Create = Hook( "WINMON", "PROG_CREATE", Enabled ){
GroupEnable( PROG )
}
PROG_Activate = Hook( "WINMON", "PROG_ACTIVATE", Enabled ){
GroupEnable( PROG )
}
PROG_Close = Hook( "WINMON", "PROG_CLOSE", Enabled ){
GroupDisable( PROG )
}
MediaDisable = Hook( "MMEDIA", "DISABLE", Enabled ){
Break( MediaDisable = 999 )
GroupDisable( PROG )
}
}
#===========================================================
PROG = Group( Disabled ){
OnGroupEnable(){
EventSend( "MMEDIA", "DISABLE", 999 )
OSD( "Apps", "НАЗВАНИЕ ПРОГРАММЫ", "P:CHRISTV.bmp" )
}
MyRemote = Hook( "REMOTE", "ПУЛЬТ", Enabled, Break ){
Break( MyRemote <> 0 )
h = WinMon.ActionPreset( PROG )
break( h = 0 )
# a = WinCtrl( "ISACTIVE", h )
# skip( 1, a <> 0 )
# WinCtrl( "ACTIVATE", h )
Keyboard( "PRESS", "КЛАВИША" )
}
My2Remote = Hook( "REMOTE", "ПУЛЬТ", Enabled, Break ){
Break( My2Remote <> 0 )
h = WinMon.ActionPreset( PROG )
break( h = 0 )
# a = WinCtrl( "ISACTIVE", h )
# skip( 1, a <> 0 )
# WinCtrl( "ACTIVATE", h )
Keyboard( "PRESS", "КЛАВИША" )
}
}

ПРИМЕЧАНИЕ: Все что справа от символа # считается комментарием и на работу не влияет. Это не относится к скриптам в папке C:\Program Files\SlyDiman\SlyControl2\Data\CfgWizard

Вставили? Хорошо, везде там где прописано PROG меняете на название программы (например ATITV). Так прописываем до конца, не забудьте прописать правильный путь к программе в ExecFile и если надо параметр добавить то добавляйте либо сотрите эту строчку вместе с запятой. Далее в скрипте будем прописывать, текст и иконку которые будут выводиться при запуске, вот так я сделал у себя :

ATITV_Always = Group( Enabled ){
OnGroupEnable(){ WinMon.StartPreset( ATITV) }
ATITV_Start = Hook( "TV", "ATITV", Enabled, Break ){
h = WinMon.ActionPreset( ATITV)
Skip( 2, h = 0 )
WinCtrl( "ACTIVATE", h )
Skip( 2 )
e = ExecFile( "F:\Program Files\ATI Multimedia\main\ATIMMC.EXE", "/TV+" )
Break( e = 0 )
GroupEnable( ATITV )
}
ATITV_Create = Hook( "WINMON", "ATITV_CREATE", Enabled ){
GroupEnable( TV )
}
ATITV_Activate = Hook( "WINMON", "ATITV_ACTIVATE", Enabled ){
GroupEnable( ATITV )
}
ATITV_Close = Hook( "WINMON", "ATITV_CLOSE", Enabled ){
GroupDisable( ATITV )
}
MediaDisable = Hook( "MMEDIA", "DISABLE", Enabled ){
Break( MediaDisable = 999 )
GroupDisable( ATITV )
}
}
#===========================================================
ATITV = Group( Disabled ){
OnGroupEnable(){
EventSend( "MMEDIA", "DISABLE", 999 )
OSD( "Apps", "Телевизор", "P:CHRISTV.bmp" )
}
Иконки находяться в С:\Program Files\SlyDiman\SlyControl2\Plugins\OSD\Images. Можно использовать *.ico и *.bmp файлы, т.е. свои вставлять.

ПРИМЕЧАНИЕ: Хочу пояснить что такое 999 рядом с MediaDisable. Когда открывается какая-то мультимедийная программа, для которой загружен скрипт (например Winamp), то всем скриптам посылается команда MediaDisable, чтобы они отключились и освободили кнопки типа PLAY, PAUSE, STOP и др. Сам же скрипт пославший сообщение MediaDisable не должен на него реагировать. Если этого не сделать, то невозможно предсказать какая и как из нескольких мультимедийных программ загруженных одновременно отреагирует например на кнопку PLAY. Число 999 может быть любое, главное чтобы оно не повторялось в других скриптах (см. main.scs). Если копать глубже то нужно смотреть в описании оператора Hook 4-й и 5-й параметры - они задают порядок и условия обработки события, в случае если одному событию (например одной кнопке пульта) соответствует несколько hook'ов.

Далее делаем две клавиши, "во весь экран" и "следующий канал", за основу берутся быстрые клавиши требуемой программы, то есть r ghbvthe для ATI MultiMedia Center у нас получилось "во весь экран" клавиши CTRL+F, а "следующий канал" клавиша вверх (сравните с оригиналом с верху и сделайте также под свою программу, строка MyRemote означает название команды) :

ZoomRemote = Hook( "REMOTE", "ZOOM", Enabled, Break ){
Break( ZoomRemote <> 0 )
h = WinMon.ActionPreset( TV )
break( h = 0 )
# a = WinCtrl( "ISACTIVE", h )
# skip( 1, a <> 0 )
# WinCtrl( "ACTIVATE", h )
Keyboard( "PRESS", "Ctrl+F" )
}
ChanelUPRemote = Hook( "REMOTE", "9", Enabled, Break ){
Break( ChanelUPRemote <> 0 )
h = WinMon.ActionPreset( TV )
break( h = 0 )
# a = WinCtrl( "ISACTIVE", h )
# skip( 1, a <> 0 )
# WinCtrl( "ACTIVATE", h )
Keyboard( "PRESS", "UP" )
}

ПРИМЕЧАНИЕ: Закомментированные команды (после #) написаны для проверки является ли окно нужной программы активным и если нет, то активизируют его. При необходимости уберите # перед этими командами.

ПРИМЕЧАНИЕ: Что означает Break( ChanelUPRemote <> 0 ) в последнем примере? Дело в том что при нажатии кнопки на пульте скрипт получает несколько сообщений, сначала с кодом 0, потом (если держать кнопку) то с кодом 1,2,3 и т.д., при отпускании кнопки на пульте код равен -1. Команда Break( ChanelUPRemote <> 0 ) отфильтровывает все кроме первого нажатия (код 0). Если ее убрать, то Ctrl+F сработает как минимум 2 раза - при нажатии кнопки на пульте (код 0) и при ее отпускании (код -1).

И что же у нас получилось а получилось то что при нажатии на пульте клавиши Zoom у нас прога становиться во весь экран :) а при нажатии другой кнопки переключался канал :) вот так дальше и задаем разные кнопки.


7. Теперь делаем так чтобы при нажатии на пульте кнопок TV, Video, Audio, Radio, появлялись не только те программы, которые можно выбрать в SlyControl`е, когда мы были в мастере настройки, а те что нам нужны.

Рассмотрим на примере кнопки TV, там можно выбрать много из стандартных. Но, вдруг они вам все не нравятся, или не подходят к вашему железу. Значит надо выбрать другую. Итак, помните мы выбирали в начале в Мастере настроек приложения по умолчанию? Вот там и посмотрите что вы выбрали, если вы выбрали то что я написал по умолчанию, т.е. TVTool то найдите его скрипт, потом в самом начале скрипта найдите строчки :
e = ExecFile( "C:\Program Files\TVTool 6.5\tvtool.exe" )
это команда выполнить, отредактируйте её чтоб там стояло, например :
e = ExecFile("C:\WINDOWS\System32\calc.exe" )
Теперь при нажатии на пульте кнопки Video будет запускаться калькулятор.

ПРИМЕЧАНИЕ: Не очень удачное решение ;-) Лучше откройте файл C:\Program Files\SlyDiman\SlyControl2\Data\CfgWizard\favorites.scs и найдите фрагмент :

### SELECT TV ###
# TVTool
# EventSend( "TV", "TVTOOL")
# DScaler
# EventSend( "TV", "DSCALER")

....

# MultiDec
# EventSend( "TV", "MultiDec")
### END ###

А теперь можете добавить ДВЕ строки вида :
# PROGNAME
# EventSend( "TV", "PROG")

и в мастере настройки для кнопки TV появится пункт PROGNAME. В приведенном выше примере PROG заменялся на ATITV, это будет выглядеть так :
# MultiDec
# EventSend( "TV", "MultiDec")
# ATI MultiMediaCenter (TV)
# EventSend( "TV", "ATITV")
### END ###



8. Теперь сделаем так, чтоб SlyControl нормально находил нашу программу. Заходим в вкладку модули, выбираем модуль WinMon. Находим в списке приложений мониторинга, нашу, т.е. в данном случае ATITV и нажимаем кнопку настройка событий, появляется непонятное окно с нужными нам строками Class Name и Windows Text :
Изображение

Но мы эти Class Name и Window Text можем и не знать, в этом случае надо зайти в нашу нужную программу, перейти в SlyControl, зайти в меню "настройка" и нажать на "Информация о программах…" либо нажать клавишу F3 :
Изображение

Потом появляется окно, начинаем искать нашу программу и ищем в ней более или менее вразумительного названия Class Name и Window Text :
Изображение

И вписываем эту информацию в модуль, и всё :)

ПРИМЕЧАНИЕ: Можно поступить проще - в "непонятном окне" нажать кнопку Detect, потом подвести курсор мыши к заголовку нужного окна и нажать кнопку Scroll Lock (по умолчанию). Если заголовок окна меняется (например в нем отображается название канала / фильма / музыкальногофайла), то WindowText можно не указывать. Но если ClassName не уникальный (встречается в других программах), придется в Window Detect Method вместо FindWindow выбрать Advanced и ... это уже не для этого FAQ ;-)

Советую после каждой удачной измены в скриптах делать резервную копию программы.

Ответить