程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi實現文件關聯

用Delphi實現文件關聯

編輯:Delphi
  文件關聯為我們帶來很多的方便。Delphi自帶有注冊表對象TRegistry,可以通過它取得或改變注冊表相關鍵值的內容。

  Function GetAssociatedExec(FileExt: String; var FileDescription, MIMEType: String): String;

  Var Reg: TRegistry; FileType: String;

  begin

   Result := ′′;{函數返回值是打開FileExt文件的可執行程序的名字及其參數}

   Reg := TRegistry.Create;{創建注冊表對象的實例}

   try

    Reg.RootKey := HKey—Classes—Root;{准備操作的注冊表根鍵}

    if not Reg.OpenKey(FileExt, False) then Exit;{當傳入的文件類型在注冊表中不存在時退出,False表示FileExt鍵值不存在時不自動創建新鍵}

    FileType := Reg.ReadString(′′);{文件類型的簡單描述}

    MIMEType := Reg.ReadString(′Content Type′);{內容MIME類型}

    Reg.CloseKey;{關閉當前關鍵字}

    if (FileType = ′′) or (not Reg.OpenKey(FileType, False)) then Exit;

    FileDescription := Reg.ReadString(′′);{內容類型的具體描述}

    if not Reg.OpenKey(′shell\open\command′, False) then Exit;{該鍵值保存由哪個程序、以什麼參數打開FileExt類型的文件}

    Result := Reg.ReadString(′′);{讀取該鍵值內容}

    Reg.CloseKey; finally

    Reg.Free;{釋放對象實例}

   end; end;

  由上面的例程可知,首先在HKey—Classes—Root尋找與FileExt(文件後綴,帶“.”)相匹配的主鍵,然後從“默認” 鍵名取得鍵值,然後以該鍵值作為主鍵取得FileExt的具體描述。在其子鍵shell\open\command中保存了由哪個程序、以什麼參數打開FileExt類型的文件的信息,只要修改它的內容,就可以控制由哪個程序打開FileExt類型的文件。

  既然知道了文件關聯在注冊表中是如何定義的,只要反其道而行,就可以正確改變文件的關聯了。

  function SetAssociatedExec(FileExt, Filetype, FileDescription,MIMEType,ExecName: String): Boolean;{修改成功,返回True,否則False}

  var Reg: TRegistry;

  begin

   Result := False;{}

   if (FileExt = ′′) or (ExecName = ′′) then Exit;{如果文件類型為空或者沒有定義執行程序就退出,FileExt必須帶″.″,如.BMP}

   Reg := TRegistry.Create;

   try

  Reg.RootKey := HKey—Classes—Root;

  if not Reg.OpenKey(FileExt, True) then Exit;{當不能正確找到或創建FileExt鍵時退出,這種情況一般是注冊表有錯誤,以下同}

  Reg.WriteString(′′, FileType);

  if MIMEType <> ′′ then Reg.WriteString(′Content Type′, MIMEType);

  Reg.CloseKey;

  if not Reg.OpenKey(FileType, True) then Exit;

  Reg.WriteString(′′, FileDescription);

  if not Reg.OpenKey(′shell\open\command′, True) then Exit;

  Reg.WriteString(′′, ExecName);{執行程序一般都有參數,例如WinZip的“winzip32.exe ″%1″”,″%1″參數指ZIP文件的文件名。因此ExecName應視情況加入參數}

  Reg.CloseKey;

   finally Reg.Free; end;

  end;

  寫與讀是一個性質相同、方向相反的過程,因此在SetAssociatedExec函數沒有過多的說明,可以參考GetAssociatedExec函數。至於TRegistry的使用,限於篇幅,本文從略。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved