|
||||||||
|
Создание группы программ.
Создание группы программ Менеджер программ (Program Manager) знаком многим из тех, кто работал в Windows ещё в незапамятные времена. Сейчас, когда в Windows появился Проводник, менеджер программ ушёл на второй план и исользуется сейчас, в основном, с одной-единственной целью ? создавать группы программ во время инсталляции. :) Менеджер программ может быть сервером DDE-соединения. Если вы ничего не знаете о DDE ? не беспокойтесь: всё, что нам потребуется, вы прочитаете в этой статье ниже. Для работы с DDE-серверами мы будем использовать компонент DdeClientConv, который находится на закладке System панели компонентов. Что такое DDE? DDE (Dynamic Data Excahnge) ? это устаревшая технология, которая использовалась давным давно для передачи данных между программами (сейчас для этих целей используется OLE). Передача данных в DDE производится через соединения. Программа-клиент устанавливает соединение с программой-сервером, передаёт/принимает данные и разрывает соединение. Применительно к нашей задаче, менеджер программ будет выступать в роли DDE-сервера, а программа инсталляции ? в роли DDE-клиента. DDE предоставляет двухуровневую схему связи с сервером: для её установления клиенту необходимо указать имя сервера и имя сервиса (topic), который клиент хочет у сервера запросить. Для больших и толстых серверов, имя сервиса является насущной необходимость, для маленьких и простых ? непонятным параметром, необходимость которого очень трудно объяснить. Менеджер программ ? простая и маленькая программа, поэтому имя сервиса у неё совпадает с именем сервера. Поместим на форму компонент DdeClientConv и настроим его в инспекторе объектов. Свойства DDEService и DDETopic должны быть установлены в PROGMAN. Свойство ConnectionMode переключите в ddeManual ?устанавливать и разрывать соединение мы будем вручную. Почему? Одним из правил, которых я придерживаюсь, является правило не кушать ресурсы без необходимости. Я создаю объекты в программах сразу перед тем, как они мне понадобятся; выделяю память непосредственно перед операторами, её использующими; и открываю файл, только тогда, когда уже готов его читать. Зачастую. :) Именно поэтому открывать соединение с менеджером программ я предлагаю только тогда, когда вся остальная работа уже выполнена. Хорошо. Будем считать, это было лирическое отступление и вернёмся к нашим
баранам. Может оказаться, что у нас под рукой нет подходящей формы для того,
чтобы поместить на неё DdeClientConv. В этом случае можно создавать
компонент DdeClientConv вручную: var Перед тем, как что-то сделать с сервером, вы должны вызвать метод OpenLink (установить соединение), а после работы ? CloseLink (соответственно, разорвать). Помимо приёма и передачи данных, DDE-сервер может выполнять команыды клиента. Всё очень просто: мы передаём серверу строку, говорим, что это команда ? и он её исполняет. Методы ExecuteMacro или ExecuteMacroLines компонента DdeClientConv передают серверу команду (и команды, соответственно) для выполнения. Команды менеджера программ заключаются в квадратные скобки, и выглядят приблизительно так: [CreateGroup("SomeTools",0)] [ShowGroup("Стандартные")] [AddItem("c:\windows\notepad.exe")] Эти команды мы подробнее рассмотрим ниже, а перед этим остановимся ещё на одном важном моменте работы с менеджером программ ? получении информации о текущем состоянии дел. Что нас может интересовать? Какие группы уже созданы, какие элементы находятся в этих группах... Обратите внимание, что этой информацией мы можем и пренебречь ? для того, чтобы создать группу, нам вовсе не требуется знать, какие группы уже созданы. Пример показывает, как можно прочитать список групп из менеджера программ: var Прочитав список групп, мы можем прочитать содержимое любой группы из этого
списка (например, первой): var Вот содержимое группы Стандартные: "Стандартные",C:\WINDOWS\ГЛАВНО~1\ ПРОГРА~1\СТАНДА~1,7,1 По большому счёту, нам эта информация не потребуется. Но, может быть, вы захотите заменить один из элементов группы во время инсталляции ? в этом случае, конечно, надо знать, что изменять. Далее я опишу способ создать группу и элемент в группе. var Полный список команд плюс описание вы найдёте в файле win32.hlp. Здесь я приведу только их список, чтобы вы знали, что искать: CreateGroup, ShowGroup, DeleteGroup, Reload, AddItem, ReplaceItem, DeleteItem и ExitProgman. Я написал утилиту, которая позволит вам поиграться с менеджером программ. Её исходный код вы можете скачать здесь (5085). Для того, чтобы создать, показать или удалить группу программ, введите название группы в поле ввода Группа (или выберите её в списке) и нажмите соответствующую кнопку. Та же самая техника работает и для элементов группы ? если вы хотите добавить новый элемент, введите название программы и имя файла в соответствующих полях ввода перед тем, как нажать кнопку Создать. Может быть это не самая сложная программа из тех, которые я написал, но она (а) доступна в исходниках и (б) позволяет "почувствовать", как работает менеджер программ. Теперь перейдём ко второму способу работать с группами программ ? через интерфейсы, предоставляемые Проводником.
| |||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |