文件关联

注意:这段代码并不能绕过UAC,测试下来依然会有提示

uses System.IOUtils, Winapi.ShellAPI, Winapi.ShlObj; //RegApp 函数用到的单元

//关联默认程序的函数
procedure RegApp(const aExt, aAppName, aAppPath: string);
const
  nRegFmt = ‘Windows Registry Editor Version 5.00‘        + sLineBreak +
            ‘[HKEY_CLASSES_ROOT\%0:s]‘                    + sLineBreak +
            ‘@="%1:s"‘                                    + sLineBreak +
            ‘[HKEY_CLASSES_ROOT\%1:s\DefaultIcon]‘        + sLineBreak +
            ‘@="%2:s,0"‘                                  + sLineBreak +
            ‘[HKEY_CLASSES_ROOT\%1:s\shell]‘              + sLineBreak +
            ‘[HKEY_CLASSES_ROOT\%1:s\shell\open]‘         + sLineBreak +
            ‘[HKEY_CLASSES_ROOT\%1:s\shell\open\command]‘ + sLineBreak +
            ‘@="%3:s"‘;
var
  RegStr:string;
  str3,str4:string;
  RegTmpFile:string;
begin
  str3:=StringReplace(aAppPath,‘\‘, ‘\\‘,[rfReplaceAll]);
  str4:=StringReplace( Format(‘"%s" "%%1"‘, [str3]) ,‘"‘, ‘\"‘,[rfReplaceAll] );
  RegStr:=Format(nRegFmt,[aExt,aAppName,str3,str4]);
  RegTmpFile := TPath.GetTempPath + ‘RegTmp.reg‘;
  with TStringList.Create do  begin
    Text := RegStr;
    SaveToFile(RegTmpFile);
    Free;
  end;
  ShellExecute(0, nil, PChar(RegTmpFile), nil, nil, SW_SHOWNORMAL);
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); //刷新图标显示
end;

//执行注册函数; 执行后, 可随便修改一个文本文件的后缀为 tst, 然后双击测试
procedure TForm1.Button1Click(Sender: TObject);
begin
RegApp(‘.tst‘, ‘MyApp1‘, Application.ExeName); //假定程序名称是 MyApp1, 要打开的文件的后缀是 .tst
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  S: string;
begin
  S := ParamStr(1);
  if FileExists(S) then Memo1.Lines.LoadFromFile(S);
end;
时间: 2024-11-12 12:40:45

文件关联的相关文章

FilesTypeMan | 文件关联管理

分类: 系统增强    版本: 0.0.1    发布日期: 2015-06-17 编辑系统文件关联设置. 功能简介 添加.修改.删除系统文件关联设置 [当前用户].[所有用户]的文件关联设置独立设置,增加灵活性 提供备份.还原功能,避免误操作 支持自定义关联图标和关联程序 支持多种命令的编辑.删除和添加操作 下载 下载地址1    下载地址2(提取码: eba9)

VC++6.0文件关联问题的解决方法

最近我的电脑*.c文件关联失败,无法实现双击*.c打开vc++6.0,感觉特别不爽. 在经过自己的琢磨研究后,终于找到了解决方法. 特此分享下,希望可以帮到遇到同样问题的你. 核心内容: 1.&Open with MSDEV2."D:\Program Files\vc++6.0\Microsoft Visual Studio\Common\MSDev98\Bin\msdev.exe" "%1"3.Open("%1")4.msdev 按照下

文件关联修复方法

文件关联乱了的话会导致.exe文件打不开,导致系统无法正常运转,今天发一下修复工具 如果.scr打不开,试试把 .scr改成 .pif 吧. http://pan.baidu.com/s/1pLjefxT

用Delphi实现文件关联

文件关联为我们带来很多的方便.Delphi自带有注册表对象TRegistry,可以通过它取得或改变注册表相关键值的内容. Function GetAssociatedExec(FileExt: String; var FileDescription, MIMEType: String): String; Var Reg: TRegistry; FileType: String; begin Result := ′′;{函数返回值是打开FileExt文件的可执行程序的名字及其参数} Reg :=

(vc)注册文件关联

昨天工作中用到了文件关联,查阅了一些网上的资料,经过整理写下了下面的代码并验证通过,现记录下面,以备以后查阅. /***************************************************** 检测文件关联情况* strExt: 要检测的扩展名(例如: ".txt")* strAppKey: ExeName扩展名在注册表中的键值(例如: "txtfile")* 返回TRUE: 表示已关联,FALSE: 表示未关联 ************

c# WinForm软件启动拦截(通过更改文件关联实现)

前几天想做一个软件启动之前拦截的程序,找了下网上的资料没有找到合适的,突然看到电脑软件某看图软件,找到个思路就是跟他一样的,通过修改文件关联进行启动拦截. 原理是这样的,更改.exe默认的启动方式为我们的程序,也就是你运行程序是先进入我们的程序的,然后我们就可以对这个即将启动的软件进行审核,是否允许他运行. 然后软件的启动步骤会变成如下:运行电脑软件>启动我们的程序>程序判断审核是否允许启动>允许的话修改文件关联为系统默认的启动方式>启动该软件>重新修改文件关联为我们的程序&

Delphi实现文件关联

文件关联为我们带来很多的方便.Delphi自带有注册表对象TRegistry,可以通过它取得或改变注册表相关键值的内容. Function GetAssociatedExec(FileExt: String; var FileDescription, MIMEType: String): String; Var Reg: TRegistry; FileType: String; begin Result := ′′;{函数返回值是打开FileExt文件的可执行程序的名字及其参数} Reg :=

windows文件关联、打开方式列表之修改注册表攻略

这里全是修改注册表的方式.网上找了半天,有的仅有添加文件关联的方法,却没有添加到打开方式列表里面的方法:有的有添加到文件列表的方法,却是使 用控制面板->文件夹选项的.好难得才找齐所有,从添加文件关联,到删除文件关联, 全手动修改注册表完成,适用于编程操作注册表实现. 添加文件关联:(演示添加一个*.lfw格式文件关联) 在HKEY_CLASSES_ROOT键增加项“.lfw” 设置“.lfw”项的默认值为“lfwfile”(名字可以任取) 在HKEY_CLASSES_ROOT下增加项“lfwf

C#实现与文件关联后使刷新图标立即生效的方法

C#实现与文件关联后使刷新图标立即生效的方法,分享给大家. 首先要说明,这可不是重启explorer.exe资源管理器. 一段代码搞定: SHChangeNotify(0x8000000, 0, IntPtr.Zero, IntPtr.Zero); [DllImport("shell32.dll")] public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr d

如何优雅地使用命令行设置windows文件关联

如何优雅地使用命令行设置windows文件关联 使用ftype查看帮助 设置关联所需命令有ftype assoc,需要管理员权限.如果忘记使用方法可通过ftype的帮助获取查看方法 C:\WINDOWS\system32>ftype /? 显示或修改用在文件扩展名关联中的文件类型 FTYPE [fileType[=[openCommandString]]] fileType 指定要检查或改变的文件类型 openCommandString 指定调用这类文件时要使用的开放式命令. 键入 FTYPE