Подключаемые протоколы для IE
От: mihailik Украина  
Дата: 15.09.03 14:57
Оценка: 94 (10)
Добрый день!

На выходных реализовал субж. Сущность подключаемых протоколов заключается в том, что можно добавлять в Internet Explorer новые протоколы в придачу к http:, ftp:, res: и пр.

В частности, для примера я сделал "протокол" netres:, аналог res: для managed ресурсов. К примеру, можно по адресу netres:System.Drawing/System.Drawing.DefaultComponent.bmp увидеть замечательную маленькую шестерёнку.

Пока, правда, не реализован интерфейс IInternetProtocolInfo, да и глючки встречаются.

Если кто хочет подключиться к затее — давайте. Тут бы и статью написать, да соавтора нет. В одиночку как-то туго статью продвинуть.

Вообще, я думаю, после обкатки эта технология должна прижиться в Янусе. Там как раз простого метода загрузки HTML'я в браузер не хватает. Для раскрутки можно сначала сделать отдельный модуль, чтоб просматривать сообщения из базы Януса без запущенного самого Януса. Прикольнее всего было бы, чтобы "янус-протокол" ожидал строку в том же виде, как и в Интернете:

Интернет-адрес:
http://www.rsdn.ru/forum/Message.aspx?mid=382249&only=1
Автор: Al-Ko
Дата: 12.09.03


Янус-адрес:
rsdn://www.rsdn.ru/forum/Message.aspx?mid=382249&only=1
Автор: Al-Ko
Дата: 12.09.03


Ми.
... << RSDN@Home 1.1 beta 1 >>
Re: Подключаемые протоколы для IE
От: Lloyd Россия  
Дата: 15.09.03 15:40
Оценка:
Здравствуйте, mihailik, Вы писали:

Где можно посмотреть?
Re[2]: Подключаемые протоколы для IE
От: mihailik Украина  
Дата: 15.09.03 16:03
Оценка:
L>Где можно посмотреть?

Хороший вопрос. Текущие исходники присобачиваю.

Во-первых, у меня дома поломался Windows, поэтому всё компилируется из командной строки, без Visual Studio. Компилируется при помощи compile.bat.

В корневом каталоге лежат исходники библиотечки с PluginProtocolBase. В этой же библиотеке есть NamespaceHandler (реализует IInternetProtocolInfo), но ещё слишком сырой.

В подкаталоге urlmon лежит интероп-библиотечка Urlmon.Interop.dll с объявленными интерфейсами типа IInternetProtocol и неоходимыми структурами. Многие из типов откомментированы в соответвтвующем Urlmon.Interop.xml. Это удобно для использования в Visual Studio. Документаторский xml-файл создан при помощи самописного скрпита путём импорта из MSDN. Так что комментарии аутентичные.

В подкаталоге resource-browse лежит реализация протокола netres. Для установки нужно зарегистрировать resxh.exe при помощи regasm. При запуске resxh.exe должен бы регистрироваться в реестре как Pluggable Protocol, но почему-то этого не делает. Поэтому нужно его ручками прописывать в ключе HKCR\PROTOCOLS\Handlers, как это описывается в MSDN.

Кроме того, в том же подкаталоге нужно удалить resxh.dll. Он там случайно остался, я перезакачивать весь архив мне не хочется. Удалите, потому что могут быть глюки с assembly bind.

И ещё. Пример протокола netres: глючит на больших ресурсах. Скорее всего, ошибка где-то в реализации метода IInternetProtocol.Read. Но на маленьких всё работает. Кроме показа ресурсов, можно заходит на url типа netres:System.Drawing и видеть отформатированный в HTML список ресурсов этой сборки.
Re[3]: Подключаемые протоколы для IE
От: Lloyd Россия  
Дата: 15.09.03 16:14
Оценка:
Здравствуйте, mihailik, Вы писали:

IInternetSession.RegisterNameSpace не пробовал использовать? А то у меня какие-то непонятки с ним.
Re[4]: Подключаемые протоколы для IE
От: mihailik Украина  
Дата: 15.09.03 16:28
Оценка:
L>IInternetSession.RegisterNameSpace не пробовал использовать? А то у меня какие-то непонятки с ним.

Пробовал, что заметно в классе NamespaceHandler (как раз закомментировал этот кусок). Не работает, видимо по причине IClassFactory. Не хочет дотнет такой интерфейс допускать.

