Автор статьи: Nem (nem-@mail.ru)
ПРИМЕЧАНИЯ сделаны автором программы SlyControl
В этой статье я попытаюсь вам максимально быстро и просто объяснить, как настроить
известную программу от автора SlyDiman, под свой пульт управления. И как создать
скрипт под свою программу, чтоб SlyControl её понимал, не вдаваясь в подробности
различных плагинов.
1. Итак, приступим:
Качаем и устанавливаем саму программу, заходим в неё первый раз, и что мы видим,
появляется Мастер настройки, и мы выбираем наш плагин пульта. Тут я думаю, ничего
сложного нет, и я покажу пример под свой плагин для ИК порта Tekram Ir210. Под
любой другой плагин делается всё практический идентично:
2. Затем жмём кнопку "настройка", и появляется окно, где нам нужно
выбрать пульт либо ТВ тюнер, в зависимости от плагина. Если у вас ТВ тюнер то
следующий пункт вы можете не читать, а просто выбрать свой Тюнер из списка и
нажать кнопку "ОК". А вот если вы сидите по ИК порту то здесь вам
надо настроить кнопки на пульте делается это так: Направляем пульт к ИК, жмём
нужную кнопку, но надо сделать так чтобы в мониторинге снизу была не короткая
а длинная волна, вот такая:
3. Затем нажимаем кнопку "Add->" и задаём название кнопки, осторожно!
Надо чтоб кнопки соответствовали требуемой команде, вот список всех нужных команд
(остальные я решил не предлагать вам из-за ненадобности) :
"POWER"
"VIDEO"
"AUDIO"
"TV"
"RADIO"
"TELETEXT"
"CD"
"DVD"
"VOL_UP"
"VOL_DOWN"
"MUTE"
"SETUP" (use it for LOOP, REPEAT or RECALL)
"DISPLAY" (use it for MENU)
"SCAN" (use it for A or AUTOSCAN)
"RED"
"YELLOW"
"GREEN"
"BLUE"
|
"0", "1", "2", "3", "4",
"5", "6", "7", "8", "9"
"UP"
"DOWN"
"LEFT"
"RIGHT"
"ENTER" (use it for OK)
"CANCEL"
"PLAY"
"PAUSE"
"STOP"
"RECORD"
"CAPTURE"
"ZOOM" (remap from RESIZE or FULLSCREEN)
"FWD" (use it for FF)
"REW" (use it for RW)
"NEXT" (remap from CH_UP)
"PREV" (remap from CH_DOWN)
"SLEEP" |
Полный список команд вы можете прочитать здесь:
(Диск):\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 ;-)
Советую после каждой удачной измены в скриптах делать резервную копию программы.
|