procedure RegisterFileType(cMyExt, cMyFileType, cMyDescription, ExeName: string;
IcoIndex: integer;
DoUpdate: boolean = false);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(cMyExt, True);
//写入自定义文件后缀
Reg.WriteString('', cMyFileType);
Reg.CloseKey;
//写入自定义的文件类型
//格式为:HKEY_CLASSES_ROOT/cMyExt/(Default) = 'cMyFileType'
//下面为该文件类型创建关联
Reg.OpenKey(cMyFileType, True);
Reg.WriteString('', cMyDescription);
//写入文件类型的描述信息
Reg.CloseKey;
// 下面为自定义文件类型选择图标
// 加入键格式为 HKEY_CLASSES_ROOT/cMyFileType/DefaultIcon
///(Default) = 'Application Dir/Project1.exe,0'
Reg.OpenKey(cMyFileType + '/DefaultIcon', True);
Reg.WriteString('', ExeName + ',' + IntToStr(IcoIndex));
Reg.CloseKey;
// 下面注册在资源管理器中打开文件的程序
Reg.OpenKey(cMyFileType + '/Shell/Open', True);
Reg.WriteString('', 'Open');
Reg.CloseKey;
//格式:HKEY_CLASSES_ROOT/Project1.FileType/Shell/Open/Command
//(Default) = '"Application Dir/Project1.exe"
"%1"'
Reg.OpenKey(cMyFileType + '/Shell/Open/Command', True);
Reg.WriteString('', '"' + ExeName + '"
"%1"');
Reg.CloseKey;
//最后,让资源管理器实现我们加入的文件类型,只需调用SHChangeNotify即可
if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
finally
Reg.Free;
end;
end;
procedure RelationFile;
begin
RegisterFileType('.txt', '.txt', 'Txt 文件',
ExtractFilePath('你的软件.EXE', 0, true);
end;