Я даже пытался вызвать из mscoree GetDllClassObject, но всё без толку. Пока отложил эту проблему как менее важную.
... << RSDN@Home 1.1 beta 1 >>
Re[5]: Подключаемые протоколы для IE
От: Lloyd Россия  
Дата: 15.09.03 16:53
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Пробовал, что заметно в классе NamespaceHandler (как раз закомментировал этот кусок). Не работает, видимо по причине IClassFactory. Не хочет дотнет такой интерфейс допускать.


M>Я даже пытался вызвать из mscoree GetDllClassObject, но всё без толку. Пока отложил эту проблему как менее важную.


Кому как. По мне так логичнее и правильнее в своих приложениях использовать NameSpace-ы, а не гадить в реестр почем зря.
Re: Подключаемые протоколы для IE
От: SLogic  
Дата: 16.09.03 08:37
Оценка: +1
Здравствуйте, mihailik, Вы писали:

M>Добрый день!


M>На выходных реализовал субж. Сущность подключаемых протоколов заключается в том, что можно добавлять в Internet Explorer новые протоколы в придачу к http:, ftp:, res: и пр.


Делал я такое, могу исходники поискать, если надо, т.с. для компании. А так вообще, отказался от этой затеи, в пользу ASP.NET. Ведь на локальной машине можно и под Cassini это дело запустить, имхо более стройно получается, фича с просмотром в самой VS.NET вместо стандартной страницы решается.

Да, вопрос с удаленно установленным RSDN@Home тоже.
Re[6]: Подключаемые протоколы для IE
От: mihailik Украина  
Дата: 16.09.03 13:52
Оценка:
M>>Я даже пытался вызвать из mscoree GetDllClassObject, но всё без толку. Пока отложил эту проблему как менее важную.

L>Кому как. По мне так логичнее и правильнее в своих приложениях использовать NameSpace-ы, а не гадить в реестр почем зря.


Гадить в реестр — нормальное действие при инсталяции. Ага? Особенно, если речь идёт о COM Interop.

Если нежелательно допускать запуск своего хандлера из внешних эксплореров, тогда стоит сделать временный namespace. А для таких вещей, как MSDN Help или Янус, логичнее глобальный постоянный.

Короче, вот вчера вечером разобрался. IClassFactory добывается через mscoree DllGetClassObject. Отсюда следует, что namespace handler должен быть зарегистрирован как COM-объект.

public static void RegisterTemporaryHandler( Type HandlerType, string Namespace )
{
    // Это дополнительные проверки,
    // реализованы ли нужные интерфейсы.
    checkHandlerType(HandlerType);

    Guid handlerGuid=HandlerType.GUID;
    Guid iid_IClassFactory=NativeMethods.IID_IClassFactory;

    // IClassFactory для нашего типа HandlerType
    // получаем через вызов mscoree DllGetClassObject
    // — так, как это делается в COM Interop.
    object handlerCF;
    int hResult=NativeMethods.DllGetClassObject(
            ref handlerGuid,
            ref iid_IClassFactory,
            out handlerCF );

    Marshal.ThrowExceptionForHR( hResult );
    if( hResult!=0 )
        throw new Exception("Unknown error in mscoree.DllGetClassObject().");

    string emptyStr=null;
    IInternetSession session;
    NativeMethods.CoInternetGetSession(
        IntPtr.Zero,
        out session,
        IntPtr.Zero );

    session.RegisterNameSpace(
        handlerCF,
        ref handlerGuid,
        Namespace,
        0,
        ref emptyStr,
        0 );
}


internal sealed class NativeMethods
{
    internal static readonly Guid IID_IClassFactory = new Guid("00000001-0000-0000-C000-000000000046");

    [DllImport("urlmon.dll")] 
    internal static extern void CoInternetGetSession(
        IntPtr dwSessionMode,
        out IInternetSession ppIInternetSession,
        IntPtr dwReserved );

    [DllImport("mscoree.dll")]
    internal static extern int DllGetClassObject(
        ref Guid rclsid,
        ref Guid riid,
        [MarshalAs(UnmanagedType.IUnknown)]
        out object ppv );
}
... << RSDN@Home 1.1 beta 1 >>
Re[2]: Подключаемые протоколы для IE
От: mihailik Украина  
Дата: 16.09.03 14:02
Оценка:
M>>На выходных реализовал субж. Сущность подключаемых протоколов заключается в том, что можно добавлять в Internet Explorer новые протоколы в придачу к http:, ftp:, res: и пр.

