Rambler's Top100

 

SLYCONTROL

Устанавливаем программу SLYCONTROL обычный процесс инсталляции, для русских программа распространяется бесплатно.
При первом запуске появляется окно о регистрации, впишите в нём что просят и оно на месяц вас оставит. Перезапустите программу, теперь появляется мастер настроек. Первый шаг это выбор плагина для приема сигнала ДУ.

Немного лирики: программа может принимать сигналы от пульта ДУ, кроме COM порта, ещё и с плат ТВ тюнеров, звуковых карт, IR-DA приемников итд (так что посмотрите, может у вас как раз такое устройство, тогда нету проблем с датчиком). А мы продолжим, ставим галочку напротив DCD, как видите у нас к примеру еще одно устройство Bt-remote он же тюнер AVERMEDIA, мы управляем компьютером через два устройства. Далее жмем кнопку Настройка.

Появляется окно настройки выбранного плагина, для начала технические подробности, чтобы подключенный фотоприемник заработал:

  • · Выберите номер COM порта к которому подключен ваш датчик.
  • · Рядом выберете линию DCD (если вы собрали именно эту схему).
  • · Установите отметку RTS+DTR power (по умолчанию уже стоит).
  • · Если у вас совсем деревянный пульт ДУ придется подобрать (временные интервалы(Timing)).
  • Пробуйте освещать датчик командами с пульта, при прохождении команды вы видите систему кодирования или модулирования сигнала, цифровой код, и графическое отображение поступающего сигнала!!!

    Если сигнал от пульта проходит до программы, вам скорее всего (пока не разбираясь в особенностях программы), нужно переназначить существующие функции под свой пульт ДУ!
    A) Для этого установив курсор на нужной функции, чтобы она подсветилась, посылаете нужную вам команду с ПДУ, удостоверьтесь, что сигнал прошёл (надпись Code числовое значение изменится), нажимаете кнопку REPLACE (Код прошедший от вашего пульта, присвоен выбранной вами функции).
    B) В принципе в программе уже есть все необходимые функции для управления компьютером и программами, но по мере того как вы разберетесь с программой, вам понадобится добавить какую ни будь свою функцию в скрипт для управления программой, которой нет в списках SLYCONTROL. Для этого в приведенном выше окне, необходимо кнопкой ADD добавить команду, далее дать ей имя (чтобы не запутаться в них со временем, имя лучше давать с указателем например: NEXT-v команда "следующий" для видео-плееров, а NEXT-s команда "следующий" для программ управляющими просмотром спутникового телевидения, далее выполнить шаг
    A.
    C)При работе с программой вы заметите, что в пультах с которыми работает SLYCONTROL например от AVERMEDIA присутствуют кнопки AUDIO, VIDEO, TV \ FM, CD. При нажатии на эти кнопки они переключают все остальные на работу в режиме который обозначают, тем самым в некотором роде экономя не безразмерное количество кнопок на пульте, к примеру одна единственная на пульте кнопка POWER, будет в разных режимах включать и выключать присвоенную режиму программу, плюс через функцию таймера если ее удерживать она выключает компьютер, но обовсем по порядку.

    Вернемся к мастеру настроек, кнопкой пропустить пройдите 2-3 шаги, а на четвертом установите галочки напротив программ, которые у вас будут управляться SLYCONTROLом. Далее на пятом шаге, нужно указать какие программы будут по умолчанию VIDEO, AUDIO, TV, RADIO это как раз то, о чем сказано выше в
    С. Как добавить к этим секциям свои, будет описано дальше.
    Шестой шаг выставьте по своему желанию. Жмите кнопку применить программа запускается
    .

     

    Теперь займёмся скриптами.
    D) Чтобы SlyControl знал вашу программу надо написать скрипт, делается это легко во вкладке Скрипт, выбираем Maine.scs (скрипт конфигурации) в нем вписываем после всех строк начинающихся с "inclyde"
    такую же строку:

    Include ( "Apps\ имя скрипта.scs" ) # номер отключения медиа (используйте следующее число по возрастанию).

    Вписали, жмем F5 и сохраняем настройки. Теперь на вкладке скриптов станет на один больше, но пока с него толку нету, для того чтобы понять как устроен и работает скрипт, проанализируйте уже существующие скрипты в них вы заметите, что начало одинаково у всех разница только в имени итд. Программа очень чувствительна к синтаксису, те все фигурные скобки (нехватка их или лишние), даже пробелы перед кавычками и скобками могут считаться за ошибку!!!

    ---Перед началом описания скрипта, некоторые соображения от автора самого SlyControl---

    E) Действиями (Actions) могут быть вызовы функций из плагинов (внешние) или команды условного перехода, включения/выключения групп и ловушек, генерация события (внутренние). При выполнении действий их результат можно занести в переменную и далее использовать в качестве параметра в других действиях. При перехвате события ловушкой параметр события заносится в переменную с именем, соответствующую имени ловушки. Например:

    MyGroup = Group( Enabled ){

    MyHook = Hook( "REMOTE", "PLAY", Enabled ){

    OSD.ActionManual("Play %d", MyHook)

    При нажатии кнопки Play на дистанционке срабатывает ловушка MyHook, параметр заносится в переменную MyHook. Далее вызывается действие из плагина OSD (OnScreenDisplay) и в него передается параметр события. На экране будет появляться окно с надписью "Play 0", "Play 1", "Play 2" и "Play -1" при отпускании кнопки на дистанционке. Используем несколько переменных:

    MyGroup = Group( Enabled){

    MyHook = Hook( "REMOTE", "PLAY", Enabled ){

    Break(MyHook<>0)

    h = Winamp.ActionManual( "GET_HANDLE" )

    Skip2( h <> 0 )

    e = ExecFile.ActionManual( "C:\Program Files\Winamp\Winamp.exe" )

    Break( e = 0 )

    Winamp.ActionManual( "BUTTON1" )

    Здесь действия выполняются только один раз при нажатии на кнопку Play (MyHook=0), при удержании и отпускании кнопки последовательность действий прерывается командой Break(MyHook<>0). Далее запрашивается код окна WinAMP и если h<>0 (WinAMP запущен), следующие 2 строки пропускаются командой Skip2(h<>0). Если WinAMP не запущен, в переменную h заносится 0, команда Skip2 игнорируется и через плагин ExecFile запускается WinAMP. Если путь правильный и запуск удался, в переменную e заносится 1, иначе 0. Если запуск не удался, последовательность действий прерывается командой Break(e=0). Если WinAMP уже был запущен или не был, но удачно запустился, последней строкой в WinAMP включается воспроизведение (BUTTON1 соответствует кнопке Play, подробнее см. здесь).
    Плагины
    Прежде чем использовать плагины, их нужно загрузить командой Load. Эта команда может быть где угодно в тексте скрипта, но обязательно до использования данного плагина (лучше всего в первых строках). Например:

    ExecFile = Load( "ExecFile\ExecFile.dll" )

    Далее имя ExecFile может использоваться для вызова функций плагина (см. предыдущий пример).

    Чтобы плагин начал генерировать события, его нужно не только загрузить, но и запустить. Для этого используются функции Start, StartManual или StartPreset. В разных плагинах могут быть доступны разные комбинации этих функций. Например для клавиатуры доступна только функция Start:

    Keyboard.Start()

    Функция StartPreset доступна только для плагина WinMon, для этого плагина в закладке Plugins нужно настроить Event Preset, то есть указать программы/окна за которыми будет следить WinMon и генерировать соответствующие события. Например:

    WinMon.StartPreset("WINAMP")

    В данном случае "WINAMP" - это название настройки, которую нужно задать в Event Preset Setup на закладке Plugins. Функция StartManual доступна для таймера.
    Запускать плагины удобно из специальной ловушки OnGroupEnable внутри включенной по умолчанию группы, например:

    AlwaysKeyMouse = group( Enabled) {

    OnGroupEnable(){

    Keyboard.Start()

    На закладке Plugins есть три закладки: Plugin, Events и Actions, на которых соответственно есть кнопки Plugin Setup, Event Preset Setup и Action Preset Setup.
    Plugin Setup позволяет настроить общие свойства выбранного слева в списке плагина.

    Event Preset Setup и Action Preset Setup позволяют задать параметры для функций StartPreset и ActionPreset. В скрипте нужно указать название настройки (preset) и перезагрузить скрипт (), после чего в списке Presets на соответствующей закладке появляется это название и оно становится доступно для настройки. Например, если добавить в какую-нибудь ловушку действие:
    OSD.ActionPreset("MyText")

    и перезагрузить скрипт, в закладке Actions для MyText будет доступен Action Preset Setup, где можно задать шрифт, цвет и пр.
    Приоритеты ловушек
    При описании ловушки указывается не только включена ли она по умолчанию (3-й по счету параметр), но и продолжать ли обрабатывать данное событие (4-й по счету параметр), в случае если на него настроено несколько ловушек. Если запретить дальнейшую обработку, нужно указать приоритет данной ловушки (5-й по счету параметр). По умолчанию приоритет 128. Например:

    MyGroup = Group( Enabled){
    MyHook1 = Hook( "REMOTE", "PAUSE", Enabled ){
    OSD.ActionManual( "Pause OK" )
    }
    MyHook2 = Hook( "REMOTE", "PAUSE", Disabled, Break, 20 ){
    }
    MyHook3 = Hook( "REMOTE", "PLAY", Enabled ){
    HookEnable(MyGroup, MyHook2)
    }
    MyHook4 = Hook( "REMOTE", "STOP", Enabled ){
    HookDisable(MyGroup, MyHook2)
    }
    }
    При запуске скрипта ловушка MyHook2 выключена. При нажатии на дистанционке кнопки Pause, будет отображаться надпись "Pause OK". После нажатия кнопки Play включится ловушка MyHook2. У нее приоритет 20, то есть меньше чем у MyHook1 (по умолчанию 128), поэтому она обрабатывается раньше. В ней нет никаких действий, за то указано запретить дальнейшую обработку события другими ловушками (4-й параметр равен Break). Таким образом при нажатии кнопки Pause ловушка MyHook1 уже не будет срабатывать, хотя и останется включенной. При нажатии на дистанционке кнопки Stop сработает ловушка MyHook4 и выключит ловушку MyHook2. После этого ловушка MyHook1 снова начнет реагировать на кнопку Pause. По этому принципу реализован режим HOLD в скрипте remote.scs

    ---Начало скрипта---

     

    Multidec_Always = Group( Enabled ){

    OnGroupEnable(){ WinMon.StartPreset( Multidec ) }

    Multidec_Start = Hook( "Satelite", "Multidec", Enabled, Break ){

    h = WinMon.ActionPreset( Multidec )

    Skip( 2, h = 0 )

    WinCtrl.ActionManual( "ACTIVATE", h )

    Skip( 2 )

    Заглавие скрипта, программе указано, что программа мультидекодер запускается из ловушки "Satelite", "Multidec" включенную в скрипте Favorites, а если программа уже активна, (анализируется переменная h) то пропустить шаг запуска.

    e = ExecFile.ActionManual( "C:\Program Files\SATELITE\MultiDec35\MultiDec.exe" )

    Break( e = 0 )

    GroupEnable( Multidec )

    }

    В данных строках, программе указывается путь для запуска вашей программы.

    Multidec_Create = Hook( "WINMON", "Multidec_CREATE", Enabled ){

    GroupEnable( Multidec )

    }

    Multidec_Activate = Hook( "WINMON", "Multidec_ACTIVATE", Enabled ){

    GroupEnable( Multidec )

    }

    Multidec_Close = Hook( "WINMON", "Multidec_CLOSE", Enabled ){

    GroupDisable( Multidec )

    }

    MediaDisable = Hook( "MMEDIA", "DISABLE", Enabled ){

    Break( MediaDisable = 1 )

    GroupDisable( Multidec )

    }

    }

    Эти строки заставляют следить плагин WINWON, за окнами управляемой программы Возможно программа содержит и не одно окно в котором какими либо функциями надо управлять, тогда аналогично дайте окну имя, и пропишите с этим именем аналогичные три строки. Ниже мы в разделе ПЛАГИНЫ расскажем, как плагину WINMON указать идентификаторы этих окон. Нижняя строка указывает номер медиа для освобождения функций для другой запущенной программы, совпадает с описанным выше D)

    Итак для создания скрипта поменяйте слово Multidec на название вашего скрипта, не забудьте прописать правильный путь к программе в ExecFile.

    ПРИМЕЧАНИЕ: Все что справа от символа # считается комментарием и на работу не влияет.

    ---Далее в скрипте идут команды управления приложением---

     

    #================SKRIPT=================

    Multidec = Group( Disabled ){

    OnGroupEnable(){

    EventSend( " MMEDIA", "DISABLE", 1 )

    OSD( "Apps", "M-u-l-t-i D-e-c", "P:Multidec.ico" )

    }

    При отключении мультидека. Media освобождает функции для других приложений. Далее прописаны текст и иконка, которые будут выводиться при запуске, программы. Иконки находятся в
    С:\ProgramFiles\SlyDiman\SlyControl2\Plugins\OSD\Images.
    Можно использовать *.ico и *.bmp файлы, т.е. свои вставлять.

    Power = Hook( "REMOTE", "POWER-s", Enabled, Break ){

    Break( Power <> 0 )

    h = WinMon.ActionPreset( Multidec )

    WinCtrl.ActionManual( "CLOSE", h )

    Описание кнопки POWER. При ее нажатии, через плагин WINMON, плагин WINCTRL, передаст окну мультидека команду на закрытие программы.


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

    ---Далее наиболее интересные команды, прокомментируем ---

     

    PList = Hook( "REMOTE", "Preview-s", Enabled, Break ){

    Break( PList <> 0 )

    h = WinMon.ActionPreset( Multidec )

    Mode = Math.ActionManual( "GET", "MultidecMode" )

    Mode = Math.ActionManual( "x+1", Mode )

    Skip( 1, Mode <= 2 )

    Mode = Math.ActionManual( "0" )

    Math.ActionManual( "SET", "MultidecMode", Mode )

    Skip( 1, Mode <> 0 )

    WinCtrl( "WM_COMMAND", h , 1345, 0 )

    Skip( 1, Mode <> 1 )

    WinCtrl( "WM_COMMAND", h , 1340, 0 )

    Skip( 1, Mode <> 2 )

    WinCtrl( "WM_COMMAND", h , 1346, 0 )

    HookBreak( Multidec, SetupTimer )

    EventSend( "Multidec", "SETUP" )

    break()

    }

    SetupTimer = Hook( "Multidec", "SETUP", Enabled, Break ){

    HookEnable( Multidec, IncRemote )

    HookEnable( Multidec, DecRemote )

    Timer.ActionManual(5000)

    HookDisable( Multidec, IncRemote )

    HookDisable( Multidec, DecRemote )

    Пример зацикленной операции, здесь при помощи плагина MATH (математика), кнопка "Prewiew-s" выполняет по кругу три разных действия. Плагин выполняет операцию сложения. Сами действия, посылаются плагином WinCtrl программе, к примеру указание ( "WM_COMMAND", h , 1345, 0 ) есть команда зарезервированная в программе Multidec, для вызова списка фаворитных каналов. Чтобы узнать и использовать такие коды программ, интересующую вас программу нужно открыть в редакторе ресурсов, например ResurseTuner.

    К этой операции можно прибавить ловушку SetupTimer и они будут действовать совместно.
    Допустим такую ситуацию, что при вызове списка фаворитных каналов, в нем передвигаться нужно кнопками которые управляют переключение каналов, вроде удобно и не запутанно, но эти кнопки уже имеют установленные функции. Так вот ловушка SetupTimer будет на время 5сек переключать роль этих кнопок. Cтрока HookBreak( Multidec, SetupTimer ) продлит его действие, сбрасывая результат таймера, если вы продолжаете переключать списки каналов клавишей "Prewiew-s"

    Record = Hook( "REMOTE", "REC-s", Enabled, Break ){

    Break( Record <> 0 )

    h = WinMon.ActionPreset( Multidec )

    Keyboard( "WM_PRESS", "Ctrl+D", h )

    Здесь управление записью, клавишей REC-s организовано на обращении плагина WinMon, к окну программы MultiDec и передачи комбинации горячих клавиш, сформированной плагином KeyBoard.


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

    G) Теперь делаем так чтобы при нажатии на пульте кнопок TV, Video, Audio, Radio, появлялись не только те программы, которые можно выбрать в SlyControl`е, когда мы были в мастере настройки, а те что нам нужны, там можно выбрать много из стандартных. Но, вдруг они вам все не нравятся, или не подходят к вашему железу. Выбираем другую.

    Откройте файл C:\Program Files\SlyDiman\SlyControl2\Data\CfgWizard\favorites.scs и найдите нужный вам фрагмент кода,
    обычно перед ними стоит описание для чего они предназначены.

     

    #----------------- Favorite DVD Player ------------------------

    -1- PowerDvd = Hook( "REMOTE", "Power-d", Disabled, Break ){

    -2- Break( PowerDvd <> 0 )

    -3- HookBreak( Favorites, SatDvd )

    -4- EventSend( "DVD", "PowerDvd" )

    -5- HookDisable( Favorites, PowerDvd )

    }

    -6- SatDvd = Hook( "REMOTE", "Power-d", Enabled, Break ){

    Break( SatDvd <> 0 )

    -8- OSD.ActionManual( "Press DVD again for launch POWERDVD or wait for SatDvd" )

    -9- HookEnable( Favorites, PowerDvd )

    -10- Timer.ActionManual( 500 )

    -11 -HookDisable( Favorites, PowerDvd )

    -12- EventSend( "DVD", "SatDvd" )

    Предназначен для включения одной кнопкой "Power-d" двух DVD проигрывателей, при ее нажатии через 500 ms включается SatDvd, если же за эти 500 ms нажать эту кнопку еще раз, включается PowerDvd.

    Каким образом?

    Изначально ловушка -1- "PowerDvd" отключена, а -6- "SatDvd" включена, при нажатии клавиши power-d, появится надпись -8- "Press DVD again for launch POWERDVD or wait for SatDvd", -9- далее включится "PowerDvd" -10- на 500ms и -11- выключится, -12- затем включается программа SatDvd, но если в промежутке 500ms нажать power-d еще раз то событие на включение SatDvd будет отменено -3-, а запустится POWERDVD -4- и опять выключится ловушка -1- PowerDvd (для того чтобы, можно было бы повторить эту команду с тем же алгоритмом).


    Можно поступить и проще, но освоив более сложные скипты вы быстрее разберетесь в программе, да и количество клавиш на ДУ в сетки не безгранично, а таким образом можно скомпоновать на одной кнопке несколько функций.

    ---Плагины программы---

    WinMon

    Предназначен для того, чтобы команды из скриптов, достигали именно окна программы, для которой предназначены!

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

    Но мы эти Class Name и Window Text ещё не знаем, в этом случае надо открыть программу, Multidec перейти в SlyControl, нажать клавишу F3: появится информация об окнах запущенных приложений, установите две галочки AutoUpdate sec-3 (три пять секунд) и From Mouse Cursor.
    Переведя курсор мыши в окно программы Multidec, через установленное вами время обновления, вы увидите информацию об окне Multidec переместите быстро курсор обратно в WIndows Information и снимите галочку AutoUpdate, скопируйте данные из Class Name и Window Text и вставьте их в Windows Monitoring.

    ПРИМЕЧАНИЕ: Можно поступить проще - в Windows Monitoring нажать кнопку Detect, потом подвести курсор мыши к заголовку нужного окна и кликнуть мышкой. Если заголовок окна меняется (например в нем отображается название канала / фильма / музыкального файла), то WindowText можно не указывать. Но если ClassName не уникальный (встречается в других программах) то Slucontrol не сможет правильно передавать команды окну.

     

    [Home] [Софт Windows] [Софт Linux] [Софт для ДУ] [Железо] [Обмен опытом] [Сделай сам] [Это интересно] [Форум] [Обратная связь] [Рекламодателям]