首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 將程式加入右鍵選單:註冊表操作實現「右鍵任來去」

     編輯:Delphi

前言

開發小工具(如「大檔案切割機」)後,若能整合至 Windows 檔案總管右鍵選單,使用者即可對任意檔案右鍵直接啟動工具,極大提升便利性。本文示範如何透過登錄表 HKEY_CLASSES_ROOT 實現「右鍵呼之即來,揮之即去」。

核心原理

在 HKEY_CLASSES_ROOT\*\shell\YourCommand 建立鍵值:

  • 預設值 = 選單顯示文字(含 & 指定熱鍵)。
  • 子鍵 command 預設值 = 執行命令(含 %1 代表被右鍵點選的檔案完整路徑)。

新增右鍵選單項目

uses Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;

    { 建立主鍵:\*\shell\cutbig }
    if Reg.OpenKey('\*\shell\cutbig', True) then
    begin
      Reg.WriteString('', '切割與組裝(&K)');  { 選單文字 }
      Reg.CloseKey;
    end;

    { 建立命令子鍵:\*\shell\cutbig\command }
    if Reg.OpenKey('\*\shell\cutbig\command', True) then
    begin
      { %1 會被檔案總管替換為實際檔案路徑 }
      Reg.WriteString('', 'C:\Delphi\MyProgram.exe "%1"');
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;

移除右鍵選單項目

procedure TForm1.Button2Click(Sender: TObject);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    { DeleteKey 會遞刪除子鍵,若鍵不存在不會報錯 }
    Reg.DeleteKey('\*\shell\cutbig');
  finally
    Reg.Free;
  end;
end;

進階:針對特定副檔名

若僅針對 .txt、.jpg 等特定類型:

Reg.RootKey := HKEY_CLASSES_ROOT;
if Reg.OpenKey('.txt\shell\cutbig', True) then ...  { 僅 txt 檔出現 }
if Reg.OpenKey('SystemFileAssociations\.jpg\shell\cutbig', True) then ...  { Win7+ 建議方式 }

注意事項

  • 管理員權限:寫入 HKEY_CLASSES_ROOT 需管理員權限,建議在安裝程式(Inno Setup/NSIS)或應用程式 Manifest 中宣告 requireAdministrator。
  • 路徑含空白:執行檔路徑若含空白,命令字串需雙引號包裹:"C:\My Tools\Cut.exe" "%1"。
  • 多檔案選取:使用者以 Shift/Ctrl 多選檔案右鍵時,系統會對每個檔案分別啟動一個程式實例。若需單實例處理多檔,需自行實作單一實例協議(如 Mutex + WM_COPYDATA)。
  • UAC 虛擬化:Vista+ 系統若無管理員權限,寫入會被重導向至 HKEY_CURRENT_USER\Software\Classes\VirtualStore,導致右鍵選單不顯示。

現代替代方案:Shell Extension (IContextMenu)

登錄表方式屬「舊式關聯」,功能受限。專業級整合請開發 COM Shell Extension(實作 IContextMenu/IShellExtInit),可動態決定選單項目、圖示、狀態,支援多檔拖放、子選單等豐富互動。Delphi 可使用 TShellFolder、TShellContextMenu 或第三方庫(如 ShellExtensions)快速開發。

結語

幾行登錄表代碼即可讓你的 Delphi 小工具融入 Windows 檔案操作流程,是提升軟體專業度與使用者黏著度的高 CP 值技巧。掌握 TRegistry 操作,也為日後開發安裝程式、系統工具奠定基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved