Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Maxthon и CoCreateInstance, При CoCreateInstance открывается Maxthon 
:(
    Опции темы
lemax
Дата 3.12.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

if (SUCCEEDED(CoInitialize(NULL)))
{
  CComPtr<IWebBrowser2>pBrowser2;
  CoCreateInstance(CLSID_InternetExplorer, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);
  if (pBrowser2!=NULL)
  {
    ...
    pBrowser2->put_Visible(VARIANT_TRUE);
    ...
  }
  CoUninitialize();
}

Код работает корректно при не установленном броузере Maxthon.
Функция 
Код

CoCreateInstance(CLSID_InternetExplorer, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);

создает InternetExplorer и после 
Код

pBrowser2->put_Visible(VARIANT_TRUE);

браузер отображается на экране.
НО если в системе установлен Maxthon, то уже после вызова
Код

CoCreateInstance(CLSID_InternetExplorer, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);

браузер Maxthon отображается на экране.
Вопрос:
Почему открывается Maxthon сразу после вызова CoCreateInstance?
PM MAIL   Вверх
xvr
Дата 4.12.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Это внутренние дела Maxthon, когда и где ему отображаться. Физически он создается сразу после вызова CoCreateInstance (равно как и IE), дальше их поведение разное - IE считает, что по умолчанию себя показывать не надо, Maxthon считает наоборот.

PM MAIL   Вверх
lemax
Дата 4.12.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Это внутренние дела Maxthon, когда и где ему отображаться. Физически он создается сразу после вызова CoCreateInstance (равно как и IE), дальше их поведение разное - IE считает, что по умолчанию себя показывать не надо, Maxthon считает наоборот.


А как возможно создать настоящий IE , если в системе установлен Maxthon, и в реестре 
HKEY_CURRENT_USER\Software\Classes\CLSID\{0002DF01-0000-0000-C000-000000000046}\LocalServer32 значение "C:\Program Files\Maxthon2\Maxthon.exe"

0002DF01-0000-0000-C000-000000000046 - это значение соответствует CLSID_InternetExplorer.
PM MAIL   Вверх
lemax
Дата 4.12.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я хотел решить эту проблему "мягко":
Это создать новый ключ реестра
HKEY_CURRENT_USER\Software\Classes\CLSID\{Новый GUID}\LocalServer32
со значением
"path_to/IEXPLORER.exe"

Но тогда код не работает.
Код

CLSID CLSID_MyIE;//для {Новый GUID} = {00000000-0000-0000-0000-000000009999}. Пока взял на угад
void func()
{
    if (SUCCEEDED(CoInitialize(NULL)))
    {
            CComPtr<IWebBrowser2>pBrowser2;

            CLSID_MyIE.Data1=0x0;// Заполняю {Новый GUID}
            CLSID_MyIE.Data2=0x0;
            CLSID_MyIE.Data3=0x0;
            CLSID_MyIE.Data4[0]=0x0;
            CLSID_MyIE.Data4[1]=0x0;
            CLSID_MyIE.Data4[2]=0x0;
            CLSID_MyIE.Data4[3]=0x0;
            CLSID_MyIE.Data4[4]=0x0;
            CLSID_MyIE.Data4[5]=0x0;
            CLSID_MyIE.Data4[6]=0x99;
            CLSID_MyIE.Data4[7]=0x99;

            HRESULT aaa=CoCreateInstance(/*CLSID_InternetExplorer*/CLSID_MyIE, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);// Здесь aaa=0x80080005 Server execution failed. А значение pBrowser2==NULL
            int i= GetLastError();// здесь i=1008 "An attempt was made to reference a token that does not exist."
            if (pBrowser2!=NULL)
            {...}
              CoUninitialize();
             }
}


Чего здесь может не хватать (кроме моего незнания и не понимания)
PM MAIL   Вверх
xvr
Дата 5.12.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(lemax @ 4.12.2008,  20:37)
Я хотел решить эту проблему "мягко":
Это создать новый ключ реестра
HKEY_CURRENT_USER\Software\Classes\CLSID\{Новый GUID}\LocalServer32
со значением
"path_to/IEXPLORER.exe"

Но тогда код не работает.
Код

CLSID CLSID_MyIE;//для {Новый GUID} = {00000000-0000-0000-0000-000000009999}. Пока взял на угад
void func()
{
    if (SUCCEEDED(CoInitialize(NULL)))
    {
            CComPtr<IWebBrowser2>pBrowser2;

            CLSID_MyIE.Data1=0x0;// Заполняю {Новый GUID}
            CLSID_MyIE.Data2=0x0;
            CLSID_MyIE.Data3=0x0;
            CLSID_MyIE.Data4[0]=0x0;
            CLSID_MyIE.Data4[1]=0x0;
            CLSID_MyIE.Data4[2]=0x0;
            CLSID_MyIE.Data4[3]=0x0;
            CLSID_MyIE.Data4[4]=0x0;
            CLSID_MyIE.Data4[5]=0x0;
            CLSID_MyIE.Data4[6]=0x99;
            CLSID_MyIE.Data4[7]=0x99;

            HRESULT aaa=CoCreateInstance(/*CLSID_InternetExplorer*/CLSID_MyIE, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);// Здесь aaa=0x80080005 Server execution failed. А значение pBrowser2==NULL
            int i= GetLastError();// здесь i=1008 "An attempt was made to reference a token that does not exist."
            if (pBrowser2!=NULL)
            {...}
              CoUninitialize();
             }
}


Чего здесь может не хватать (кроме моего незнания и не понимания)

GUID явно не валидный. Сгенери нормальный с помощью guidgen

PM MAIL   Вверх
lemax
Дата 7.12.2008, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(xvr @  5.12.2008,  14:21 Найти цитируемый пост)

GUID явно не валидный. Сгенери нормальный с помощью guidgen


Ничего подобного. Результат один.
Что в моем, что в вашем случае после вызова 
Код

CoCreateInstance(/*CLSID_InternetExplorer*/CLSID_MyIE, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);


Запускается iexplorer.exe и "зависает" все на минуту, после iexplorer вылетает с ошибкой и вызов CoCreateInstance на этом завершается с ошибкой "Server execution failed".
PM MAIL   Вверх
xvr
Дата 7.12.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(lemax @ 7.12.2008,  02:43)
Цитата(xvr @  5.12.2008,  14:21 Найти цитируемый пост)

GUID явно не валидный. Сгенери нормальный с помощью guidgen


Ничего подобного. Результат один.
Что в моем, что в вашем случае после вызова 
Код

CoCreateInstance(/*CLSID_InternetExplorer*/CLSID_MyIE, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);


Запускается iexplorer.exe и "зависает" все на минуту, после iexplorer вылетает с ошибкой и вызов CoCreateInstance на этом завершается с ошибкой "Server execution failed".

Увы, значит вместе они не живут  smile По крайней мере в виде COM серверов
PM MAIL   Вверх
lemax
Дата 7.12.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Увы, значит вместе они не живут  smile По крайней мере в виде COM серверов


Я решил проверить, и указать с новым GUID на  Maxthon (вместо IE).
Так вот Maxthon повел себя так же как и IE:
1) Запустился и стал работать (только, на этот раз, видимый). При этом вызов функции 
Код

CoCreateInstance(/*CLSID_InternetExplorer*/CLSID_MyIE, NULL,CLSCTX_LOCAL_SERVER,IID_IWebBrowser2, (void**)&pBrowser2);
 не завершился.
2) По истечении времени (где то минута) Maxthon закрылся и функция CoCreateInstance завершилась с ошибкой "Server execution failed" и GetLastError()==1008 "An attempt was made to reference a token that does not exist."

Это сообщение отредактировал(а) lemax - 7.12.2008, 12:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




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


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

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