Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Встроить приложение в панель Ie

7.5K
06 февраля 2005 года
khasya
17 / / 06.02.2005
Некоторые приложения, например ICQ, при интсалляции могут встраиваться в панель IE. Как добиться того же эффекта своими руками? Задача стоит так: добавить элемент управления(например image)отвечающий за отображение/не отображение картинок. Может ли тут оказаться полезен VCL или другие стандартные библиотеки BCB?
246
07 февраля 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by khasya
Некоторые приложения, например ICQ, при интсалляции могут встраиваться в панель IE. Как добиться того же эффекта своими руками? Задача стоит так: добавить элемент управления(например image)отвечающий за отображение/не отображение картинок. Может ли тут оказаться полезен VCL или другие стандартные библиотеки BCB?


Можно. И руками и VCL пригодится. Надо писать плагин.

7.5K
07 февраля 2005 года
khasya
17 / / 06.02.2005
Цитата:
Originally posted by GIZMO

Можно. И руками и VCL пригодится. Надо писать плагин.


А можно посмотреть на пример реализации чего-нибудь похожего? Потому что пока невижу в какую сторону копать.

246
08 февраля 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by khasya

А можно посмотреть на пример реализации чего-нибудь похожего? Потому что пока невижу в какую сторону копать.


Посмотреть нельзя т.к. ни разу "ничего похожего" не делал, но как сделать примерно знаю и куда копать надо тоже знаю...
Для начала копай здесь:
http://www.rsdn.ru/article/inet/ieplug.xml
http://www.rsdn.ru/article/inet/ieplug2.xml
этого вполне достаточно. Читай будут вопросы дай знать.

7.5K
09 февраля 2005 года
khasya
17 / / 06.02.2005
Все здорово, статьи именно про то, что надо.
Правда возникли трудностис регистрацией COM-сервера. Может кто-нибудь поделится как это делать поэтапно(какие конкретно значения вводить)? Особенно про GUID и разные ID

246
11 февраля 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by khasya
Все здорово, статьи именно про то, что надо.
Правда возникли трудностис регистрацией COM-сервера. Может кто-нибудь поделится как это делать поэтапно(какие конкретно значения вводить)? Особенно про GUID и разные ID


А Ты пример со статьей скачал? Там все есть.
Не буду парить по теории (к тому же сам не очень там рулю). Скажу как делать проще:
File|New|ActiveX|ActiveXLibrary Ok.
File|New|ActiveX|ComObject ввести имя CoClassName=MyIEExtention, Потоковая модель=Apartment, Описание="Какое хошь..." Ok.
File|Save All ... Ok.
Run|Register ActiveX Server Ok.
Все, можешь не париться COM сервер зарегестрирован. Никаких фабрик класса писать не надо все сделает ATL (практически единственная полезная поделка от MS...).

Далее в MyIEExtentionImpl.h находишь опр. класса и добавляешь соотв. интерфейсы :
class ATL_NO_VTABLE TMyIEExtentionImpl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<TMyIEExtentionImpl, &CLSID_MyIEExtention>,
public IObjectWithSite, //руками добавляешь к
public IOleCommandTarget,//сгенерированному классу
public IMyIEExtention
...
public:
STDMETHOD(QueryStatus)(const GUID *pCmdGroup, ULONG cCmds, OLECMD *prgCmds,
OLECMDTEXT *pCmdText);
STDMETHOD(Exec)(const GUID *pCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
VARIANTARG *pvaIn, VARIANTARG *pvaOut);
protected:

//IObjectWithSite
public:
STDMETHOD(SetSite)(IUnknown *pUnkSite);
STDMETHOD(GetSite)(REFIID riid, void **ppvSite);
ну и реализацию в MyIEExtentionImpl.cpp не забудь.

Идем дальше...
В файле проекта(где DllEntryPoint) найди DllRegisterServer и DllUnregisterServer и вставь, что-то типа:

