XP 之后, Delphi 动注册表不方便了...逼出来一个办法:    


手头的程序需要修改注册表, 以让当前程序成为某格式的默认打开程序并关联图标; Vista 之后需要管理员权限才能操作注册表, 很麻烦, 所以有了下面的尝试.



unit Unit1;interfaceuses  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, 要打开的文件的后缀是 .tstend;end.


©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. php之函数,匿名函数与回调函数
  2. C++(template模板 && 函数模板)
  3. 读深度学习《深度学习简介》
  4. [转载] 王垠: 如何掌握所有的程序语言
  5. 深入理解计算机系统(1.1)------Hello World 是如何运行的
  6. Laravel 添加自定义函数
  7. 文件下载函数
  8. 【php基础入门】细说php的变量以及常量的知识点详解
  9. 酱茄教你怎么用H5链接打开微信小程序

随机推荐

  1. Android调用拨号程序,短信发送
  2. Android NDK各版本下载
  3. android源码分享
  4. android 屏幕自适应
  5. FFmpeg交叉编译
  6. android基础(对话框风格Activity实现)
  7. android LinearLayout 垂直滚动
  8. Android 清除默认launcher 改为其他的lau
  9. 3G调试笔记之发送AT命令和APN配置
  10. Android studio attribute android:fillC