Это руководство основано на Girder 3.1
Здесь я попытаюсь научить пользователей, пока ещё не знакомых с Grider, успешно работать с программой и покажу некоторые интересные возможности, которые она предоставляет. Я постараюсь объяснять, по возможности, просто. Однако, если что-то покажется вам неясным, напишите мне об этом, пожалуйста.
Я буду предполагать, что вы уже установили и настроили все необходимое железо. Проблема настройки оборудования выходит за рамки данной статьи, однако вы можете найти подробные инструкции в документации к плагинам. Также вам следует убедиться, что индикатор в правом нижнем углу окна Girder светится зелёным (что означает, что устройства ввода включены и будут, при необходимости, посылать сообщения Girder`у).
А что, черт побери, Girder умеет?В основном все то, что можете сделать вы сами при помощи мыши и клавиатуры. Girder может ввести текст, переместить курсор, кликнуть, запустить программу, выключить компьютер и т.д. Всё в пределах возможностей Windows, разумеется.
Но как?!Ох, вот это уже не так просто. Для начала я объясню вам базовые понятия Girder`а.
Все возможности Girder`а сосредоточены в командах. Это означает, что команда может запустить Netscape или, например, закрыть приложение.
Эти команды хранятся в так называемом дереве. Такие деревья вы уже видели, сравните, например, "Проводник Windows" с окном Girder.
Дерево Проводника Windows | Дерево Girder |
Если вы хотите добавить команду, вы можете выбрать пункт "Добавить команду" ("Add command") из меню "Редактировать" ("Edit"). Команды всегда должны быть либо в группе, либо в мультигруппе.
Разница между группой и мультигруппой будет станет понятна чуть позже. Пока используйте группу, в дереве она выглядит как жёлтая папка.
События и Строки событийGirder может принимать события от большого числа источников: от клавиатуры до интернета. К каждому из этих событий, например нажатию на клавишу, прикреплена своя строка, описывающая это событие. Эта строка события является уникальным идентификатором события внутри Girder.
Но как Girder узнает, какую команду запустить?
Мы объясняем Girder`у какую
команду запускать, выбирая эту команду в дереве и нажимая кнопку "Учить
событие" ("Learn Event"). Теперь Girder переходит в режим обучения, и
следующее событие будет связано с выбранной командой. Girder теперь точно знает,
какое событие должно должно запускать эту команду, и в следующий раз когда это
событие произойдёт, Girder запустит эту команду.
Выпадающий список рядом с кнопкой "Учить событие" ("Learn Event") позволяет учить Girder событиям от указанного плагина. Однако, не все плагины поддерживают эту возможность, поэтому обычно вы найдёте здесь только "Все" ("All") и "Событие Girder" ("Girder Event"). Для большинства плагинов вы можете выбрать "Все". В этом случае, после нажатия кнопки обучения Girder будет ждать наступления первого события. Иногда, однако, вам может понадобиться назначить специальное событие. Вы можете сделать это, выбрав соответствующий плагин из выпадающего меню. Например опция "Событие Girder" вызывает окно диалога дающее возможность выбрать несколько опций. Так, если вы видите это окно, но оно вам не нужно, просто закройте его и выберите "Все" в выпадающем списке.
Так Girder связывает Событие (например, уже упомянутое выше нажатие на клавишу) с Командой. Обратите внимание, что вы можете связать с Командой столько событий, сколько пожелаете.
Замечательно, теперь у меня в дереве есть Команда под названием "Новая" ("New") с привязанным к нему событием. Но она ничего не делает, как её заставить что-то сделать?Начнем с простого. Мы хотим открыть Блокнот (notepad). Первая вещь, на которую следует обратить внимание, это закладки действий. Это как раз то место, где вы на самом деле объясняете Girder`у, что должна делать та или иная команда.
Закладки Действий |
Переходим в закладку "ОС" ("OS"), из длинного списка выбираем "Выполнить" ("Execute"). Поле ввода "Файл" ("File") становится активным (среди прочих, но другие нас пока не интересуют). В этом поле вводим "%WINDOWS%notepad.exe", без кавычек, так как вы видите на рисунке. Нажимаем "Применить" ("Apply"). Обратите внимание, крайне важно нажать эту кнопку, поскольку только так Girder сохраняет введённые вами данные. Чтобы проверить, что всё сделано правильно, нажмите "F5", Блокнот должен запуститься. Точно так же, нажатие клавиши на вашем пульте, которую вы связали с этой командой, обучая событие, также запустит Блокнот прямо с дивана!
Клёво! Но что мне делать с этим блокнотом?Немного терпения. Мы ведь только начали.
Некоторым из действий Girder`а можно указать задачу, на которое они должны воздействовать. Будем называть его просто Задача. Я покажу вам, как использовать эту возможность, на примере Блокнота и действия, которое мы создали ранее.
Добавим ещё одну команду в дерево. Помните? Пункт "Добавить команду" ("Add command") из меню "Редактировать" ("Edit"). Выберите эту команду в дереве и переходите в закладки Действий. Сейчас мы заставим Girder набрать в Блокноте текст без нашего участия и даже без помощи клавиатуры!
Так.. И что теперь?Выберите новую команду и нажмите кнопку "Учить событие" ("Learn Event"), нажмите кнопку на вашем пульте, Girder добавит "Событие" в дерево и свяжет его с событием нажатия кнопки на пульте.
Следующее, что нам надо сделать, это заставить команду набирать текст. Для этого перейдём в закладку "Клавиатура" ("Keyboard").
Закладка "Клавиатура" ("Keyboard") |
Отметьте в свойствах вашего действия те же опции, что и на рисунке. То есть поставьте галочку у "Альтернативно" ("Alternative proc.") и введите какой-нибудь текст. Теперь нужно нажать "Применить" ("Apply"), помните? Теперь нам нужно проверить наше Действие. Убедитесь, что окно блокнота "в фокусе" (строка заголовка синего цвета, или какой вы выбрали). Теперь нажмите кнопку, которую вы сопоставили с этой Командой.
Ух ты! Класс! Текст сам собой появился в блокноте! Но как мне ввести текст в неактивное окно?Хороший вопрос. Задачей по умолчанию для Girder является активное окно, но часто бывает нужно управлять программой, которая не в фокусе. И тут нам на помощь приходит Таргетинг - Выбор задачи. Возращайтесь в Grider, в закладку Клавиатура. Сделали? Отлично. Видите кнопку "Задача" ("Target")? Смелее жмите. Girder покажет вам новое окно с кучей опций, текста и кнопок. Ненадолго остановитесь, и попробуйте вникнуть в то, что вы видите. В общем, тут всего 3 части, два списка, которые содержат список открытых окон, и настройки с правой стороны. Слева внизу -- место для проверки настроек.
Выбор задачи (The Target window) |
По-настоящему удобная функция в этом окне спрятана за иконкой в виде прицела справа вверху. Расположите окна так, чтобы вы могли одновременно видеть и окно Girder, и Блокнот. Теперь захватите мышью прицел и перетащите его на окно Блокнота. Обратите внимание, что вокруг окна Блокнота появляется чёрное обрамление. Наведите прицел на белое поле ввода Блокнота и отпустите его там. Если теперь вы посмотрите на окно выбора задачи, вы заметите, что поля "Имя" ("Name"), "Имя класса" ("ClassName"), "Приложение" ("Executable") и "Класс потомка" ("Child Class") уже заполнены значениями, похожими на те, что вы видите на рисунке.
Уфф, сложновато..Хорошо, попробуйте прочитать предыдущий абзац снова, или просто поиграть с функцией выбора задачи на других окнах. Просто чтобы прочувствовать.
Итак, теперь у нас есть признаки, по которы Grider найдёт нужное окно, чтобы посылать его.., точнее, ему, команду. Подождите, а почему бы не проверить, действительно ли Girder найдет окно, которое мы ему указали? Запросто. Нажмите кнопку "Найти" ("Find"). Как вы видите на рисунке, на моём компьютере нашлось 2 совпадения. Очевидно, у меня было открыто 2 блокнота, когда я делал снимок окна. Значит, по этому критерию Grider найдёт все открытые блокноты. Это нужно запомнить, если у вас открыто 2 блокнота, и настроили таргетинг на поиск блокнота, то Grider найдёт их оба, и действие будет запущено на каждый из них. (Не забудьте нажать "Применить", после того, как выберете задачу).
Проверим! Откройте любую другую программу, например Калькулятор или что-то ещё так, чтобы Блокнот потерял фокус. Нажмите кнопку на своём пульте. Вы видите, что в Блокноте, который теперь в фоне, появился текст.
Этот метод годится для множества действий, которые работают с окнами. Если, например, вы хотите управлять Winamp`ом, вам нужно выбрать его в качестве Цели, и после этого Winamp`ом можно управлять, даже когда он работает в фоне.
Да, понятно. А можно ещё один пример?Ноу проблем. Как насчёт того, чтобы научиться закрывать программу? Звучит неплохо. Снова добавляем новую команду в дерево, даём ей понятное имя (между прочим, так нужно делать всегда, но вы это и так знаете, правда?). Теперь нам нужно закрыть Блокнот, поэтому мы идём в закладку "Окно" ("Window""), и выбираем "Закрыть" ("Close") из списка. Не забудьте нажать "Применить"! Конечно, Girder`у нужна Цель для этого действия, если мы не хотим, чтобы он просто закрыл окно, которое сейчас в фокусе (помните?). Поэтому, в качестве цели мы выбираем Блокнот, как мы только что делали. Последнее, что осталось сделать -- связать это действие с событием (нажать "Учить событие"). Готово!
Теперь запустим Блокнот той кнопкой, которую вы для него назначили. И тут начинается самое интересное! Закройте его той кнопкой, которую вы назначили для закрытия. Мистическим образом Блокнот исчез! Нужно ли быть Гарри Поттером, чтобы творить чудеса? Уверен, нет. :-)
Обработка событийО, если вы хотите сделать свою жизнь легче, мультигруппы -- это именно то, что вам нужно. Мультигруппу можно представить себе как разновидность макро-команды. Мультигруппа состоит из нескольких вложенных в неё Действий. Конечно, эти команды могут иметь свои привязанные события, но Girder их проигнорирует, и будет обрабатывать только те события, что связаны непосредственно с Мультигруппой. Если поступит событие, которое совпадет с событием Мультигруппы, то сработают все команды этой Мультигруппы! Вот вам и автоматизация. Нажмаете одну кнопку, и все сразу начинает работать.
Группы сильно отличаются от Мультигрупп. Группу можно сравнить с директорией или папкой на вашем компьютере, они нужны просто для того, чтобы группировать близкие по смыслу команды. Так, например, вы можете собрать все команды, управляющие Winamp`ом в одну группу. Но это необязательно, вы можете организовывать их так, как вам удобно. Это дело вкуса.
Вам, наверное, интересно, что произойдёт, если два различных действия связать с одним и тем же событием. Какое из них сработает первым? Как и подсказывает логика, Girder обрабатывает дерево сверху вниз. Он начинает просматривать его с верхушки, ища команду, событие которой совпадало бы с произошедшим, и таким образом проходит всё дерево до самого низа. Если он находит подходящую команду, то она немедленно запускается. Таким образом, первой запустится ближайшая к верхушке команда.
СостоянияАх, мой любознательный читатель, это самая сложная для понимания часть. Это можно сделать, например, с помощью Состояний. Обычно, все команды находятся в состоянии номер 1. Это то состояние, в котором команда находится после того, как она была запущена после наступления соответствующего события. Однако, если мы установим число возможных состояний на число большее единицы, Girder будет увеличивать номер состояния команды на единицу каждый раз при наступлении события, связанного с этой командой. Когда номер состояния достигнет установленного предела, он снова сбросится до единицы.
А-а-а-а, мозги кипят! Срочно покажите мне пример.Хорошо, вернемся к нашим баранам. Точнее, к Блокнотам. У нас есть два состояния: одно это запуск Блокнота, другое -- закрытие. Поэтому нам нужно установить "Счетчик состояний" ("State Count") в 2. Поскольку команда срабатывает, когда состояние равно единице (1), то мы ставим "Начальное состояние" ("Begin state") для запуска Блокнота в единицу (1), а "Начальное состояние" для закрытия Блокнота будет равно двум (2). (Настройка состояний для команды находится в меню "Команды -> Установки состояния" ("Command -> State Settings") или вызывается горячей клавишей F6 - прим. переводчика). Теперь назначьте одно и то же событие обеим командам. И посмотрите, как Блокнот будет открываться и закрываться нажатием одной и той же кнопки!
Теперь сделаем то же самое при помощи Мультигруппы.
Сделать это несколько проще, потому что нам нужно задать только одно событие. Как это сделать: добавляем Мультигруппу в дерево, выбираем её и назначаем ей ("Учить событие" ("Learn event")) кнопку на пульте. Теперь добавляем в нашу мультигруппу две команды, так, как показано на рисунке:
Две команды в мультигруппе |
Делаем всё, как и раньше, включая настройку состояний, за исключением назначения событий. Почему? Потому что команды теперь внутри мультигруппы, и все они сработают внутри неё. Попробуйте, это очень удобно!
ЗаключениеТеперь, я надеюсь, когда вы немного разобрались в том, как Girder работает, пожалуйста, посмотрите документацию на сайте, а так же файлы помощи, прилагающиеся к программе. Вы найдёте, что возможности Girder`а практически безграничны. Также для вашего удобства я подготовил файл (на английском, размещён на сайте автора программы - прим. переводчика), в котором вы найдёте всё то, о чём мы говорили в этом руководстве. Но не стоит скачивать его прямо сейчас, ведь лучший способ узнать что-либо -- испытать это на собственном опыте!
Posted by alesk at November 14, 2003 06:14 PM