Регистрация приложения для запуска из командной строки
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
begin
reg.WriteString(\'\', \'Документ TricksDelphi.DocumentSample\');
reg.CloseKey();
end;
//..значок для файлов MYDOC-типа
if reg.OpenKey(\'TricksDelphi.DocumentSample\DefaultIcon\', True)
then
begin
reg.WriteString(\'\', Application.ExeName + \', 1\');
reg.CloseKey();
end;
//..приложение, открывающее MYDOC-документ
if reg.OpenKey(\'TricksDelphi.DocumentSample\Shell\Open\Command\',
True)
then
begin
reg.WriteString(\'\', Application.ExeName + \' %1\');
reg.CloseKey();
end;
reg.Free();
end;
Результат работы этой процедуры показан на рис. 7.10.
Рис. 7.10. Результат регистрации типа файла
Теперь при выборе в файловой оболочке наше приложение запускается с путем выбранного файла (правда, в формате 8.3) в качестве аргумента командной строки. Как перевести путь из короткой формы в длинную (если это вообще надо), рассказано в разд. 4.2. Если вы не знакомы с тем, как получать доступ к аргументам командной строки, можете взглянуть на листинг 7.21 (тут происходит отображение имени открываемого файла в текстовом поле на форме).
...
Листинг 7.21.
Определение имени открываемого файла
procedure TForm1.FormCreate(Sender: TObject);
begin
if ParamCount() > 0 then
begin
//Обрабатываем данные командной строки…
txtDoc.Text := \'Имя открываемого файла: \' + ParamStr(1);
Читать дальше
Конец ознакомительного отрывка
Купить книгу