SL>Делал я такое, могу исходники поискать, если надо, т.с. для компании.


Что такое "т.с. для компании"?

По поводу исходников, то я бы не отказался посмотреть. Хорошо бы на C#, а не на C++. Свой бы код подправил, потому что глючит.

SL>А так вообще, отказался от этой затеи, в пользу ASP.NET. Ведь на локальной машине можно и под Cassini это дело запустить, имхо более стройно получается, фича с просмотром в самой VS.NET вместо стандартной страницы решается.


Ну, это, конечно, по задаче. Возьми хотя бы тот же chm.

Другое потенциальное применение этих протоколов — создание HTML-интерфейса. Если HTML можно будет грузить из managed ресурсов, то можно сделать редактируемый в Design-Time HTML-интерфейс.
... << RSDN@Home 1.1 beta 1 >>
Re[3]: Подключаемые протоколы для IE
От: SLogic  
Дата: 16.09.03 20:42
Оценка:
Здравствуйте, mihailik, Вы писали:

M>>>На выходных реализовал субж. Сущность подключаемых протоколов заключается в том, что можно добавлять в Internet Explorer новые протоколы в придачу к http:, ftp:, res: и пр.


SL>>Делал я такое, могу исходники поискать, если надо, т.с. для компании.


M>Что такое "т.с. для компании"?


так сказать для компании

M>По поводу исходников, то я бы не отказался посмотреть. Хорошо бы на C#, а не на C++. Свой бы код подправил, потому что глючит.


Ну ладно, надо на c#, будет на c#, лови мейлером.

SL>>А так вообще, отказался от этой затеи, в пользу ASP.NET. Ведь на локальной машине можно и под Cassini это дело запустить, имхо более стройно получается, фича с просмотром в самой VS.NET вместо стандартной страницы решается.


M>Ну, это, конечно, по задаче. Возьми хотя бы тот же chm.


+1

M>Другое потенциальное применение этих протоколов — создание HTML-интерфейса. Если HTML можно будет грузить из managed ресурсов, то можно сделать редактируемый в Design-Time HTML-интерфейс.


Я там в письме написал, что сам задумывал, может чем пригодится.
Re[4]: Подключаемые протоколы для IE
От: SLogic  
Дата: 16.09.03 23:21
Оценка:
Мне "Mail delivery failed: returning message to sender" приплыло, куда слать-то? Мыло из профайла брал.
Re: Подключаемые протоколы для IE
От: TK Лес кывт.рф
Дата: 17.09.03 05:09
Оценка:
Hello, "mihailik"

> На выходных реализовал субж. Сущность подключаемых протоколов заключается в том, что можно добавлять в Internet Explorer новые протоколы в придачу к http:, ftp:, res: и пр.

>
> В частности, для примера я сделал "протокол" netres:, аналог res: для managed ресурсов. К примеру, можно по адресу netres:System.Drawing/System.Drawing.DefaultComponent.bmp увидеть замечательную маленькую шестерёнку.
>
> Пока, правда, не реализован интерфейс IInternetProtocolInfo, да и глючки встречаются.
>
> Если кто хочет подключиться к затее — давайте. Тут бы и статью написать, да соавтора нет. В одиночку как-то туго статью продвинуть.
>

Наверное стоит написать подобное предложение в форуме по COM — там любят старые технологии
Posted via RSDN NNTP Server 1.6
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Подключаемые протоколы для IE
От: mihailik Украина  
Дата: 17.09.03 06:44
Оценка:
TK>Наверное стоит написать подобное предложение в форуме по COM — там любят старые технологии

А теперь для этих целей существует новенькое?
... << RSDN@Home 1.1 beta 1 >>
Re[5]: Подключаемые протоколы для IE
От: mihailik Украина  
Дата: 17.09.03 06:44
Оценка:
SL>Мне "Mail delivery failed: returning message to sender" приплыло, куда слать-то? Мыло из профайла брал.

mihailik(at)vsesvit.kiev.ua
... << RSDN@Home 1.1 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.