Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
всё о скриптах JAWS.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
312.03 Кб
Скачать

If (nAttributes & attrib_highlight) then

SayHighlightedText(hwnd, buffer)

Первая из двух строк является знаменитым поразрядным If-Then

утверждением, о котором мы говорили в разделе о поразрядных операторах.

Если обнаружится, что это утверждение истинно, мы знаем, что текст

является выделенным и обработка передается в следующую строку, которая

является вызовом функции SayHighlightedText. Эта функция обрабатывает

озвучивание всего нового выделенного текста. Если поразрядное If-Then

утверждение является ложным, функция SayHighlightedText не вызывается а

вместо этого выполняются следующие строки. Там написано:

else

SayNonHighlightedText(hwnd, buffer)

Другими словами, если текст является выделенным цветом, вызываем функцию

SayHighlightedText. В противном случае вызываем функцию

SayNonHighlightedText. Вы, вероятно, уже догадались, что функция

SayNonHighlightedText вызывается, чтобы обрабатывать озвучивание текста, не

выделенного цветом.

Так что же происходит, если скрипт решил, что текст ассоциирован с

каким-либо фреймом? В этом случае обработка функций перескочит к

следующей строке:

if (nEcho == ECHO_NONE) then

Эта строка сравнивает значение параметра nEcho с константой ECHO_NONE.

Если выяснится, что они равны, это означает, что эхо фрейма установлено в

значении"Нет", и ничего говорить не надо. В этом случае выполняется простой

возврат (Return), ничего не озвучивается и все дела. Если это утверждение

If-Then возвращает False, эхо не установлено в значение "Нет" и необходимо

проделать еще кое-какую работу. Тогда необходимо обработать следующую

строку:

if (nEcho == ECHO_ALL ||

(nAttributes & ATTRIB_HIGHLIGHT)) then

Первая часть этого If-Then утверждения спрашивает, является ли nEcho

равным Echo_All. Другими словами, не установлено ли эхо фрейма в значение

"Озвучивать весь текст"? Вторая часть утверждения If-Then является нашей

старой доброй поразрядной операцией, которая определяет, является ли текст

выделенным цветом. Если оба эти утверждения оказываются верными

(вспомните, что оператор || является оператором Или), то выполняется

следующая строка функции. В этой строке написано:

SayString(buffer)

Это утверждение просто озвучивает содержимое переменной Buffer, которое

является текстом, написанным на экране. Если для фрейма не было задано

озвучивать все, или текст не выделен цветом, функция завершит работу,

вообще ничего не озвучивая.

Боже, какая сложная работа! Всю эту обработку Jaws выполняет

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

текст. Это великолепный пример того, как Jaws отслеживает все, что пишется

на экране и решает, что вам нужно услышать. Эта функция воплощает

многие аспекты языка скриптов Jaws, о которых мы говорили, и вы должны

внимательно ее изучать, пока не поймете, как она работает. Если вы это

поймете, вы будете на пути к тому, чтобы стать знатоком языка скриатов и

сможете создавать свои собственные, продвинутые скрипты.

Список функций событий

Далее приведен список специальных функций, запускаемых системными

событиями. Если вы хотите использовать эти функции для создания

собственных скриптов, вы должны использовать имя в точности так, как

написано здесь, и задавать все предписанные переменные в вызове функции в

предписанном порядке. Более подробную информацию об этих функциях

можно найти в файле BUKLTIN.JSD. Обратите внимание, что этот список был

обновлен, чтобы включить функции событий из версии 3.3. Если вы

пользуетесь более ранней версией, у вас не будет всех элементов, которые

перечислены ниже.

AutoStartEvent - запускается, когда файл секриптов, содержащий эту

функцию, загружается или получает фокус.

Параметры - нет.

AutoFinishEvent - запускается, когда файл скриптов, содержащий эту

функцию, закрывается или теряет фокус.

Параметры - никаких.

ItemNotFoundEvent - запускается, когда запрошенный элемент не был найден в

модели Off-Screen.

Параметры:

целое, содержащее оконную ручку текущего окна.

NewTextEvent - запускается, если где-то на экране появляется новый текст.

Параметры:

Handle, содержащий оконную ручку текущего окна;

String, в котором содержится появившийся текст.

Integer, содержащий атрибут текста.

Integer, содержащий цвет текста;

Integer, содержащий цвет фона;

Integer, содержащий установку эхо;

