Как сопоставить расширение файла с приложением
В принципе, Вам нужно добавить два ключа в реестр 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;
Комментарии