Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание COM-объекта, Использование COM-объекта в VBScript 
:(
    Опции темы
Luceus
Дата 31.3.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.3.2006

Репутация: нет
Всего: 1



Всем добрый день!

Ниже представлена функция, которая возвращает доступ к IHTMLDocument2 по указанному хендлу. Необходимо разработать COM объект, что бы его можно было использовать в VBScript'е, и при вызове данного метода, в VBScript возвращался объект. Подскажите, пожалуйста, как это сделать, или где можно об этом почитать с примерами?

Код

private IHTMLDocument2 IEDOMFromhWnd(IntPtr hWnd)
    {
      Guid IID_IHTMLDocument2 = new Guid("626FC520-A41E-11CF-A731-00A0C9082637");

      Int32 lRes = 0;
      Int32 lMsg;
      Int32 hr;

      if (IsIETridentDlgFrame(hWnd))
      {
        if (!IsIEServerWindow(hWnd))
        {
          // Get 1st child IE server window
          hWnd = NativeMethods.GetChildWindowHwnd(hWnd, "Internet Explorer_Server");
        }

        if (IsIEServerWindow(hWnd))
        {
          // Register the message
          lMsg = NativeMethods.RegisterWindowMessage("WM_HTML_GETOBJECT");
          // Get the object
          NativeMethods.SendMessageTimeout(hWnd, lMsg, 0, 0, NativeMethods.SMTO_ABORTIFHUNG, 1000, ref lRes);
          if (lRes != 0)
          {
            // Get the object from lRes
            IHTMLDocument2 ieDOMFromhWnd = null;
            hr = NativeMethods.ObjectFromLresult(lRes, ref IID_IHTMLDocument2, 0, ref ieDOMFromhWnd);
            if (hr != 0)
            {
              throw new COMException("ObjectFromLresult has thrown an exception", hr);
            }
            return ieDOMFromhWnd;
          }
        }
      }
      return null;
    }


Заранее благодарен.
PM MAIL WWW   Вверх
mr.DUDA
Дата 31.3.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Тут уже речь не только о создании COM (это само по себе более-менее просто), а заморочки с Internet Explorer-ом.


--------------------
user posted image
PM MAIL WWW   Вверх
Luceus
Дата 31.3.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.3.2006

Репутация: нет
Всего: 1



mr.DUDA, у меня есть примеры по работе с Internet Explorer'ом как в VBScript, так и C#. Необходимо COM-объект, что бы потом его создать в VBScript'e и получить доступ к DOM модели документа, а дальше уже проще smile

Подскажите, пожалуйста, как это сделать?


Спасибо.
PM MAIL WWW   Вверх
mr.DUDA
Дата 31.3.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Читаем тему "Exposing .NET Framework Components to COM" в MSDN.


--------------------
user posted image
PM MAIL WWW   Вверх
Luceus
Дата 31.3.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.3.2006

Репутация: нет
Всего: 1



Спасибо, буду разбираться.
PM MAIL WWW   Вверх
Rififi
Дата 31.3.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



IE сам по себе является COM-обьектом. Никакие дополнительные заморочки с C# не нужны.
PM MAIL   Вверх
Luceus
Дата 31.3.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.3.2006

Репутация: нет
Всего: 1



Rififi, ты прав. Но у меня следующая задача. При нажатии на ссылку в браузере, запускается новое диалоговое окно (showModalDialog), которое содержит HTML. Обратится к нему можно или с самого скрипта по переменной (тестирование внешнее, поэтому это не подходит), или... или как я описал выше. Необходимо по хендлу окна получить доступ к содержимому модального окна.

Я занимаюсь разработкой библиотекой автоматизированного функ. тестирования, и вот столкнулся с этим.

Спасибо.
PM MAIL WWW   Вверх
Rififi
Дата 31.3.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 5
Всего: 36



Luceus,
я думаю, тебе помогут аттрибуты класса ComVisible(true) и InterfaceType(ComInterfaceType.InterfaceIsIDispatch)
PM MAIL   Вверх
Luceus
Дата 31.3.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 24.3.2006

Репутация: нет
Всего: 1



Rififi, пока я с C#"ом знаком на уровне синтаксиса. Библиотеки никогда на нем не делал. Почитаю ссылку. Как использовать ComVisible(true) и InterfaceType(ComInterfaceType.InterfaceIsIDispatch) и где я еще не знаю smile Если не будет получаться, я напишу.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.