2004 г.
Конструктор от Microsoft,
или Переделываем Internet Explorer своими руками
Татьяна Михно, Издательский Дом "КОМИЗДАТ"
Используя не совсем стандартный подход к настройкам операционной
системы, можно значительно расширить возможности любимого браузера. Любимого - несмотря
на то, что Netscape красивее выглядит, а Opera быстрее работает и потребляет меньше ресурсов...
Лично меня Internet Explorer привлек своей серьезной функциональностью
и, только не смейтесь, открытостью, легкостью программирования под него. Интерфейсы этого
браузера документированы в MSDN настолько
хорошо, насколько это позволяют амбиции Microsoft, заинтересованной в популярности своего
браузера.
Итак, не откладывая в долгий ящик, начнем хотя бы с того, что Internet
Explorer (IE) можно запускать c ключом. Например, в меню Start > Run (Пуск > Выполнить)
панели задач введите iexplore.exe и, через пробел, одно из значений, приведенных в таблице 1.
Этими ключами может быть полезно воспользоваться, например, при запуске IE из ярлыка
на рабочем столе.
А теперь давайте изменим внешний вид многострадального детища Microsoft.
Воспользуемся редактором системного реестра - программой Registry Editor (рис. 1).
Редактор реестра запускается из меню Start > Run (Пуск > Выполнить)
панели задач. Просто введите regedit и нажмите <Enter>.
Прежде чем вносить изменения в системный реестр Windows, настойчиво
рекомендую сохранить его пока еще неповрежденную копию. Для этого выберите меню Registry > Export Registry File… и введите имя файла, например сегодняшнее число. Путь к отступлению обеспечен, начинаем!
Хозяйке на заметку |
Операционные системы Windows используют системный реестр для хранения
информации о конфигурации компьютера, пользователях и прикладных программах. В правой
части окна Registry Editor находится дерево разделов реестра, в левой показаны хранящиеся
в них параметры и их значения. Параметры в реестре бывают трех видов: строковые (String),
двоичные (Binary) и целые (DWORD). Изменить данные раздела, параметра или значения можно
с помощью контекстного меню, появляющегося по правой кнопке мыши. |
Для начала изменим заголовок окна - вместо порядком надоевшего "Microsoft
Internet Explorer" поставим "Мой любимый браузер". Эта возможность работает в Internet
Explorer, начиная с версии 5. Откройте в редакторе реестра раздел HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\Main и добавьте в него строковый параметр:
название - Window Title;
значение - Мой любимый браузер.
Элементарно, не так ли? :-)
Кстати, вам не надоел унылый серый фон панели инструментов любимого
браузера? Предлагаю заменить его на что-нибудь более веселое. Главное, чтоб фоновая картинка
была сохранена в формате BMP - как у меня (C:\My_Settings\back.bmp). Работает это в Internet
Explorer, начиная с версии 4.
Откройте в редакторе реестра раздел HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar - и добавьте в него строковый параметр:
название - BackBitmap;
значение - C:\My_Settings\back.bmp.
Заменить вращающийся логотип в правом верхнем углу окна можно в Internet
Explorer, начиная с версии 5. Для начала нужно нарисовать свой, в виде последовательности
кадров - фаз вращения (как показано на рис. 2). Желательно нарисовать два логотипа:
размер кадра одного - 26 x 26 пикселов, другого - 38 x 38. Количество кадров не важно,
однако понятно - чем их больше, тем более плавным будет вращение. Сохраним кадры в формате
BMP (у меня, например: C:\My_Settings\logo26.bmp и C:\My_Settings\logo38.bmp).
Открываем в редакторе реестра уже знакомый раздел HKEY_CURRENT_USER\Software\ Microsoft\Internet
Explorer\Toolbar - и добавляем в него два строковых параметра:
1. название - BrandBitmap;
значение - C:\My_Settings\logo38.bmp;
2. название - SmBrandBitmap;
значение - C:\My_Settings\logo26.bmp.
Кстати, если вы читаете почту с помощью Outlook Express, вам наверняка
будет интересно узнать, что два последних изменения отразились и на нем. Собственно, именно
здесь используется больший вращающийся логотип - если установлено показывать надписи на
кнопках.
Иконку в виде буквы "е" можно заменить только с помощью специальных
средств, например бесплатной программы ResHack или другого редактора ресурсов.
Добавить свой пункт в стандартное контекстное меню несложно. А вот
сделать так, чтоб при его выборе выполнялись конкретные действия - это уже сложнее. Для
решения этой задачи нужно знать JavaScript или VBScript. Это работает в Internet Explorer
версии 4 и выше.
Но обо всем по порядку. Добавим в контекстное меню пункт Alert, при
выборе которого будет выдаваться остроумное сообщение "Время пить кофе!". Сначала напишем
собственно программу (в нашем случае на JavaScript). Откройте Notepad (Блокнот) и наберите
в нем следующий текст:
<script language="javascript">
alert("Пора пить кофе!");
</script>
Сохраняем этот файл (C:\My_Settings\alert.htm). Теперь обеспечим запуск
этой программы. В редакторе реестра откройте раздел HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\MenuExt. Если такого нет - создаем. В нем заводим раздел под названием Alert
(или любым другим - его название потом появится в Internet Explorer как пункт контекстного
меню). Откройте свежеиспеченный раздел HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Alert, дважды щелкаем на строковом параметре Default и присваиваем ему значение C:\My_Settings\alert.htm.
После всех означенных издевательств Internet Explorer у меня стал выглядеть
следующим образом (см. рис. 3).
Мы выполнили минимальные действия, нужные для включения своего пункта
в контекстное меню Internet Explorer. А сейчас я позволю себе немного загрузить теорией
наиболее любопытных читателей.
Скрипты
К сожалению, из контекстного меню можно запускать только скрипты JavaScript
и VBScript. Приложения .exe или .dll придется загружать уже из скриптов. Зато скрипт имеет
доступ к объекту window (окно приложения Internet Explorer, в котором выполняется скрипт)
- через свойство menuArguments объекта external. Равно как и к прочим объектам, ниже по
иерархии. То есть вполне корректно работает такой скрипт:
<script language="javascript">
alert(external.menuArguments.location.href)
</script>
который сообщает URL текущего документа.
Или даже такой:
<script language="javascript">
alert("Cookie is: " +
external.menuArguments.document.cookie);
</script>
- он сообщает, оставляет ли текущий веб-сайт на нашем компьютере свои cookie.
Реестр
Полный путь к скрипту - далеко не единственное, что можно добавить
в реестр. Оказывается, запуск скрипта можно регулировать двумя необязательными, но очень
полезными параметрами. Первый параметр задается в реестре в разделе HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\MenuExt\Alert целым числом (DWORD):
название - contexts;
значение - битовая маска, состоящая из одного или суммы нескольких следующих шестнадцатеричных чисел:
0x1 |
по умолчанию |
0x2 |
рисунки |
0x4 |
элементы управления |
0x8 |
таблицы |
0x10 |
выделенный текст |
0x20 |
ссылки |
То есть, чтобы в контекстном меню пункт Alert появлялся только над рисунками и ссылками,
значение contexts должно быть:
2h + 20h = 22h
Второй параметр, задающийся в том же разделе реестра, имеет тип DWORD:
название - Flags;
значение - 0x1.
Если вы потрудились его задать, при выполнении скрипта отобразится диалоговое окно,
при его умелом программировании вполне способное обмениваться данными с пользователем.
Скрипт будет запускаться, как если бы он был вызван с помощью метода
showModalDialog. С единственным, правда, отличием - скрипт получает доступ к родительскому
окну посредством свойства menuArguments объекта external.
И, наконец, на панель инструментов можно добавить свою кнопку, по нажатию
которой будет запускаться указанная вами программа. Для того чтобы эта программа обменивалась
данными с Internet Explorer, понадобятся навыки объектного программирования и знание модели
COM. Причем эта возможность существует в Internet Explorer версии 5 и выше.
Для создания своей кнопки на панели инструментов Internet Explorer
нужно подготовить рисунок в двух экземплярах - для активного и неактивного состояния.
Неактивную кнопку принято рисовать в оттенках серого, активную - цветной.
Изображение на кнопке панели инструментов IE - это пиктограмма (или
иконка) с расширением .ico, содержащая рисунки 16 x 16, 20 x 20 или 36 x 36 пикселов,
16 или 256 цветов стандартной палитры Windows. Пример показан на рис. 4. У меня иконки
сохранены как C:\My_Settings\cool.ico и C:\My_Settings\hot.ico. Теперь их нужно поместить
на панель:
Создайте уникальный идентификатор GUID, например, {AF56C981-ED80-4b90-A91F-C2F9E791F1DC},
с помощью программы guidgen.exe или uuidgen.exe.
Откройте в редакторе реестра раздел HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Extensions - и создайте в нем раздел под именем GUID. У меня получилось HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\Extensions\{AF56C981-ED80-4b90-A91F-C2F9E791F1DC} Откройте этот раздел.
Добавьте в него следующие строковые параметры:
название - HotIcon;
значение - C:\My_Settings\hot.ico;
название - Icon;
значение - ../../../../../C:/My_Settings/cool.ico.
Это пути к иконкам для активного и неактивного состояния кнопки.
Если вы не настраивали панель Internet Explorer специально, можно сразу
поместить на нее нашу кнопку. Для этого добавьте в раздел строковый параметр:
название - Default Visible;
значение - Yes.
Иначе кнопку придется добавлять на панель инструментов с помощью ее
настройки - диалогового окна Customize Toolbar (Настройка панели инструментов).
Кнопки могут сопровождаться подписью и подсказкой, появляющимися при
наведении указателя мыши. Обычно это один и тот же текст. Этот текст тоже необходим для
кнопки; его можно создать, добавив в наш раздел строковый параметр:
название - ButtonText;
значение - "Текст подсказки к кнопке".
(О том, как после этого заставить Internet Explorer сделать что-нибудь полезное, расскажем
ниже.)
Несложно также добавить свой пункт в меню Tools (Сервис) или Help (Справка)
Internet Explorer версии 5 и выше. Давайте создадим пункт "Моя команда":
1. Создайте новый уникальный идентификатор GUID или воспользуйтесь
уже созданным. Если Вы создали новый GUID, откройте в редакторе реестра раздел
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Extensions и
создайте в нем раздел, имя которого - GUID, созданный на предыдущем шаге. Откройте его.
Если же новый GUID не создавался, откройте раздел HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\Extensions\{AF56C981-ED80-4b90-A91F-C2F9E791F1DC}
2. В этот раздел добавьте строковый параметр:
название - MenuText;
значение - Моя команда.
Это текст нового пункта меню - его содержание ограничивается только вашей фантазией.
3. Добавьте в наш раздел строковый параметр:
название - CLSID;
значение - {1FBA04EE-3024-11d2-8F1F-0000F87ABD16}
Значение должно быть именно это и никакое другое. Эта константа - CLSID
расширения панели инструментов Internet Explorer для приложений.
4. Если новый пункт предназначен для меню Help (Справка), добавьте
в наш раздел строковый параметр:
название - MenuCustomize;
значение - help.
Если новый пункт предназначен для меню Tools (Сервис), этого пункта
быть не должно.
5. Если нужно, чтоб при выборе этого пункта в строке состояния появлялся
текст, добавьте в раздел строковый параметр:
название - MenuStatusBar;
значение - "Текст строки состояния".
Итак, появилась кнопка или новый пункт в меню. Теперь привяжем к ней
(или к нему) функциональность. Тут методика для кнопки и для пункта меню одинакова. При
нажатии на кнопку или выборе пункта меню можно запускать следующие объекты:
COM-объекты;
скрипты;
приложения.
Особенности создания и запуска COM-объектов подробно описаны на
сайте компании Microsoft, об остальных же сейчас пойдет речь.
Скрипт
Если нужно запускать скрипт, добавьте в соответствующий раздел реестра строковый параметр:
название - Script;
значение - полный путь к скрипту, который должен запускаться (например, C:\test.js).
Приложение
Чтобы запускалась программа с расширением .exe, добавьте в раздел строковый параметр:
название - Exec;
значение - полный путь к приложению, которое должно запускаться, например C:\direct.exe.
Проделать действия, указанные выше не сложно, главное - внимательность.
Зато представьте, с каким удовольствием вы будете пожинать плоды своих усилий и показывать
их друзьям :-).