由於我們是通過OLE Interface實現此功能的,因此在程序單元的uses語句中要加入ComObj、ActiveX和ShlObj這三個單元。
在單元的聲明部分加入以下代碼:
其中,ProgramPath是快捷方式的目標文件的全路徑(包括文件名和路徑);
ProgramArg是目標文件的參數;LinkPath是快捷方式的全路徑;Descr是對此快捷方式的描述。
在單元的實現部分加入以下代碼:
procedure CreateLink(ProgramPath, ProgramArg, LinkPath, Descr: String);
var
AnObj: IUnknown;
ShellLink: IShellLink;
AFile: IPersistFile;
FileName: WideString;
begin
if UpperCase(ExtractFileExt(LinkPath)) 〈〉 ′.LNK′ then //檢查擴展名是否正確
begin
raise Exception.Create(′快捷方式的擴展名必須是 ′′LNK′′!′);/
/若不是則產生異常
end;
try
OleInitialize(nil);//初始化OLE庫,在使用OLE函數前必須調用初始化
AnObj := CreateComObject(CLSID—ShellLink);//根據給定的ClassID生成
一個COM對象,此處是快捷方式
ShellLink := AnObj as IShellLink;//強制轉換為快捷方式接口
AFile := AnObj as IPersistFile;//強制轉換為文件接口
//設置快捷方式屬性,此處只設置了幾個常用的屬性
ShellLink.SetPath(PChar(ProgramPath)); // 快捷方式的目標文件,一般
為可執行文件
ShellLink.SetArguments(PChar(ProgramArg));// 目標文件參數
ShellLink.SetWorkingDirectory(PChar(ExtractFilePath(ProgramPath)))
;//目標文件的工作目錄
ShellLink.SetDescription(PChar(Descr));// 對目標文件的描述
FileName := LinkPath;//把文件名轉換為WideString類型
AFile.Save(PWChar(FileName), False);//保存快捷方式
finally
OleUninitialize;//關閉OLE庫,此函數必須與OleInitialize成對調用
end;
end;
以上編寫了一個通用函數,下面我們用它來創建快捷方式。在窗體中放置一
個按鈕,雙擊按鈕寫入如下代碼即可:
procedure TForm1.Button1Click(Sender: TObject);
var
tmp: array [0..MAX—PATH] of Char;
WinDir: string;
begin
GetWindowsDirectory(tmp,MAX—PATH);
WinDir:=String(tmp);
if Length(WinDir) 〉 3 then
WinDir:=WinDir+′\′;//得到Windows的目錄
//在桌面上放置本程序的快捷方式
CreateLink(ParamStr(0),′′,WinDir+′desktop\′+Application.Tit
le+′.lnk′,′Application.Title′);
end;