zoukankan      html  css  js  c++  java
  • 注册扩展名的默认执行程序

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

    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 FilesEmbarcaderoRAD Studio12.0Binds.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);
    const
      _BPath = 'SOFTWAREClasses';
    var
      nStr: string;
      nNeedUpdate: Boolean;
    begin
      with TRegistry.Create do
      try
        {这里注册的是当前用户
        如果想注册全用户, 需要用管理员身份运行, 并且写入HKEY_CLASSES_ROOT中, 同时_BPath = ''}
        RootKey := HKEY_CURRENT_USER;
    
        {自定义文件后缀}
        OpenKey(_BPath + AExt, True);
        WriteString('', AFileType);
        CloseKey;
    
        {自定义的文件类型
        格式:HKEY_CURRENT_USERSOFTWAREClasses<Ext>(Default) = <FileType>}
        OpenKey(_BPath + AFileType, True);
    
        {文件类型的描述信息}
        WriteString('', ADescription);
        CloseKey;
    
        {自定义文件类型选择图标
        格式: HKEY_CURRENT_USERSOFTWAREClasses<FileType>DefaultIcon(Default) = 'App DirApp.exe,0'}
        OpenKey(_BPath + AFileType + 'DefaultIcon', True);
        WriteString('', AExeName + ',' + IntToStr(AIcoIndex));
        CloseKey;
    
        {注册在资源管理器中打开文件的程序
        格式:HKEY_CURRENT_USERSOFTWAREClasses<FileType>ShellOpenCommand(Default) = '"App DirApp.exe" "%1"'}
        OpenKey(_BPath + AFileType + 'ShellOpen', True);
        WriteString('', '&Open');
        CloseKey;
        nNeedUpdate := False;
        OpenKey(_BPath + AFileType + 'ShellOpenCommand', 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;
  • 相关阅读:
    数组
    分支.顺序结构
    博客作业-查找
    DS博客作业-图
    DS 数据结构-树
    数据结构-栈,队列
    博客作业05-指针
    C语言博客作业04-数组
    C语言博客作业03——函数
    c语言博客作业02-循环结构
  • 原文地址:https://www.cnblogs.com/lzl_17948876/p/3929012.html
Copyright © 2011-2022 走看看