Запуск приложения из командной строки
Сразу оговоримся, что из командной стр оки (например, из окна Запуск программы, открываемого командой Пуск → Выполнить) можно запустить любое приложение: достаточно только ввести его полный или относительный (относительно рабочей папки) путь. Однако, возможно, вы замечали, что некоторые приложения можно запускать, просто вводя в командной строке имя приложения, например msaccess или winword. Займемся обеспечением возможности запуска приложения таким ускоренным способом.
Чтобы зарегистрировать приложение для быстрого запуска, можно поместить его путь в ветвь реестра SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths корневого раздела HKEY_CURRENT_USER ИЛИ HKEY_LOCAL_MACHINE. Путь ЕХЕ-файла приложения должен быть записан в параметр (По умолчанию) подраздела, имеющего такое же имя, как и ЕХЕ-файл приложения (включая расширение).
Пример процедуры, регистрирующей приложение для быстрого запуска, приведен в листинге 7.18.
...
Листинг 7.18.
Регистрация приложения для запуска из командной строки
procedure RegisterQuickStart();
var
reg: TRegistry;
begin
reg := TRegistry.Create();
reg.RootKey := HKEY_LOCAL_MACHINE;
//Регистрируем программу для запуска по имени из
//командной строки
if reg.OpenKey(paths + \'\\' + Application.Title + \'.exe\', True)
then
begin
reg.WriteString(\'\', Application.ExeName);
reg.CloseKey();
end;
reg.Free();
end;
Для отмены быстрого запуска приложения из командной строки можно воспользоваться процедурой, приведенной в листинге 7.19.
...
Листинг 7.19.
Отмена быстрого запуска приложения
procedure UnregisterQuickStart();
var
reg: TRegistry;
begin
reg := TRegistry.Create();
reg.RootKey := HKEY_LOCAL_MACHINE;
//Удаляем сведения о программе из реестра
reg.DeleteKey(paths + \'\\' + Application.Title + \'.exe\');
reg.Free();
end;
В приведенных выше листингах значение константы paths равно:
...
const paths = \'SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\
Регистрация типов файлов
Теперь рассмотрим вопрос, нередко интересующий программистов, приложения которых должны уметь сохранять и загружать данные из файлов. Логично задавать всем таким файлам одно расширение: получается тип файлов приложения.
Открытие файлов (документов) приложения из самого приложения организовать несложно: достаточно применить диалог открытия файла. Но как заставить, например, Проводник автоматически запускать наше приложение при выборе соответствующего файла? Сделать это тоже несложно: достаточно внести небольшие изменения в раздел реестра HKEY_CLASSES_ROOT.
Итак, перечень операций, которые нужно произвести для регистрации собственного типа файла (пусть, MYDOC).
1. Создать раздел HKEY_CLASSES_ROOT\.mydoc, в параметр (По умолчанию) которого записать имя типа файла, например TricksDelphi. DocumentSample.
2. Создать раздел HKEY_CLASSES_ROOT\, например HKEY_CLASSES_ ROOT\TricksDelphi. DocumentSample. Если в параметр (По умолчанию) этого раздела записать строку, то она будет отображаться в качестве описания типа файла.
3. Если нужно, чтобы для документа использовался определенный значок, необходимо создать раздел HKEY_CLASSES_ROOT\\DefaultIcon, в параметр (По умолчанию) которого записать полный путь ЕХЕ-или DLL-файла, из которого брать значок, и через запятую – номер значка (см. гл. 4).
4. Наконец, для автоматического запуска приложения при выборе файла заданного типа создаем paздeлHKEY_CLASSES_ROOT\<имя_типa>\Shell \Open\Command, в параметр (По умолчанию) которого записываем строку вида <путь_приложения> %1 для передачи имени документа в командной строке.
Пример процедуры, которая производит все вышеперечисленные манипуляции, приводится в листинге 7.20.
...
Листинг 7.20.
Регистрация типа файла
procedure RegisterAppDocuments();
var
reg: TRegistry;
begin
reg := TRegistry.Create();
reg.RootKey := HKEY_CLASSES_ROOT;
//Вносим информацию о нашем типе файла в реестр
//..само расширение
if reg.OpenKey(\'.mydoc\', True) then
begin
reg.WriteString(\'\', \'TricksDelphi.DocumentSample\');
reg.CloseKey();
end;
//..описание типа файла
if reg.OpenKey(\'TricksDelphi.DocumentSample\', True) then