В этом разделе описано использование плагина PluginActiveX (только в Windows)

Описание ActiveX

ActiveX — фреймворк для определения программных компонентов, пригодных к использованию из программ, написанных на разных языках программирования. Программное обеспечение может собираться из одного или более таких компонентов, чтобы использовать их функциональность.

Впервые эта технология была внедрена в 1996 году компанией Microsoft как развитие технологий Component Object Model (COM) и Object Linking and Embedding (OLE) и теперь она широко используется в операционных системах семейства Microsoft Windows, хотя сама технология и не привязана к операционной системе.


Назначение

Плагин PluginActiveX предназначен для работы с объектами COM и OLE в контексте JavaScript


Использование

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

// Загрузить плагин и присвоить его объект переменной
var pluginActiveX = post.loadPlugin('PluginActiveX');

Свойства (property)

Отсутствуют



Сигналы

Отсутствуют


Методы

void pluginActiveX.install(scriptEngine) Процедура

установка в JS конструкторов объектов
ВНИМАНИЕ! начиная с версии svn.r959 функцию .install() вызывать нет необходимости, ее вызов происходит в функции post.loadPlugin()

// Загрузить плагин и Установить в JS конструторы объектов
post.loadPlugin('PluginActiveX').install(scriptEngine);

после выполнения этого метода, для создания экземпляров объектов используется оператор new

// Создать объект, к свойствам и
// методам которого можно обращаться в стиле Qt
var hmlHttp = new QAxObject('MsXml2.XmlHttp');

Чтобы не использовать функцию install несколько раз рекомендуется загрузку плагина обернуть в такую конструкцию

try{String(QAxObject)}catch(e){
    var pluginActiveX = post.loadPlugin('PluginActiveX');
    pluginActiveX.install(scriptEngine);
    delete pluginActiveX; // объект больше не нужен
}

String pluginActiveX.objects() Функция

Вывести список всех поддерживаемых объектов

var allSupportObjects = pluginActiveX.objects();
// переменной allSupportObjects присвоится строка 'QAxWidget, QAxObject'
// Плагин поддерживает создание объектов только этих типов

void startTopMost(int delay, qint64 interval, var position) Процедура

Начать поиск окон и установка их поверх всех
Работоспособно только в Юзерспэйсе (если jCjS запущен не в качестве службы)

var pluginActiveX = post.loadPlugin('PluginActiveX');
pluginActiveX.install(scriptEngine);

var kkm = new QAxWidget('AddIn.DrvFr');

// начать поиск окон через 10 ms и продолжать поиск в течении 100 sec
//pluginActiveX.startTopMost(10, 100000, new QPoint(-485, -300));   // сместить окно
//pluginActiveX.startTopMost(10, -1, new QRect(10, 10, 0, 0));      // расположить окно
//pluginActiveX.startTopMost(10, -1, new QRect(10, 10, 500, 500));  // расположить окно и установить размер

pluginActiveX.startTopMost(10, -1);                                 // не смещать окна и искать
                                                                    // пока не будет остановлен поиск

kkm.AboutBox(); // метод не асинхронный и выводит диалоговое окно
                // после того как окно будет закрыто, JS продолжит выполнение

post.pluginActiveX.stopTopMost(); // остановить поиск окон

void stopTopMost() Процедура

Остановить поиск окон



Создание объектов

Для использования COM и OLE объектов их необходимо создать
Чтобы корректно использовать объект, нужно прочесть документацию к объекту


var hmlHttp = new QAxObject('MsXml2.XmlHttp');

hmlHttp.exception.connect(this, function exception(err,drvName,s2,s3){
    post.log(drvName +': '+err +': '+ s2 +' '+ s3);
});

// Чтобы посмотреть все свойства и методы, можно вывести их в лог
console.trace(hmlHttp);

// Для указания типа объекта можно использовать "UUI" или его имя

var ax1 = new QAxWidget('{8E27C92B-1264-101C-8A2F-040224009C02}');
var ax2 = new QAxWidget('MSCal.Calendar');
var ax3 = new QAxWidget('Calendar Control 9.0');

// или указывая файл
post.ctrl = new QAxWidget('c:/files/file.doc');

if(!post.ctrl.isNull()) console.log(post.ctrl.lib(), post.ctrl.libPath(), post.ctrl.typeLib());
else                    console.log('post.ctrl.isNull() == ' + post.ctrl.isNull());

// ВНИМАНИЕ!!! рекомендованые действия по удалению объекта

post.ctrl.clear();          // очистить
post.ctrl.deleteLater();    // пометить к удалению
delete post.ctrl;           // удалить из контекста JS


void exception() Сигнал
Испускается объектом ActiveX при возникновении ошибок


var hmlHttp = new QAxObject('MsXml2.XmlHttp');

hmlHttp.exception.connect(this, function exception(err,drvName,s2,s3){
    post.log('w', drvName +': '+err +': '+ s2 +' '+ s3);
});


Общий функционал у объектов

  1. ax.lib() - используемая dll
  2. ax.libPath() - путь до используемой dll
  3. ax.typeLib() - UUID
  4. ax.isNull() - Проверка на валидность полученого объекта
  5. ax.clear() - Очистить объект (например перед удалением его из JS контекста)
  6. ax.exception - Сигнал ошибки