В этом разделе описано использование плагина PluginActiveX (только в Windows)
ActiveX — фреймворк для определения программных компонентов, пригодных к использованию из программ, написанных на разных языках программирования. Программное обеспечение может собираться из одного или более таких компонентов, чтобы использовать их функциональность.
Впервые эта технология была внедрена в 1996 году компанией Microsoft как развитие технологий Component Object Model (COM) и Object Linking and Embedding (OLE) и теперь она широко используется в операционных системах семейства Microsoft Windows, хотя сама технология и не привязана к операционной системе.
Плагин PluginActiveX предназначен для работы с объектами COM и OLE в контексте JavaScript
Перед использованием плагина, его необходимо подключить командой
// Загрузить плагин и присвоить его объект переменной
var pluginActiveX = post.loadPlugin('PluginActiveX');
Отсутствуют
Отсутствуют
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(); // остановить поиск окон
Остановить поиск окон
Для использования 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);
});