首页 > 代码库 > 注册扩展名的默认执行程序

注册扩展名的默认执行程序

没啥可描述的.....就是一个注册扩展名的关联程序函数, 纯粹写注册表实现:

uses  System.Win.Registry, Winapi.ShlObj;/// <summary>///   注册文件类型及其默认执行程序/// </summary>/// <param name="AExt">///   扩展名, 比如: .pas/// </param>/// <param name="AFileType">///   文件类型, 比如: BDS.PasFile/// </param>/// <param name="ADescription">///   类型描述, 比如: Delphi Source File/// </param>/// <param name="AExeName">///   执行程序, 比如: "C:\Program Files\Embarcadero\RAD Studio\12.0\Bin\bds.exe"/// </param>/// <param name="AIcoIndex">///   图标标号, 文件关联的图标, 编号为执行程序图标资源编号/// </param>/// <param name="ADoUpdate">///   是否要求更新, 如果该值为True, 则每次注册时, 无论信息是否存在是否相同,///   都通知Windows资源管理器更新, 如果该值为False, 则每次注册时,///   只有执行程序不同时, 才会要求Windows资源管理器更新/// </param>procedure RegisterFileType(AExt, AFileType, ADescription, AExeName: string;  AIcoIndex: Integer = 0; ADoUpdate: Boolean = False);var  nStr: string;  nNeedUpdate: Boolean;begin  with TRegistry.Create do  try    RootKey := HKEY_CLASSES_ROOT;    {自定义文件后缀}    OpenKey(AExt, True);    WriteString(‘‘, AFileType);    CloseKey;    {自定义的文件类型    格式:HKEY_CLASSES_ROOT\<Ext>\(Default) = <FileType>}    OpenKey(AFileType, True);    {文件类型的描述信息}    WriteString(‘‘, ADescription);    CloseKey;    {自定义文件类型选择图标    格式: HKEY_CLASSES_ROOT\<FileType>\DefaultIcon\(Default) = ‘App Dir\App.exe,0‘}    OpenKey(AFileType + \DefaultIcon, True);    WriteString(‘‘, AExeName + , + IntToStr(AIcoIndex));    CloseKey;    {注册在资源管理器中打开文件的程序    格式:HKEY_CLASSES_ROOT\<FileType>\Shell\Open\Command\(Default) = ‘"App Dir\App.exe" "%1"‘}    OpenKey(AFileType + \Shell\Open, True);    WriteString(‘‘, &Open);    CloseKey;    nNeedUpdate := False;    OpenKey(AFileType + \Shell\Open\Command, True);    nStr := " + AExeName + " "%1";    {如果原来有默认程序, 则需要通知资源管理器更新}    nNeedUpdate := not SameText(nStr, ReadString(‘‘));    if nNeedUpdate then      WriteString(‘‘, nStr);    CloseKey;    {通知资源管理器注册文件类型关联,调用SHChangeNotify}    if ADoUpdate or nNeedUpdate then      SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);  finally    Free;  end;end;