uses
SysUtils, ShlObj, ActiveX, ComObj;
function CreateShortCut(const Location: String;
const ShortcutName: String;
const FullPathname: String;
const Params: String;
const WorkingDir: String;
const Description: String): Boolean;
var
Unknown: IUnknown;
ShellLink: IShellLink;
PersistFile: IPersistFile;
{$IFDEF Unicode}
FileName: String;
{$ELSE}
FileName: WideString;
{$ENDIF}
begin
{ Create shell link object }
Unknown := CreateComObject(CLSID_ShellLink);
{ Get IShellLink/IPersistent inferface }
ShellLink := Unknown as IShellLink;
PersistFile := Unknown as IPersistFile;
{ Set path to shell link }
ShellLink.SetPath(PChar(FullPathname));
{ Set arguments to shell link }
ShellLink.SetArguments(PChar(Params));
{ Set description string }
ShellLink.SetDescription(PChar(Description));
{ Set working directory }
ShellLink.SetWorkingDirectory(PChar(WorkingDir));
{ Set location (path and index) of the icon }
ShellLink.SetIconLocation(PChar(FullPathname),0);
{ Save to file }
FileName := IncludeTrailingPathDelimiter(Location) +
ShortcutName + '.LNK';
{$IFDEF Unicode}
Result := Succeeded(PersistFile.Save(PChar(FileName),True));
{$ELSE}
Result := Succeeded(PersistFile.Save(PWChar(FileName),True));
{$ENDIF}
end;
元ねたは現Embarcadero Technologies社員でローカライズ担当の新井さんのDelphiの神託 DelphiによるCOMの徹底活用 シェルプログラミング入門(新井 正広著/ソフトバンク/ISBN4-7973-0782-X)。出版当時新井さんはまだ学生さんだった気がします。2008/07/30追記: Windowsが管理している場所(スタートメニューなど)にショートカットを作成したときは
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);
を行わないと次回起動時まで表示に反映されない、という点に注意してください。
0 件のコメント:
コメントを投稿