String, содержащий имя фрейма, где появился текст.

TopEdgeEvent - запускается, когда активный курсор сталкивается с верхним

краем окна.

Параметры:

Handle, содержащий оконную ручку окна, край которого был достигнут.

BottomEdgeEvent - запускается, когда активный курсор сталкивается с

нижним краем окна.

Параметры:

Handle, содержащий оконную ручку окна, край которого был достигнут.

FocusChangedEvent - запускается, когда визуальный фокус изменяется.

Параметры:

Handle, содержащий оконную ручку текущего активного окна.

Handle, содержащий оконную ручку предыдущего окна.

MenuModeEvent - запускается, когда фокус входит в меню.

Параметры:

Handle, содержащий оконную ручку текущего активного окна.

Integer, содержащий режим меню.

CursorChangedEvent - запускается, когда изменяется указатель мыши (Jaws

курсор).

Параметры:

Integer, содержащий новую форму указателя.

WindowCreatedEvent - запускается, когда появляется новое окно.

Параметры:

Handle, содержащий оконную ручку нового окна.

Integer, содержащий координату левого края окна.

Integer, содержащий координату верхнего края окна.

Integer, содержащий координату правого края окна.

Integer, содержащий координату нижнего края окна.

WindowDestroyedEvent - запускается, когда окно исчезает.

Параметры:

Handle, содержащий оконную ручку исчезнувшего окна.

WindowMinMaxEvent - запускается, когда изменяется статус окна

свернуть/распахнуть.

Параметры:

Handle, содержащий оконную ручку окна

Integer, описывающий общее действие, происходящее в окне;

Integer, описывающий специфическое действие, имеющее место в окне.

WindowResizedEvent - запускается, когда окно близко к тому, чтобы изменить

свой размер.

Параметры:

Handle, содержащий оконную ручку окна, которое изменяет свой размер;

Integer, содержащий левый край окна, изменяющего свой размер;

Integer, содержащий верхний край окна, изменяющего свой размер;

Integer, содержащий правый край окна, изменяющего свой размер;

Integer, содержащий нижний край окна, изменяющего свой размер;

AppWillNotSpeakEvent - эта функция событий

используется только при инсталляции Jaws и не предназначена для общих

задач создания скриптов.

KeyPressedEvent - запускается любым нажатием клавиш, за которыми

закреплен скрипт, прежде чем отрабатывает этот скрипт.

Параметры:

целое, содержащее код клавиши.

String, содержащий имя клавиши, как оно выглядит в раскладке клавиш

Integer, определяющий, закреплена ли клавиша за брайлевским дисплеем;

Integer, определяющий, закреплена ли клавиша за скриптом;

MouseMovedEvent - запускается при перемещении мыши.

Параметры:

Integer, задающее координату X

Integer, задающий координату Y

FocusPointMovedEvent - вызывается всякий раз, когда PC курсор перемещается

в другое место на экране.

Параметры:

Integer, задающий текущее горизонтальное положение PC курсора

Integer, задающий текущее вертикальное положение PC курсора

Integer, задающий предыдущее горизонтальное положение PC курсора

Integer, задающий предыдущее вертикальное положение PC курсора

Integer, содержащий единицу перемещения, как задано в HJConst.jsh

Integer, задающий направление перемещения, как указано в HJConst.jsh

Integer, указывающий количество времени6 которое прошло со времени

перемещения.

ActiveItemChangedEvent - запускается, когда изменяется активный элемент в

объекте

Параметры: нет

CursorShapeChangedEvent - это событие происходит, когда изменяется форма

указателя мыши.

параметры:

String, содержащий текущий тип курсора.

TooltipEvent - это событие вызывается если JCF опция

OPT_PROCESSTOOLTIPEVENT установлена в значении 1 или On. Она также

вызывается автоматическим маркировщиком графики. Это событие

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

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

глобальной переменной типа String strLastTooltip.

Параметры:

Handle, содержащий ручку совета на панели инструментов.

String, содержащий текст совета.

ScreenMagnifiedEvent - функция события, которая запускается всякий раз,:

когда активизируется увеличение экрана, деативизируется или уровень

увеличения изменяется (используется Magic).

Параметры:

Integer, который указывает, включено ли увеличение.

Integer, который указывает уровень увеличения.

FocusChangedMagEvent - эта функция запускается, когда фокус перемещается

от одного органа управления к другому.

Параметры:

Handle окна, содержащего фокус.

Handle предыдущего окна, в котором был фокус.

ActiveItemChangedMagEvent - эта функция событий вызывается, когда

выбранный элемент в списке или в дереве меняется, чтобы обрабатывать все

специфические функции Magic, которые должны иметь место, когда

выбранный элемент изменяется (используется Magic)

FocusPointMovedMagEvent - эта функция вызывается FocusPointMovedEvent

чтобы обрабатывать специфические функции Magic, которые должны иметь

место, когда ууказатель фокуса изменяется.

Параметры:

Integer, содержащий X координату курсора после изменения фокуса.

Integer, содержащий Y координату курсора после изменения фокуса.

Integer, содержащий X координату курсора перед изменением фокуса.

Integer, содержащий Y координату курсора перед изменением. фокуса.

Integer, содержащий единицу перемещения, как задано в файле HJConst.JSH.

Integer, содержащий направление перемещения, как указано в файле HJConst.JSH.

Integer, содержащий количество времени, которое прошло со времени

перемещения.

NewTextMagEvent - функция, предназначенная для обработки, которая

специфична для отслеживания Magic, когда на экране появляется новый текст.

(используется Magic).

Параметры:

Handle, содержащий ручку окна текущего окна.

String, содержащий новый текст.

Integer, содержащий атрибут текста.

Integer, содержащий цвет текста.

Integer, содержащий цвет фона.

Integer, содержащий установку эхо.

String, содержащий имя фрейма, в котором появился текст.

MenuModeMagEvent - это событие срабатывает, когда статус меню изменяется

(используется Magic).

Параметры:

Handle, содержащий ручку меню.

Integer, содержащий состояние меню, которое изменилось.

Техника создания скриптов

Изучаем приложение с помощью функций утилит

Прежде чем писать файл скриптов, мы должны иметь некоторое

представление о том, что мы хотим выполнить с его помощью. Нам также

часто необходимо познакомиться с окнами в нашем приложении, чтобы

посмотреть, что имеется на экране и как это можно озвучить. Нам также

может понадобиться подробная информация об окнах, такая, как класс,

контрольный идентификатор и ручка (Handle), а равно как и отношения

родители-дети. В файле скриптов по умолчанию есть набор скриптов, которые

называются скрипты утилит, которые могут сослужить здесь немалую

службу. Эти утилиты способствуют написанию скриптов тем, что позволяют

пользователю познакомиться с взаимоотношениями типа родители-дети для

различных окон в приложении и предоставляя подробную информацию о

каждом окне, такую, как класс, контрольный идентификатор и т.д. Каждая из

утилит описана ниже, вместе с закрепленной за ней комбинацией клавиш. Все

эти утилиты используются в режиме Home Row (Insert+Пробел). Режим Home

Row представляет собой смещенное состояние клавиатуры, несколько

напоминающее смещенное состояние, которое можно получить с помощью

клавиш CapsLock и NumLock. Это означает, что вы получаете доступ к

каждой функции с помощью указанной комбинации клавиш, после того, как

вы включили режим Home Row путем одновременного нажатия клавиш Insert

и Пробел. Чтобы выйти из режима, нажмите Insert+Пробел во второй раз.

INSERT + H - помощь по горячим клавишам, перечисляет все утилиты вместе

с закрепленными за ними горячими клавишами.

F1 - эта клавиша используется для озвучивания информации о текущем окне

или органе управления. Какая информация будет озвучиваться, зависит от

режима вывода, который вы выбрали. Этот режим вывода задается клавишей

F3 (см. ниже). Клавиша F3 похожа на селектор, который определяет, какие

данные вы будете получать, а клавиша F1 в действительности предоставляет

вам эти данные. Когда клавиша F1 быстро нажимается дважды подряд,

информация произносится по буквам. Режим посимвольного чтения не

применяется к целым числам.

F3 - эта клавиша задает режим вывода. Если повторно нажимать F3, режим

вывода будет циклически переключаться в следующем порядке:

SayTypeAndText, фокус или Handle окна, контрольный идентификатор, класс

окна, тип окна, и первое действительное имя окна. Это означает, что это

будут данные, которые вы услышите, если нажмете клавишу F1. Можно

прокручиваться и в обратном порядке, если нажимать Shift+F3.

Insert+Home на цифровой клавиатуре - эта клавиша устанавливает режим

