|
Кроме известной библиотеки JfwAPI, позволяющей приложениям при помощи сообщений MS Windows напрямую взаимодействовать с программой экранного доступа JAWS , существует другой вариант такого взаимодействия. Этот вариант основан на реализованном в JAWS компоненте OLE-Automation, интерфейс которого, названный IJawsApi , содержит методы, аналогичные по своему назначению функциям из JfwAPI. Очевидным преимуществом взаимодействия через интерфейс IJawsApi является возможность использовать его не только в приложениях, но и сценариях на таких языках, как JScript, VBScript, AutoIt и так далее, то есть в тех языках, где реализована поддержка механизмов OLE-Automation. В остальном методы IJawsApi страдают теми же недостатками, что и функции JfwApi. В причины этого мы вдаваться не будем, а сразу перейдём к изучению методов IJawsApi. Методы IJawsApiИнтерфейс IJawsApi поддерживает шесть методов. За исключением метода
ИнициализацияПрежде чем использовать интерфейс IJawsApi нужно создать сам объект OLE-Automation. В различных скриптовых языках это действие может выполняться различными способами, но большинство из них имеют схожую семантику. Как правило, в качестве аргумента передается независимый от версии строковый идентификатор объекта (VersionIndependentProgID), который в нашем случае выглядит так: "FreedomSci.JawsApi". Конкретные примеры будут рассмотрены далее. ПримерыВ качестве примеров ниже приводятся фрагменты кода на JScript и AutoIt. Ради простоты изложения, в коде обработка ошибок сведена к минимуму. Пример на JScript// Файл: hello.js // Пример использования IJawsApi. // Инициализировать объект и получить интерфейс var jawsApi = new ActiveXObject("FreedomSci.JawsApi"); // произнести строку jawsApi.SayString("Hello, world!"); // выполнить скрипт, озвучивающий текущее время jawsApi.RunScript("SaySystemTime"); // вызвать последовательно несколько функций jawsApi.RunFunction("TypeKey(\"Ctrl+Esc\")"); jawsApi.RunFunction("Delay(10)"); jawsApi.RunFunction("TypeKey(\"Esc\")"); Пример на AutoIt; Файл hello.au3 ; Пример использования IJawsApi. $oJawsApi= ObjCreate("FreedomSci.JawsApi") if @error then Msgbox(0,"JawsApi Test","Failed to create OLE-Object. Error code: " & hex(@error,8)) exit endif ; произнести строку $oJawsApi.SayString("Hello, world!") ; выполнить скрипт, озвучивающий текущее время $oJawsApi.RunScript("SaySystemTime") ; вызвать последовательно несколько функций $oJawsApi.RunFunction('TypeKey("Ctrl+Esc")') $oJawsApi.RunFunction("Delay(10)") $oJawsApi.RunFunction('TypeKey("Esc")') exit Пример для C#Для C# ниже приведены фрагменты кода с инициализацией объекта JfW API, а также вызов одного из методов. Остальные методы API можно вызывать аналогичным образом // Рабочий фрагмент для .Net 3.5: Type jfwApi = Type.GetTypeFromProgID("FreedomSci.JawsApi"); object o = Activator.CreateInstance( jfwApi); jfwApi.InvokeMember("SayString", System.Reflection.BindingFlags.InvokeMethod, null, o, new Object[1] {"Hello"}); ... // В .net 4.0 должен работать пример для .Net 3.5, // но также вполне пригоден следующий вариант : Type jfwApi = Type.GetTypeFromProgID("FreedomSci.JawsApi"); dynamic o= Activator.CreateInstance( jfwApi); o.SayString("hello"); ... Использование IJawsApi в программах на C++Для использования интерфейса IJawsApi в программе на C++ необходимо создать заголовочный файл с объявлением соответствующего класса и файл с определением GUID для объекта и IID для интерфейса. Если используемый компилятор поддерживает директиву #import, то эту задачу можно возложить на нее, указав в качестве импортируемого файл Fsapi.dll. Полный путь к этому файлу можно узнать из системного реестра, отыскав ветку: HKEY_CLASSES_ROOT\CLSID\{CCE5B1E5-B2ED-45D5-B09F-8EC54B75ABF4}\ И Искомое значение будет находиться в подразделе InprocServer32. Если компилятор не поддерживает директиву #import, то необходимые файлы придется создавать вручную. Ниже приведены исходные тексты файлов jawsapi.h и guids.cpp, написанные, так сказать, в духе "чистого COM". // Файл: jawsapi.h // Объявление интерфейса IJawsApi. #ifndef __JAWSAPI_H__ #define __JAWSAPI_H__ #include // Файл: guids.cpp. #include Файл guids.cpp должен быть включён в проект (если используется интегрированная среда разработки) или указан в командной строке компилятора непосредственно. Файл jawsapi.h подключается при помощи директивы #include в тех файлах с исходным кодом, где предполагается использовать интерфейс IJawsApi. Также в этих файлах необходимо объявить две внешние переменные: extern const CLSID CLSID_JAWSCLASS ; extern const IID IID_IJAWSAPI ; Пример использования IJawsApi в программе на языке C++ приведён ниже. Это консольное приложение, единственным действием которого будет озвучивание текущего времени при помощи скрипта JAWS. // Файл: main.cpp #includeПриведённый пример можно скомпилировать компилятором из набора Borland Builder C++ 5.5 command line tools или C++-компилятором из пакета MinGW (в последнем случае в опциях командной строки компилятора необходимо добавить: -lole32 -loleaut32). |
|||||||||
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2021 |
Социальные сети