powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Получение содержимого адресной строки Explorer-а внутри ActiveX Plugin-а
3 сообщений из 3, страница 1 из 1
Получение содержимого адресной строки Explorer-а внутри ActiveX Plugin-а
    #35908849
Degun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Передо мной стоит задача создать и зарегистрировать свой .NET ActiveX UserControl так, чтобы в Internet Explorer-е при открытии ссылки на Tiff-файл, внутрь стала подгружаться моя .NET ActiveX DLL-компонента. Примерно также как это делает Imaging for Windows.
Для этого в Visual Studio я создал «Windows Forms Control Library» проект, в Properties которого на вкладке “Application\Assembly Information…” установил флажок “Make assembly COM-visible”, а на вкладке “Build” - флажок “Register for COM interop”. В AssemblyInfo.cs поместил ссылку [assembly: AssemblyKeyFile(@"ImagingSedoControl.snk")] на файл ключей, созданный с помощью команды “sn.exe -k ImagingSedoControl.snk” Скомпилировал dll-ку и затем поместил сборку в GAC. При этом в реестре создались все необходимые ключи и разделы.
Далее основываясь на http://msdn.microsoft.com/en-us/library/aa751976(VS.85).aspx зарегистрировал CLSID основного класса компонента ImagingSedoControl.MainForm в разделе «HKEY_CLASSES_ROOT\MIME\Database\Content Type\image/tiff», а в разделе «HKEY_CLASSES_ROOT\.tif» прописал название основного класса (Default) = ImagingSedoControl.MainForm. После этого в Internet Explorer-е при открытии ссылки на Tiff-файл внутрь стал загружаться мой компонент.
Но возникла другая проблема. Сам Tiff-файл при этом не отображается в окне, так как содержимое адресной строки Internet Explorer-а не поступает в свойство CommandLineArgs UserControl-а, которое я использую чтобы узнать какой файл мне необходимо отобразить. Как внутри моего компонента узнать содержимое строки адреса Internet Explorer-а?
...
Рейтинг: 0 / 0
Получение содержимого адресной строки Explorer-а внутри ActiveX Plugin-а
    #35921468
Degun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Up
...
Рейтинг: 0 / 0
Получение содержимого адресной строки Explorer-а внутри ActiveX Plugin-а
    #35958546
Degun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кому-то понадобится, то я подключил в reference проекта две ссылки:
1. Microsoft.mshtml
2. Interop.SHDocVw (Microsoft Internet Controls)
Тогда выявление ссылки на адресную строку можно реализовать с помощью такого кода.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
          SHDocVw.ShellWindowsClass windows = new ShellWindowsClass();
          Point LeftTop = PointToScreen(new Point( 0 ,  0 ));
          Point RightBottom = PointToScreen(new Point(Size.Width, Size.Height));
          List<string> Urls = new List<string>();
          foreach (SHDocVw.InternetExplorer explorer in windows)
          {
            //Отождествление нужного окна происходит по его координатам
            if (explorer.FullName.ToLower().IndexOf("iexplore.exe") <  0 ) continue;
            if ((explorer.Left >= LeftTop.X) || (explorer.Top >= LeftTop.Y)) continue;
            if ((explorer.Left + explorer.Width) <= RightBottom.X) continue;
            if ((explorer.Top + explorer.Height) <= RightBottom.Y) continue;
            //Необходимо проверить есть ли в строке имя графического файла
            string sCurUrls = "";
            if (IsGraphicFile(explorer.LocationURL))
            {
              sCurUrls = explorer.LocationURL;
            }
            else
            {
              //Получение доступа к содержимому документа
              mshtml.IHTMLDocument2 Doc = explorer.Document as mshtml.IHTMLDocument2;
              //Видимо нужно искать фрейм в документе
              if (Doc.frames.length >  0 )
              {
                Object FrameIndex =  0 ;
                mshtml.IHTMLWindow2 HtmlWnd = Doc.frames.item(ref FrameIndex) as mshtml.IHTMLWindow2;
                if (HtmlWnd != null)
                {
                  //Свойства не нулевые: href, pathname, protocol
                  if (IsGraphicFile(HtmlWnd.location.href))
                    sCurUrls = HtmlWnd.location.href;
                }
              }
            }
            if (sCurUrls.Length >  0 ) Urls.Add(sCurUrls);
          }
          if (Urls.Count >  0 ) sShowString = Urls[ 0 ];
Если в адресной строке ввести, например C:\Temp\2892580.tiff, то всё работает нормально. Но если в адресной строке ввести, например http://localhost/2886456.tiff, то browser выдаёт ошибку "A Runtime Error has occured".
Эта ошибка связана не с этим кодом, а или с какими-то общими системными настройками или настройками проекта или с нарушением общих принципов построения ActiveX компонентов на основе UserControl. Если кто знает, то подскажите.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Получение содержимого адресной строки Explorer-а внутри ActiveX Plugin-а
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]