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

Delphi 建立捷徑完整指南:IShellLink/IPersistFile 實現桌面/開始選單/快速啟動/發送到

     編輯:Delphi

核心 COM 介面

  • IShellLink:設定目標路徑、參數、描述、工作目錄、圖示。
  • IPersistFile:將捷徑持久化為 .lnk 檔案。

通用建立函數

uses ShlObj, ActiveX, ComObj, Registry;

type
  TShortcutLocation = (slDesktop, slSendTo, slQuickLaunch, slStartMenu);

procedure CreateShortcut(const FileName, Description, Arguments: string;
  Location: TShortcutLocation);
var
  unk: IUnknown; sl: IShellLink; pf: IPersistFile;
  dir, lnkName, wPath: WideString;
  reg: TRegistry; key, tmp: string;
begin
  unk := CreateComObject(CLSID_ShellLink);
  sl := unk as IShellLink;
  pf := unk as IPersistFile;

  with sl do begin
    SetPath(PChar(FileName));
    SetArguments(PChar(Arguments));
    SetDescription(PChar(Description));
    SetWorkingDirectory(PChar(ExtractFilePath(FileName)));
  end;

  // 讀取特殊資料夾路徑 (註冊表)
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CURRENT_USER;
    key := REGSTR_PATH_EXPLORER;  // 'Software\Microsoft\Windows\CurrentVersion\Explorer'
    tmp := key + '\Shell Folders';
    reg.OpenKey(tmp, False);
    case Location of
      slDesktop:      dir := reg.ReadString('Desktop');
      slSendTo:       dir := reg.ReadString('SendTo');
      slStartMenu:    dir := reg.ReadString('Start Menu');
      slQuickLaunch:  begin
                        dir := reg.ReadString('AppData');
                        dir := dir + '\Microsoft\Internet Explorer\Quick Launch';
                      end;
    end;
  finally reg.Free; end;

  if dir <> '' then begin
    lnkName := ChangeFileExt(ExtractFileName(FileName), '.lnk');
    wPath := dir + '\' + lnkName;
    pf.Save(PWChar(wPath), False);  // False = 不覆蓋唯讀
  end;
end;

使用範例

procedure TForm1.btnDesktopClick(Sender: TObject);
begin
  CreateShortcut(Application.ExeName, 'Delphi 建立的捷徑', '', slDesktop);
end;

procedure TForm1.btnQuickLaunchClick(Sender: TObject);
begin
  CreateShortcut(Application.ExeName, '快速啟動', '', slQuickLaunch);
end;

補充:網址捷徑 (.url)

procedure CreateInternetShortcut(const Name, URL: string);
var sl: IUniformResourceLocator; pf: IPersistFile; dir: string;
begin
  // 類似流程,使用 CLSID_InternetShortcut
  // 此處略,參考 MSDN IUniformResourceLocator
end;

注意事項

  • Vista+ 建議用 SHGetKnownFolderPath(FOLDERID_Desktop, ...) 替代註冊表讀取。
  • 需在專案 uses 引入 ComObj 確保 COM 單元初始化 (CoInitialize)。
  • 捷徑建立需寫入權限,受限環境可能失敗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved