转贴:来自hubdog的葵花宝典version 2.7
uses Registry, ShlObj;
procedure TForm1.Button1Click(Sender: TObject);
const
cMyExt = '.abc';
cMyFileType = 'Project1.FileType';
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
// Set the root key to HKEY_CLASSES_ROOT
Reg.RootKey := HKEY_CLASSES_ROOT;
// Now open the key, with the possibility to create
// the key if it doesn't exist.
Reg.OpenKey(cMyExt, True);
// Write my file type to it.
// This adds HKEY_CLASSES_ROOT/.abc/(Default) = 'Project1.FileType'
Reg.WriteString('', cMyFileType);
Reg.CloseKey;
// Now create an association for that file type
Reg.OpenKey(cMyFileType, True);
// This adds HKEY_CLASSES_ROOT/Project1.FileType/(Default)
// = 'Project1 File'
// This is what you see in the file type description for
// the a file's properties.
Reg.WriteString('', 'Project1 File');
Reg.CloseKey;
// Now write the default icon for my file type
// This adds HKEY_CLASSES_ROOT/Project1.FileType/DefaultIcon
// /(Default) = 'Application Dir/Project1.exe,0'
Reg.OpenKey(cMyFileType + '/DefaultIcon', True);
Reg.WriteString('', Application.ExeName + ',0');
Reg.CloseKey;
// Now write the open action in explorer
Reg.OpenKey(cMyFileType + '/Shell/Open', True);
Reg.WriteString('', '&Open');
Reg.CloseKey;
// Write what application to open it with
// This adds HKEY_CLASSES_ROOT/Project1.FileType/Shell/Open/Command
// (Default) = '"Application Dir/Project1.exe" "%1"'
// Your application must scan the command line parameters
// to see what file was passed to it.
Reg.OpenKey(cMyFileType + '/Shell/Open/Command', True);
Reg.WriteString('', '"' + Application.ExeName + '" "%1"');
Reg.CloseKey;
// Finally, we want the Windows Explorer to realize we added
// our file type by using the SHChangeNotify API.
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
finally
Reg.Free;
end;
end;
/////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);
var
R : TRegIniFile;
begin
R := TRegIniFile.Create('');
with R do begin
RootKey := HKEY_CLASSES_ROOT;
WriteString('.myext','','MyExt');
WriteString('MyExt','','Some description of MyExt files');
WriteString('MyExt/DefaultIcon','','C:/MyApp.Exe,0');
WriteString('MyExt/Shell','','This_Is_Our_Default_Action');
WriteString('MyExt/Shell/First_Action','','This is our first action');
WriteString('MyExt/Shell/First_Action/command','',
'C:/MyApp.Exe /LotsOfParamaters %1');
WriteString('MyExt/Shell/This_Is_Our_Default_Action','',
'This is our default action');
WriteString('MyExt/Shell/This_Is_Our_Default_Action/command',
'','C:/MyApp.Exe %1');
WriteString('MyExt/Shell/Second_Action','','This is our second action');
WriteString('MyExt/Shell/Second_Action/command',
'','C:/MyApp.Exe /TonsOfParameters %1');
Free;
end;
end;