Код:
STDAPI __export DllRegisterServer(void)
{
    _Module.RegisterServer(TRUE);

    // add some required registration keys
     TRegistry* Key = new TRegistry;
      if(Key)
       {
        String guid = "{EE1AFBB6-621B-4D83-A493-6B06B8532148}";//для создания <ваш GUID> - нажми ctrl+shift+G
        Key->RootKey = HKEY_LOCAL_MACHINE;
        if(Key->OpenKey("SOFTWARE\\Microsoft\\Internet Explorer\\Extensions\\" + guid,true))
          {
           Key->WriteString("ButtonText","Button Hint");
           Key->WriteString("clsid","{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}");
           Key->WriteString("Default Visible", "yes");
           guid = GUIDToString(CLSID_MyIEExtention);
           Key->WriteString("ClsidExtension", guid);
           Key->WriteString("HotIcon", "d:\\Projects\\IE\\Plugins\\LinkSave\\icon1.ico");
           Key->WriteString("Icon", "d:\\Projects\\IE\\Plugins\\LinkSave\\tbbutton.ico");
           Key->WriteString("MenuText", "&#209;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#229; &#241;&#241;&#251;&#235;&#238;&#234;");
           Key->WriteString("MenuStatusBar", "&#209;&#238;&#245;&#240;&#224;&#237;&#229;&#237;&#232;&#229; &#241;&#241;&#251;&#235;&#238;&#234;");
           Key->CloseKey();
          }


        delete Key;
       } // if(Key)

    return S_OK;
}

// Entry point of your Server invoked to instruct the server to remove
// all registry entries created through DllRegisterServer.
//
STDAPI __export DllUnregisterServer(void)
{
  TRegistry* Key = new TRegistry;
  if(Key)
   {
      Key->RootKey = HKEY_LOCAL_MACHINE;
      String guid = "{EE1AFBB6-621B-4D83-A493-6B06B8532148}";
      if(Key->OpenKey("SOFTWARE\\Microsoft\\Internet Explorer\\Extensions\\", false))
          {
           if(Key->KeyExists(guid))
            Key->DeleteKey(guid);

           Key->CloseKey();
          }


    delete Key;
   } // if(Key)
    return _Module.UnregisterServer();
}

Тогда при регистрации СОМ сервера будут добавляться ключи указанные в статье. Единственно Сам не совсем понял про <ваш GUID>:
[COLOR=green]
Для этого необходимо создать следующий ключ в реестре:
<key root>\Software\Microsoft\Internet Explorer\Extensions \<ваш GUID>[/COLOR]

похоже, что это просто имя раздела, зачем тогда GUID?
246
11 февраля 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by GIZMO

Далее в MyIEExtentionImpl.h находишь опр. класса и добавляешь соотв. интерфейсы :
class ATL_NO_VTABLE TMyIEExtentionImpl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<TMyIEExtentionImpl, &CLSID_MyIEExtention>,
public IObjectWithSite, //руками добавляешь к
public IOleCommandTarget,//сгенерированному классу
public IMyIEExtention
...
public:
...
};
ну и реализацию в MyIEExtentionImpl.cpp не забудь.


Да еще забыл:
BEGIN_COM_MAP(TMyIEExtentionImpl)
COM_INTERFACE_ENTRY(IMyIEExtention)
COM_INTERFACE_ENTRY(IOleCommandTarget)//<<<<<<<<
COM_INTERFACE_ENTRY(IObjectWithSite) //<<<<<<<<
END_COM_MAP()

246
14 февраля 2005 года
GIZMO
1.8K / / 30.07.2004
Khasya куда пропал? Есть результат?
7.5K
15 февраля 2005 года
khasya
17 / / 06.02.2005
Цитата:
Originally posted by GIZMO
Khasya куда пропал? Есть результат?


Я не пропал, тут я:) Достигнутые результаты:
пример из статьи почти заработал, осталось разобраться с .ini файлом(написать и прописать).
Уже сейчас на панели IE красуется моя иконка(sic!), а меню Сервис обрело новое лицо, дополненное пунктом Links :). Доведу работу примера до состояния "рабочий" и примусь за реализация Моей задачи. Т.е. добавить иконку управления отображать/не отображать картинки.

GIZMO - я иногда буду исчезать и появляться вновь в теме, уже началась учеба как-никак :)
А ваще - нереальный thanks за все.
Копаем дальше :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог