Ассоциация файлов
Я, уже в который встречаю вопрос о том, как ассоциировать расширение файла со своей программой.
То есть, как заставить запускаться свою программу и открывать файл определенного расширения.
Начну с того, что это можно сделать тремя различными способами:
1. Самый простой способ: В проводнике выбрать и выделить некоторый файл. Затем, предварительно
зажав клавишу Shift, кликнуть правой кнопкой мыши и выбрать пункт контекстного меню "Открыть с помощью...",
а далее просто выбрать программу из предложенного списка или указать свою.
2. Самый не хороший способ: Зайти в редактор реестра и выбрать "улей"
HKEY_CLASSES_ROOT. В этом "улье" найти интересующее вас расширения файла и просто его
удалить. Далее так же через проводник попытаться открыть файла, с только что удаленным из реестра
расширением. На экране точно так же появиться окно "Открыть с помощью...", в котором выбирается
программа из предложенного списка или указываем свою.
3. Программный способ: А здесь я сам провел небольшой анализ реестра
и понял принцип ассоциации файлов в Windows. Все в том же "улье" HKEY_CLASSES_ROOT располагаются
все расширения файлов, известные системе. Если выбрать некоторое расширение, например, *.ttf,
то в правой части редактора реестра можно увидеть значение по умолчанию, то есть в данном случае
ttffile. Далее если перейти к разделу ttffile, то он представляет собой следующую
структуру: ttffile -> Shell -> Open -> Command, где как раз и указан путь к программе,
которая и будет открыть все файлы с расширением *.ttf. После этого я решил сам программно
зарегистрировать новое расширение в системе, и закрепить за ним свою, ранее написанную программу.
И вот что у меня получилось.
procedure TForm1.Button1Click(Sender: TObject);
Var Reg : TRegistry;
begin
Reg:=TRegIniFile.Create;
Reg.RootKey:=HKEY_CLASSES_ROOT; // Открываем нужный "улей" системного реестра
// Создаем новое расширение .ttt
If NOT Reg.KeyExists('.ttt') Then Reg.CreateKey('.ttt');
If Reg.OpenKey('.ttt', False) Then
Begin
Reg.WriteString('', 'ttt_text_file');
Reg.CloseKey;
End;
// Cоздаем значение по умолчанию ttt_text_file
If NOT Reg.KeyExists('ttt_text_file') Then
Begin
Reg.CreateKey('ttt_text_file');
If Reg.OpenKey('ttt_text_file', False)
Then Reg.WriteString('', 'Файл TTT');
Reg.CloseKey;
End;
// Cоздаем значение ttt_text_file\shell
If NOT Reg.KeyExists('ttt_text_file\shell') Then
Begin
Reg.CreateKey('ttt_text_file\shell');
Reg.CloseKey;
End;
// Cоздаем значение ttt_text_file\shell\open
If NOT Reg.KeyExists('ttt_text_file\shell\open') Then
Begin
Reg.CreateKey('ttt_text_file\shell\open');
If Reg.OpenKey('ttt_text_file\shell\open', False)
Then Reg.WriteString('', '');
Reg.CloseKey;
End;
// Cоздаем значение ttt_text_file\shell\open\command
If NOT Reg.KeyExists('ttt_text_file\shell\open\command') Then
Begin
Reg.CreateKey('ttt_text_file\shell\open\command');
If Reg.OpenKey('ttt_text_file\shell\open\command', False)
// Указываем нашу программу
Then Reg.WriteString('', Application.ExeName + ' "%1"');
Reg.CloseKey;
End;
Reg.Free;
end;
|
А при запуске программы мы просто будем загружать содержимое файла в редактор TMemo. Но перед
этим узнаем полное имя файла и путь к нему.
procedure TForm1.FormCreate(Sender: TObject);
Var I : Integer;
NameFile : String;
begin
Try
// Получаем полное имя файла и загружаем его в редактор
If ParamCount > 0 Then
For I:=1 To ParamCount Do NameFile:=ParamStr(I);
If NameFile <> '' Then Memo1.Lines.LoadFromFile(NameFile);
Except
ShowMessage('Ошибка загрузки файла !');
End;
end;
|
Вернуться в оглавление
Вернуться на главную страницу
|