- Работа с Панелью инструментов в Windows 7
- Создаем Панель инструментов в Windows 7
- Способ 1: Добавление через Панель задач
- Способ 2: Добавление через «Панель управления»
- Восстановление панели Quick Launch
- Создание настраиваемых панелей обозревателя, панелей инструментов и полос рабочих столов
- Полосы инструментов
- Полосы рабочего стола
- Реализация диапазонных объектов
- Основы использования объекта Band
- Регистрация аппаратного контроллера управления
- Простой пример настраиваемой панели обозревателя
- Функции DLL
- Требуемые реализации интерфейса
- IObjectWithSite
- IPersistStream
- идескбанд
- Необязательные реализации интерфейса
- иинпутобжект
- Регистрация CLSID
- Процедура окна
Работа с Панелью инструментов в Windows 7
«Панелью инструментов» называют элементы, располагающиеся на панели быстрого запуска в операционной системе Windows. Используется такая функция для мгновенного перехода к необходимому приложению. По умолчанию она отсутствует, поэтому создать и настроить ее нужно самостоятельно. Далее мы бы хотели детально обсудить осуществление этой процедуры на компьютерах под управлением Виндовс 7.
Создаем Панель инструментов в Windows 7
Всего существует два метода добавления основных значков в область быстрого запуска. Каждый способ будет максимально подходящим для разных пользователей, поэтому давайте рассмотрим каждый из них, а вы уже выберите оптимальный.
Способ 1: Добавление через Панель задач
Вам доступен ручной выбор отображаемых элементов Панели инструментов в указанной области путем добавления ее через Панель задач (полоска, на которой и расположен «Пуск»). Производится эта процедура буквально в несколько кликов:
- Щелкните ПКМ на свободном месте области задач и снимите галочку возле пункта «Закрепить панель задач».
Выполните повторный клик и наведите курсор на пункт «Панели».
Выберите необходимую строку и нажмите по ней ЛКМ, чтобы активировать отображение.
Дважды щелкните ЛКМ, например, на кнопке «Рабочий стол», чтобы развернуть все элементы и сразу запустить нужное меню.
Что касается удаления случайно созданного объекта, осуществляется оно так:
- Кликните ПКМ на необходимом элементе и выберите пункт «Закрыть панель инструментов».
Теперь вы знаете, как с помощью настроек области задач работать с элементами быстрого запуска. Однако такой способ вынуждает повторять каждое действие, если требуется добавить более одной панели. Активировать все их одновременно можно другим методом.
Способ 2: Добавление через «Панель управления»
Мы уже уточнили выше, что этот вариант позволит справиться с поставленной задачей немного быстрее. Пользователю только нужно произвести такие шаги:
- Откройте меню «Пуск» и перейдите в «Панель управления».
Среди всех значков отыщите «Панель задач и меню «Пуск»».
Переместитесь во вкладку «Панели инструментов».
Поставьте галочки возле необходимых пунктов, а затем щелкните на «Применить».
Теперь на Панели задач отобразятся все выбранные объекты.
Восстановление панели Quick Launch
«Панель быстрого запуска» или Quick Launch является одним из объектов Панели инструментов, однако ее особенность в том, что пользователь сам добавляет нужные ему приложения для запуска, а сама панель не установлена по умолчанию. Поэтому в случае надобности восстановления или повторного создания потребуется осуществить такие действия:
- Нажмите ПКМ на области задач и открепите ее.
Теперь перейдите в «Панели» и создайте новый элемент.
В поле «Папка» введите путь %appdata%\Microsoft\Internet Explorer\Quick Launch , а затем кликните на «Выбор папки».
Внизу появится полоса с соответствующей надписью. Осталось придать ей должный вид.
Кликните по ней ПКМ и снимите галочки с пунктов «Показывать подписи» и «Показать заголовок».
Вместо старой надписи будут отображаться значки быстрого доступа, которые вы можете удалять или добавлять новые путем перемещения ярлыков.
Приведенные инструкции по созданию панелей со стандартными инструментами в Windows 7 описывают лишь часть возможных взаимодействий с Панелью задач. Развернутое описание всех действий вы найдете в других наших материалах по следующим ссылкам.
Создание настраиваемых панелей обозревателя, панелей инструментов и полос рабочих столов
Панель обозревателя появилась в обозревателе Microsoft Internet Explorer 4,0, чтобы предоставить область просмотра, смежную с областью браузера. Это, по сути, дочернее окно в окне Internet Explorer, и его можно использовать для вывода информации и взаимодействия с пользователем практически таким же образом. Панели обозревателя чаще всего отображаются в виде вертикальной панели в левой части области браузера. Однако панель обозревателя также может отображаться горизонтально, под областью браузера.
Панель обозревателя имеет широкий спектр возможных применений. Пользователи могут выбрать вариант, который должен отображаться несколькими разными способами, включая его выбор из подменю » панель обозревателя » в меню » вид » или нажатием кнопки на панели инструментов. Internet Explorer предоставляет несколько стандартных панелей обозревателя, включая Избранное и поиск.
Одним из способов настройки обозревателя Internet Explorer является добавление настраиваемой панели обозревателя. При реализации и регистрации они будут добавлены в подменю » панель обозревателя » меню » вид «. При выборе пользователем область просмотра панели обозревателя может использоваться для вывода информации и ввода данных пользователем во многом так же, как у обычного окна.
Чтобы создать настраиваемую панель обозревателя, необходимо реализовать и зарегистрировать объект диапазона. Объекты управления версиями появились в оболочке версии 4,71 и предоставляют возможности, аналогичные обычным окнам. Однако, поскольку они являются объектами модели COM и содержатся в Internet Explorer или оболочке, они реализуются несколько по-разному. Для создания примеров полос обозревателя, отображаемых на первом рисунке, использовались простые объекты полос. Реализация образца вертикальной панели обозревателя будет подробно рассмотрена в следующем разделе.
Полосы инструментов
Панель инструментов — это объект с полосой, который появился в Microsoft Internet Explorer 5 для поддержки функции Windows Radio Tool. Панель инструментов Internet Explorer на самом деле является элементом управления главной панели, который содержит несколько элементов управления ToolBar. Создавая панель инструментов, можно добавить полосу к этому элементу управления главной панели. Однако, как и в случае с панелями обозревателя, панель инструментов является окном общего назначения.
Пользователи выводят панель инструментов, выбирая ее из подменю панели инструментов меню вид или из контекстного меню, которое отображается щелчком правой кнопкой мыши в области панели инструментов.
Полосы рабочего стола
Для создания полос рабочих столов также можно использовать объекты полос. Хотя их Базовая реализация похожа на панели обозревателя, полосы рабочего стола не связаны с Internet Explorer. Настольный полоса — это, по сути, способ создания закрепляемого окна на рабочем столе. Пользователь выбирает его, щелкнув правой кнопкой мыши панель задач и выбрав ее в подменю панели инструментов .
Изначально полосы рабочего стола закреплены на панели задач.
Затем пользователь может перетащить полосу настольных ПК на Рабочий стол, и она появится в виде обычного окна.
Реализация диапазонных объектов
Обсуждаются следующие темы.
Основы использования объекта Band
Несмотря на то, что их можно использовать во многом в обычных окнах, объекты управления полосами являются COM-объектами, которые существуют в контейнере. Панели обозревателя содержатся в Internet Explorer, а полосы рабочего стола — в оболочке. Хотя они выполняют различные функции, их Базовая реализация очень похожа. Основное различие заключается в способе регистрации объекта Band, который, в свою очередь, управляет типом объекта и его контейнером. В этом разделе обсуждаются аспекты реализации, общие для всех объектов полос. Дополнительные сведения о реализации см. в простом примере настраиваемой панели обозревателя .
Помимо IUnknown и IClassFactory, все объекты полос должны реализовывать следующие интерфейсы.
Кроме регистрации идентификатора класса (CLSID), для соответствующей категории компонентов также должны быть зарегистрированы панель обозревателя и объекты полосы рабочего стола. Регистрация категории компонента определяет тип объекта и его контейнер. Полосы инструментов используют другую процедуру регистрации и не имеют идентификатора категории (CATID). CATID для трех объектов с диапазоном, которые им необходимы:
Тип полосы | Категории компонентов |
---|---|
Вертикальная панель обозревателя | CATID _ инфобанд |
Горизонтальная панель обозревателя | CATID _ коммбанд |
Настольный полос | CATID _ дескбанд |
Дополнительные сведения о регистрации объектов с полосами см. в статье Регистрация аппаратного контроллера управления .
Если объект диапазона должен принимать вводимые пользователем данные, он также должна реализовывать иинпутобжект. Чтобы добавить элементы в контекстное меню для панели обозревателя или полос рабочего стола, объект диапазона должен экспортировать IContextMenu. Панели инструментов не поддерживают контекстные меню.
Поскольку объекты управления доступом реализуют дочернее окно, они также должны реализовать процедуру окна для обработки сообщений Windows.
Объекты полос могут отсылать команды в контейнер через интерфейс IOleCommandTarget контейнера. Чтобы получить указатель интерфейса, вызовите метод иинпутобжектсите:: QueryInterface контейнера и запросите IID _ IOleCommandTarget. Затем вы отправляете команды в контейнер с помощью IOleCommandTarget:: Exec. Группа команд — КГИД _ дескбанд. При вызове метода идескбанд:: жетбандинфо объекта Band контейнер использует параметр двбандид , чтобы назначить объект диапазона идентификатор, который используется для трех команд. Поддерживаются четыре идентификатора команды IOleCommandTarget:: Exec .
DBID _ бандинфочанжед
Сведения о полосе изменились. Задайте для параметра пваин идентификатор диапазона, полученный в последнем вызове Идескбанд:: жетбандинфо. Контейнер будет вызывать метод идескбанд:: жетбандинфо объекта Band для запроса обновленной информации.
DBID _ максимизебанд
Разверните полосу. Задайте для параметра пваин идентификатор диапазона, полученный в последнем вызове Идескбанд:: жетбандинфо.
Включите или отключите другие полосы в контейнере. Задайте для параметра пваин _ Тип VT Unknown с одним из следующих значений:
Значение | Описание |
---|---|
pUnk | Указатель на интерфейс IUnknown объекта полосы. Все остальные полосы рабочего стола будут скрыты. |
0 | Скрыть все полосы настольных рабочих столов. |
1 | Отображение всех полос настольных рабочих столов. |
DBID _ пушчеврон
Версия 5. Отображение шевронного меню. Контейнер отправляет сообщение _ пушчеврон RB , а объект Band получает уведомление _ чевронпушед РБН , которое выводит запрос на отображение углового меню. Задайте для параметра нкмдексекопт метода IOleCommandTarget:: Exec идентификатор диапазона, полученный в последнем вызове идескбанд:: жетбандинфо. Установите параметр пваин метода IOleCommandTarget:: Exec в _ Тип VT I4 с определенным приложением значением. Он передается обратно объекту Band в качестве значения лаппвалуе _ уведомления чевронпушед РБН.
Регистрация аппаратного контроллера управления
Объект диапазона должен быть зарегистрирован как внутрипроцессный сервер OLE, поддерживающий потоковое подразделение. Значением по умолчанию для сервера является текстовая строка меню. Для панелей обозревателя он будет отображаться в подменю панели обозревателя в меню вид Internet Explorer. Для панелей инструментов она появится в подменю панели элементов меню вид Internet Explorer. Для полос рабочего стола она появится в подменю панели инструментов контекстного меню панели задач. Как и в случае с ресурсами меню, размещение амперсанда (&) перед буквой приведет к его подчеркиванием и включению сочетаний клавиш. Например, строка меню вертикальной панели обозревателя, показанной на первом рисунке, — «пример &вертикальной панели обозревателя».
Изначально Internet Explorer получает перечисление зарегистрированных объектов панели обозревателя из реестра с помощью категорий компонентов. Чтобы повысить производительность, он кэширует это перечисление, представляя впоследствии добавленные панели обозревателя. Чтобы заставить Windows Internet Explorer перестроить кэш и распознавать новую панель обозревателя, при регистрации новой панели обозревателя удалите следующие разделы реестра:
HKey _ Текущее _ пользовательское \ программное обеспечение \ Microsoft \ Windows \ CurrentVersion Explorer невозможная \ \ \ Категория компонентов настройок \ \ \ enum
HKey _ Текущее _ пользовательское \ программное обеспечение \ Microsoft \ Windows \ CurrentVersion Explorer невозможная \ \ \ Категория компонентов настройок \ \ \ enum
Так как для каждого пользователя создается кэш панели обозревателя, приложению установки может потребоваться перечислить все кусты реестра пользователя или добавить заглушку для каждого пользователя, которая будет запускаться при первом входе пользователя в систему.
Как правило, основная запись реестра для объекта диапазона будет выглядеть следующим образом.
Для панелей инструментов также должен быть зарегистрирован CLSID своего объекта в Internet Explorer. Для этого присвойте значение в разделе hKey _ Local _ Machine \ Software \ Microsoft \ Internet Explorer \ панель инструментов с идентификатором CLSID объекта панели инструментов, как показано ниже. Его значение данных игнорируется, поэтому тип значения не важен.
В реестр также можно добавить несколько необязательных значений. Например, следующее значение необходимо, если вы хотите использовать панель обозревателя для отображения HTML. отображаемое значение не является примером, а действительное значение, которое следует использовать.
Если вы хотите использовать панель обозревателя для отображения HTML, в сочетании с указанным выше значением также необходимо следующее необязательное значение. Это значение должно быть установлено в расположение файла, содержащего HTML-содержимое для панели обозревателя.
Еще одно необязательное значение определяет ширину или высоту панели обозревателя по умолчанию в зависимости от того, является ли она вертикальной или горизонтальной, соответственно.
Для значения Барсизе должно быть задано значение Width или Height линейки. Для этого значения требуется восемь байт и оно помещается в реестр как двоичное значение. Первые четыре байта задают размер в пикселях в шестнадцатеричном формате, начиная с крайнего левого байта. Последние четыре байта зарезервированы и должны быть равны нулю.
Например, здесь показаны полные записи реестра для панели обозревателя с поддержкой HTML с шириной по умолчанию 291 (0x123) пикселей.
Регистрацию идентификатора CATID объекта диапазона можно выполнять программным способом. Создайте объект диспетчера категорий компонентов (CLSID _ стдкомпоненткатегориесмгр) и запросите указатель на его интерфейс икатрегистер . Передайте идентификаторы CLSID и CATID объекта полоси в икатрегистер:: регистерклассимплкатегориес.
Простой пример настраиваемой панели обозревателя
В этом примере рассматривается реализация образца вертикальной панели обозревателя, показанного в введении.
Ниже приведена базовая процедура создания пользовательской панели обозревателя.
Очень простая реализация, используемая в образце панели обозревателя, может фактически использоваться для любого типа панели обозревателя или полосы рабочего стола, просто зарегистрировав ее для соответствующей категории компонента. Более сложные реализации необходимо настроить для области вывода и контейнера каждого типа объекта. Однако большую часть этой настройки можно добиться, приняв пример кода и расширив его, применив привычные методики программирования Windows к дочернему окну. Например, можно добавить элементы управления для взаимодействия с пользователем или графики для более насыщенного экрана.
Функции DLL
Все три объекта упаковываются в одну библиотеку DLL, которая предоставляет следующие функции.
Первые три функции — это стандартные реализации, которые не будут обсуждаться здесь. Реализация фабрики класса также является стандартной.
Требуемые реализации интерфейса
В вертикальном образце панели обозревателя реализованы четыре необходимых интерфейса: IUnknown, IObjectWithSite, IPersistStreamи идескбанд в составе класса цексплорербар. Реализации конструктора, деструктора и IUnknown являются простыми и не обсуждаются здесь. Подробности см. в примере кода.
Подробно рассматриваются следующие интерфейсы.
IObjectWithSite
Когда пользователь выбирает панель обозревателя, контейнер вызывает метод IObjectWithSite:: SetSite соответствующего объекта полосы. Для параметра пунксите будет задан указатель IUnknown сайта.
Как правило, реализация SetSite должна выполнять следующие действия:
- Освобождение любого указателя на сайт, который в данный момент удерживается.
- Если указатель, переданный в SetSite , имеет значение null, полоса удаляется. SetSite может вернуть S _ ОК.
- Если указатель, переданный в SetSite , имеет значение, отличное от NULL, устанавливается новый сайт. SetSite должен выполнить следующие действия:
- Вызовите QueryInterface на сайте для своего интерфейса иолевиндов .
- Вызовите иолевиндов:: Onwindow , чтобы получить маркер родительского окна. Сохраните маркер для последующего использования. Выпустите иолевиндов , если он больше не нужен.
- Создайте окно объекта полоси в качестве дочернего элемента окна, полученного на предыдущем шаге. Не создавайте его как видимое окно.
- Если объект Band реализует иинпутобжект, вызовите QueryInterface на сайте для своего интерфейса иинпутобжектсите . Сохранить указатель на этот интерфейс для последующего использования.
- Если все шаги выполнены успешно, возвращается значение S _ ОК. В противном случае возвращается код ошибки, определенный OLE, указывающий на сбой.
Образец панели обозревателя реализует SetSite следующим образом. В следующем коде m _ псите является закрытой переменной-членом, содержащей указатель иинпутобжектсите , а m _ хвндпарент содержит маркер родительского окна. В этом примере также обрабатывается создание окна. Если окно не существует, этот метод создает окно панели обозревателя как дочерний элемент соответствующего размера родительского окна, полученного с помощью SetSite. Дескриптор дочернего окна хранится в _ дескрипторе m.
Реализация SetSite в примере просто заключает вызов метода QueryInterface сайта, используя указатель сайта, сохраненный с помощью .
IPersistStream
Internet Explorer будет вызывать интерфейс IPersistStream панели обозревателя, чтобы позволить панели обозревателя загружать или сохранять постоянные данные. Если постоянные данные отсутствуют, методы должны по-прежнему возвращать код успешного выполнения. Интерфейс IPersistStream наследует от IPersist, поэтому необходимо реализовать пять методов.
Образец панели обозревателя не использует постоянные данные и имеет только минимальную реализацию IPersistStream. IPersist:: GETOBJECT Возвращает CLSID объекта (CLSID _ сампликсплорербар), а остаток возвращает либо s _ ОК, либо _ false, либо E _ нотимпл.
идескбанд
Интерфейс идескбанд относится к объектам диапазона. В дополнение к одному методу он наследует от идоккингвиндов, который, в свою очередь, наследует от иолевиндов.
Существует два метода иолевиндов : и иолевиндов:: контекстсенситивехелп. Реализация метода Window в образце панели обозревателя возвращает его дескриптор дочернего окна, m и _ HWND. Контекстно-зависимая справка не реализована, поэтому контекстсенситивехелп возвращает E _ нотимпл.
Метод ресизебордердв не используется с каким-либо типом объекта Band и всегда должен возвращать E _ нотимпл. Метод шовдв либо показывает, либо скрывает окно панели обозревателя в зависимости от значения его параметра.
Метод клоседв уничтожает окно панели обозревателя.
Оставшийся метод, жетбандинфо, относится к идескбанд. Internet Explorer использует его для указания идентификатора и режима просмотра панели обозревателя. Internet Explorer также может запросить один или несколько фрагментов информации из панели обозревателя, заполнив элемент двмаск структуры дескбандинфо , которая передается в качестве третьего параметра. Жетбандинфо должен хранить идентификатор и режим просмотра и заполнить структуру дескбандинфо запрошенными данными. Образец панели обозревателя реализует жетбандинфо , как показано в следующем примере кода.
Необязательные реализации интерфейса
Существует два необязательных интерфейса, но это может быть полезно для реализации: иинпутобжект и IContextMenu. Образец панели обозревателя реализует иинпутобжект. Сведения о том, как реализовать IContextMenu, см. в документации.
иинпутобжект
Интерфейс иинпутобжект должен быть реализован, если объект диапазона принимает вводимые пользователем данные. Internet Explorer реализует иинпутобжектсите и использует иинпутобжект для поддержания соответствующего фокуса ввода пользователя, если он содержит несколько окон, содержащихся в них. Панель обозревателя должна реализовывать три метода.
Internet Explorer вызывает уиактиватеио , чтобы сообщить панели обозревателя о том, что она активируется или деактивируется. При активации образец панели обозревателя вызывает SetFocus , чтобы установить фокус на окно.
Internet Explorer вызывает хасфокусио , когда пытается определить, какое окно находится в фокусе. Если окно панели обозревателя или один из его потомков имеет фокус, хасфокусио должен вернуть значение s _ ОК. В противном случае оно должно возвращать _ значение S false.
Транслатеакцелераторио позволяет объекту обрабатывать сочетания клавиш. Образец панели обозревателя не реализует этот метод, поэтому он возвращает _ значение false.
Реализация иинпутобжектсите в строке примера выглядит следующим образом.
Регистрация CLSID
Как и для всех COM-объектов, необходимо зарегистрировать CLSID на панели обозревателя. Чтобы объект правильно функционировал в Internet Explorer, он также должен быть зарегистрирован для соответствующей категории компонентов (CATID _ инфобанд). Соответствующий раздел кода для панели обозревателя показан в следующем примере кода.
При регистрации объектов Band в образце используются обычные процедуры COM.
Помимо идентификатора CLSID, серверный объект также должен быть зарегистрирован для одной или нескольких категорий компонентов. В действительности это основное различие в реализации между вертикальными и горизонтальными образцами панели обозревателя. Этот процесс обрабатывается путем создания объекта диспетчера категорий компонентов (CLSID _ стдкомпоненткатегориесмгр) и использования метода икатрегистер:: регистерклассимплкатегориес для регистрации сервера объектного диапазона. В этом примере регистрация категории компонента обрабатывается путем передачи CLSID и CATID образца панели обозревателя в закрытую функцию —регистеркомкат, как показано в следующем примере кода.
Процедура окна
Поскольку объект диапазона использует дочернее окно для своего экрана, он должен реализовать процедуру окна для обработки сообщений Windows. Образец «полоса» имеет минимальную функциональность, поэтому процедура окна обрабатывает только пять сообщений:
Процедуру можно легко расширить для размещения дополнительных сообщений, чтобы обеспечить поддержку дополнительных функций.
_Обработчик команд WM просто возвращает ноль. _Обработчик рисования WM создает простой текст, отображаемый в примере на панели обозревателя во введении.
_Обработчики WM SETFOCUS и WM _ киллфокус уведомляют сайт об изменении фокуса, вызывая метод Иинпутобжектсите:: онфокусчанжеис сайта.
Объекты управления доступом обеспечивают гибкий и мощный способ расширения возможностей Internet Explorer путем создания настраиваемых панелей обозревателя. Реализация рабочего диапазона позволяет расширить возможности обычных окон. Хотя требуется какое-то программирование COM, оно в конечном итоге предоставляет дочернее окно для пользовательского интерфейса. В этом случае основная часть реализации может использовать привычные методы программирования Windows. Хотя в приведенном здесь примере используются только ограниченные функциональные возможности, он иллюстрирует все необходимые функции объекта диапазона, и его можно легко расширить для создания уникального и мощного пользовательского интерфейса.