Карта сайтаСсылкиКонтакты

Как сопоставить расширение файла с приложением

PDF Печать
Статьи
Работа в Delphi с реестром Windows

При создании приложений, часто бывает необходимо, чтобы информация хранилась в виде файла на жестком диске. Вы можете создать свое собственное расширение файла, а затем связать это расширение с приложением через Windows.

В принципе, Вам нужно добавить два ключа в реестр Windows в раздел HKEY_CLASSES_ROOT. Допустим, Ваше расширение .ext, то вначале нужно добавить ключ:


HKEY_CLASSES_ROOT\.ext\

Затем установить строковое значение ключа default, которое будет соответствовать внутреннему имени Вашего приложения, например, MyApp.Document.


HKEY_CLASSES_ROOT\.ext\Default = "MyApp.Document"

Затем, нужно создать еще один ключ с таким именем:


HKEY_CLASSES_ROOT\MyApp.Document\

Создайте подключ по имени shell, затем, у него под-ключ open, а у него, в свою очередь, под-ключ command. В нем установить значение по умолчанию, которое будет строковым значением и будет путь к Вашему приложению, а затем через пробел дописать %1, что в параметрах Windows представляет собой имя файла, который будет передан в приложение.


HKEY_CLASSES_ROOT\MyApp.Document\
        shell\open\command\Default = 
        "C:\myapp\myapp.exe %1"

Все это можно сделать в коде приложения, используя объект TRegistry или использовать InstallShield, который сделает все изменения в реестре.

Вот пример, как можно зарегистрировать свой тип файла.


uses registry, shlobj;

 procedure RegisterFileType(ExtName:String; AppName:String) ;
 var
    reg:TRegistry;
 begin
   reg := TRegistry.Create;
   try
    reg.RootKey:=HKEY_CLASSES_ROOT;
    reg.OpenKey('.' + ExtName, True) ;
    reg.WriteString('', ExtName + 'file') ;
    reg.CloseKey;
    reg.CreateKey(ExtName + 'file') ;
    reg.OpenKey(ExtName + 'file\DefaultIcon', True) ;
    reg.WriteString('', AppName + ',0') ;
    reg.CloseKey;
    reg.OpenKey(ExtName + 'file\shell\open\command', True) ;
    reg.WriteString('',AppName+' "%1"') ;
    reg.CloseKey;
   finally
    reg.Free;
   end

   SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil) ;
 end;


 procedure TForm1.Button1Click(Sender: TObject) ;
 begin
    RegisterFileType('adp','c:\myadpapp.exe') ;
 end;

 

Добавить комментарий


Защитный код
Обновить