Если вы хотите зарегистрировать ассоциацию для каждого пользователя, запишите свои данные в
HKEY_LOCAL_MACHINE\Software\Classes
Если вы хотите зарегистрировать ассоциацию только для текущего пользователя, запишите свои данные в
HKEY_CURRENT_USER\Software\Classes
Вот как это сделать:
with TRegistry.Create do
try
RootKey := HKEY_CURRENT_USER;
if OpenKey('\Software\Classes\.myfile', true) then
WriteString('', 'MyAppDataFile');
if OpenKey('\Software\Classes\MyAppDataFile', true) then
WriteString('', 'My Very Own Text File Type');
if OpenKey('\Software\Classes\MyAppDataFile\DefaultIcon', true) then
WriteString('', 'C:\WINDOWS\notepad.exe');
if OpenKey('\Software\Classes\MyAppDataFile\shell\open\command', true) then
WriteString('', 'C:\WINDOWS\notepad.exe "%1"');
finally
Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
Это свяжет файлы .myfile, называемые «Мой очень собственный тип текстового файла», так что они будут иметь значок notepad.exe и будутоткрыл notepad.exe.Последняя строка указывает Explorer «перезагрузить» себя, чтобы отразить изменения, внесенные в ассоциации файлов.Например, представления списка файлов Explorer будут обновлены.Функция WinAPI SHChangeNotify
объявлена в ShlObj.pas
, поэтому вам нужно uses ShlObj
.
Обратите внимание, что %1
в shell\open\command
развернется до текущего файла.Например, если вы дважды щелкните по C:\some dir\test.myfile
, то Explorer выполнит команду
C:\WINDOWS\notepad.exe "C:\some dir\test.myfile"