JScript обрабатывает COM-события

Я пытаюсь понять, как добавить обработчик событий JScript в COM-интерфейс. В этом API

http://helpnet.installshield.com/installshield17helplib/IHelpAutoISWiRelease.htm

есть 3 события состояния сборки, которые я хочу наблюдать. Чтение документации Майкрософт

http://msdn.microsoft.com/en-us/library/vstudio/06t47502(v=vs.100).aspx

заставляет меня поверить, что мне нужно использовать подход ISWiRelease.add_XXXXX(event_function). Но в документации ISWiRelease не указаны методы «добавить обработчик событий».

Выяснить это, кажется, должно быть просто. Но я бьюсь головой о стену. Здесь приведен пример обнаружения событий с помощью Visual Basic.

http://helpnet.flexerasoftware.com/installshield21helplib/helplibrary/AutomationBuildStatEv.htm

но мне это мало помогает.

Я попытался перечислить функции/методы, используя эти подходы.

Как отобразить все методы объекта в Javascript?

Как составить список функции/методы объекта javascript? (Возможно ли это вообще?)

но когда я перебираю объект ISWiRelease, он действует так, как будто он пуст.

Как узнать имена функций событий addXXXX(..)?

Дополнительная информация:

  • Я новичок в JScript/WSF
  • JScript вызывается через файл .wsf и cscript.
  • Я попытался добавить базовую систему импорта; в файл .js, который выдал синтаксическую ошибку (не знаю, почему)
  • Я только слегка царапаю этот проект. Я не устанавливал его, предпочел использовать cscript или интерфейс автоматизации и был бы намного счастливее, если бы вместо этого вызывал инструмент командной строки, но я не в состоянии внести такое значительное изменение.
  • Это продолжение перенаправления журнала InstallShield на консоль

person Shane Gannon    schedule 18.07.2014    source источник


Ответы (1)


Ваш код JScript находится внутри файла WSF? Если это так, вы можете добавить <object> ссылка с events="true". Затем вы можете определить функции обработчика событий, используя синтаксис objectName::eventName. Например:

<job>
  <object id="oWord" progid="Word.Application" events="true"/>
  <script language="JScript">
    function oWord::NewDocument(oDoc) {
      WScript.Echo("New document: " + oDoc.Name);
    }

    oWord.Visible = true;
    oWord.Documents.Add(); // fires the event handler
    oWord.Documents.Add(); // fires the event handler again
    WScript.Sleep(2000);
    oWord.Quit();
  </script>
</job>

(Статья MSDN, на которую вы ссылаетесь, посвящена JScript.NET, которая отделена от Windows Script Host.)

person Helen    schedule 22.07.2014