вывода обратно в SayTypeAndText и ею можно пользоваться чтобы вернуться

к этой настройке, вместо того, чтобы прокручиваться через все режимы.

INSERT + F1 - эта клавиша посылает запрошенную информацию (режим

вывода) в окно сообщения. Это недоступно в тех режимах вывода, которые

возвращают целочисленные значения.

Tab - эта клавиша перемещает Jaws курсор к следующему окну того же

самого логического уровня, что и то, в котором вы в данный момент

находитесь, и озвучивает требуемую информацию соответственно режиму

вывода, который вы установили клавишей F3.

Shift+Tab - эта клавиша перемещает Jaws курсор к предыдущему окну того

же логического уровня, что и то, в котором вы находитесь, и озвучивает

требуемую информацию, соответственно режиму вывода, который вы

установили клавишей F3.

F2 - эта клавиша перемещает Jaws курсор к первому дочернему окну

текущего окна и озвучивает требуемую информацию, соответственно режиму

вывода, который вы установили клавишей F3.

SHIFT + F2 - перемещает Jaws курсор к родительскому окну текущего окна

и озвучивает требуемую информацию, соответственно режиму вывода, который

вы установили клавишей F3.

F4 - эта клавиша является селектором, которая задает режим поиска

атрибутов. Режим поиска атрибутов - это стиль атрибутов, который будет

разыскиваться, с помощью четырех горячих клавиш, описанных ниже. При

повторном нажатии F4 атрибуты будут прокручиваться в следующем порядке:

полужирный, курсив, подчеркнутый, выделенный цветом и зачеркнутый.

GRAVE ACCENT - эта клавиша перемещает Jaws курсор к следующему

запрошенному атрибуту. Режим поиска атрибутов задается клавишей F4, как

было описано выше.

SHIFT + GRAVE ACCENT - эта клавиша перемещает Jaws курсор к

предыдущему запрошенному атрибуту. Режим поиска атрибутов задается

клавишей F4, как было описано выше.

CONTROL + GRAVE ACCENT - эта клавиша перемещает Jaws курсор к

первому запрошенному атрибуту. Режим поиска атрибутов задается клавишей

F4, как было описано выше.

SHIFT + CONTROL + GRAVE ACCENT - эта клавиша перемещает Jaws

курсор к последнему запрошенному атрибуту. Режим поиска атрибутов

задается клавишей F4, как было описано выше.

p - эта клавиша читает предыдущее окно. Это полезно, если необходимо

определить, можно ли прочитать приглашение, прочитав предыдущее окно.

Например, приглашением для поля редактирования в базе данных может быть

предыдущее окно, и использование этой клавиши, когда вы находитесь в поле

редактирования, озвучит приглашение, и вам, возможно, удастся написать

скрипт, который с успехом будет читать приглашение, используя информацию

предыдущего окна.

Использование этих утилит поможет вам собрать всю информацию, которая

может вам понадобиться, относительно органов управления, отношениях

родители/дети, и атрибуты текста, чтобы использовать эту информацию в

своих собственных скриптах.

Домашнее задание # 7

Откройте приложение WordPad. Затем включите режим Home Row. Используя

F1 и F3 получите всю необходимую информацию о параметрах главного окна

редактирования и поля редактирования имени файла в диалоге открытия файла.

Получение информации об окне

с помощью скрипта ScreenSensitiveHelpTechnical

Если вам нужно быстро прочитать контрольный идентификатор окна, класс

или ручку, эту информацию можно легко получить с помощью скрипта под

названием ScreenSensitiveHelpTechnical в файле скриптов по умолчанию.

Доступ к этому скрипту можно получить с помощью комбинации клавиш

Ctrl+Insert|F1, и будет озвучен контрольный идентификатор, класс и ручка

окна, содержащего активный курсор. Это самый быстрый способ получить эту

информацию, если вам не нужны все другие данные, предоставляемые

скриптами утилит.

Типы файлов скриптов

Как уже было сказано выше, существует несколько типов файлов,

ассоциированных с написанием скриптов. Тип файла можно узнать по его

расширению.

JSS - исходные файлы скриптов

JSH - файлы заголовков (включены в .JSS файлы)

JSM - файлы сообщений (включены в .JSS файлы)

JSB - скомпилированные файлы скриптов

JKM - файлы раскладки клавиатуры, которые содержат комбинации клавиш,

