XP 之后, Delphi 动注册表不方便了...逼出来一个办法:
2021-04-29 23:43
1341 查看
XP 之后, Delphi 动注册表不方便了...逼出来一个办法:
手头的程序需要修改注册表, 以让当前程序成为某格式的默认打开程序并关联图标; Vista 之后需要管理员权限才能操作注册表, 很麻烦, 所以有了下面的尝试.
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} 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 := aAppPath.Replace('\', '\\'); str4 := Format('"%s" "%%1"', [str3]).Replace('"', '\"'); 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; procedure TForm1.FormCreate(Sender: TObject); var S: string; begin S := ParamStr(1); if FileExists(S) then Memo1.Lines.LoadFromFile(S); end; //执行注册函数; 执行后, 可随便修改一个文本文件的后缀为 tst, 然后双击测试 procedure TForm1.Button1Click(Sender: TObject); begin RegApp('.tst', 'MyApp1', Application.ExeName); //假定程序名称是 MyApp1, 要打开的文件的后缀是 .tst end; end.
相关文章推荐
- Delphi 正则表达式之TPerlRegEx 类的属性与方法(7): Split 函数
- Delphi中获取Unix时间戳(秒、毫秒)
- 论文学习心得 DELPHI: A Cryptographic Inference Service for Neural Networks
- Delphi编译工程包含自己的dcu库报错could not compile used unit ‘XLDCU’
- Delphi编译过程中报错Incompatible types: ´ pwideChar ´ and ´ pansiChar ´,类型不匹配
- 增强Delphi的TStatusBar控件
- delphi十六进制字符串hex转byte数组
- Delphi Byte与数据类型之间的转换
- Delphi的(xor)转成java(xor),以及加密解密
- RadStudio 10.3.3 Rio (Delphi & C++ Builder)及TMS TAdvStringGrid控件安装方法
- delphi 判断点在多边形内
- Delphi中如何调用VC++创建的动态链接库
- delphi 给字符指针分配内存
- Delphi10.3的DBGrid美化(03)
- Delphi实践
- Delphi Plugin Manager (插件框架)
- Delphi 本地路径的创建、清空本地指定文件夹下的文件
- TIOBE 3月榜单:Delphi终将没落?
- delphi 三个小数比较
- Delphi7 ActionManager