закрепленные за различными скриптами.

JSD - файлы документации скриптов, которые содержат имена скриптов и

ассоциированные с ними синопсисы и описания.

Исходные файлы

исходный код для файлов скриптов имеет очень свободную форму. Вы можете

вставлять пробелы или пустые строки везде, где только захотите. Заглавные

буквы не требуются, и игнорируются компилятором, за исключением

определенных функций сравнения строк, таких как StringContains (). Надо

сказать, что имеются некоторые соображения по поводу форматирования. Хотя

ваш код может быть лично вам абсолютно понятен, другие могут вообще

ничего в нем не понять, поскольку они не зналиЯ, что вы имели в виду и их

работа, возможно, организована не так, как у вас. Поэтому мы хотели бы

порекомендовать несколько правил правой руки, которые облегчат другим

понимание вашего кода и помогут вам понять скрипты, написанные другими.

1. Отдельные скрипты всегда должны разделяться пустыми строками.

2. Набирайте с отступом любой раздел кода, который является

служебным по отношению к тому, который над ним и к тому, который

под ним. Это помогает пользователю разобраться в логике скрипта.

Рассмотрим следующий скрипт:

Script CheckVerbosity()

If GetVerbosity() == BEGINNER Then

SayString("Beginning verbosity is active.")

Else

SayString("Beginning verbosity is not active.")

EndIf

EndScript

Обратите внимание, что If, Else и Endif находятся на одном

уровне отступа, а утверждения внутри каждого раздела отодвинуты

дальше. Каков должен быть отступ, это дело ваше, но мы

рекомендуем примерно 5 символов. Использование табуляции для

создания отступа работает лучше, чем пробелы, поскольку отступ

будет постоянным, даже если вы работаете с пропорциональными

шрифтами.

3. Каждая функция должна быть на отдельной строке.

4. Вот несколько рекомендаций по поводу заглавных букв:

А. Начинайте каждое утверждение с большой буквы;

Б. Многие стандартные имена функций Jaws являются комбинациями

двух или более слов, которые описывают функцию. Первая буква в

каждом слове в имени функции начинается с заглавной буквы. В

предыдущем примере мы использовали функции GetVerbosity и

SayString. Это помогает правильно их озвучивать. Когда вы

создаете переменные и функции, вы должны использовать

аналогичное соглашение.

5. Структура файла скриптов также является важной. А. Начинайте

каждый файл с комментария, в котором описано, что содержит

данный файл и как им полагается пользоваться. Перечислите всю

конкретную информацию, которая может понадобиться тому, кто

будет читать этот файл. Вы также могли бы включить список всех

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

природу любых изменений и улучшений, которые были внесены со

времени первого написания файла. Теперь любой может прочитать

первые несколько строк вашего файла и все о нем узнать

Б. Следующим разделом должны быть утверждения включения (Include

statements).

В. В следующем разделе поместите все объявления глобальных

переменных.

Г. В следующем разделе поместите объявления констант.

Д. Следующим элементом вашего файла скриптов должна быть функция

AutoStartEvent, если вы намерены ее использовать. Любой код,

ассоциированный с этой функцией, автоматически начинает

работать, когда загружается файл скриптов. Обычно эта функция

используется для озвучивания каких-либо ознакомительных

сообщений, или для инициализации каких-нибудь глобальных

переменных, если они имеют ненулевое значение. Например, в файле

скриптов по умолчанию стартовые сообщения Jaws о том, как

получить помощь, находятся в этой функции.

Е. Следующим скриптом должен быть скрипт, который называется

ScriptFileName, скрипт, прикрепленный к клавише Insert+Q. Этот

скрипт будет сообщать имя текущего активного файла скриптов и

приложения. Пример того, как нужно формулировать этот скрипт, вы

можете найти в файле default.jss. Вы должны заменить данные,

которые передаются в функцию ScriptAndAppNames именем вашего

приложения.

Ж. Далее следуют скрипты и определяемые пользователем функции.

Постарайтесь соблюдать логический порядок, так чтобы всякий,

читающий ваш файл скриптов смог его понять. Например, если у вас

есть скрипт, который выполняет какое-либо действие, и другой,

выполняющий противоположное действие, поместите их один за

другим. Помещайте каждую функцию над первым скриптом или

функцией, которая ее вызывает. Несоблюдение этого может привести

к ошибке.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]