Jak utworzyć skrót do programu na pulpicie lub w menu start

Adam Boduch

Funkcja często przydatna w instalatorach, które muszą utworzyć skrót do instalowanego programu na pulpicie lub np. w menu start. Taka opcja może być również wykorzystywana jako opcja dowolnego programu.

Należy zaznaczyć, że poniższe rozwiązanie nie zadziała w Delphi 2. Poniższy przykład prezentuje tworzenie skrótu do Notatnika na pulpicie oraz w menu start:

uses  ShlObj, ActiveX, ComObj, Registry;

procedure TForm1.Button1Click(Sender: TObject);
var  
  MyObject : IUnknown;
  MySLink : IShellLink; 
  MyPFile : IPersistFile;  
  FileName : String;
  Directory : String;  
  WFileName : WideString;  
  MyReg : TRegIniFile;
begin
  MyObject := CreateComObject(CLSID_ShellLink);
  MySLink := MyObject as IShellLink;  
  MyPFile := MyObject as IPersistFile;
  FileName := 'NOTEPAD.EXE';  

  with MySLink do 
  begin
   SetArguments('C:\AUTOEXEC.BAT'); 
   SetPath(PChar(FileName));
   SetWorkingDirectory(PChar(ExtractFilePath(FileName)));  
  end;

  MyReg := TRegIniFile.Create('Software\MicroSoft\Windows\CurrentVersion\Explorer');

  // Poniższe dodaje skrót do desktopu
  Directory := MyReg.ReadString('Shell Folders', 'Desktop', '');
  WFileName := Directory + '\Notatnik.lnk';
  MyPFile.Save(PWChar(WFileName), False);

  // A to do menu Start
  Directory := MyReg.ReadString('Shell Folders', 'Start Menu' ,'') + '\Microspace';

  CreateDir(Directory);

  WFileName := Directory + '\Notatnik.lnk';  
  MyPFile.Save(PWChar(WFileName), False);
  MyReg.Free;
end;

6 komentarzy

Mam prostrze rozwiązanie. Napisałem moduł, dzięki któremu można w bardzo prosty sposób tworzyć skróty do plików (do katalogów pewnie też, ale nie sprawdzałem). Dwie przeciążone procedury obsługujące jedynie tworzenie skrótów bez parametrów, hotkey'ów itd.

Oto procedury:

procedure mkShellLink(FilePath: String; ShortcutPath: WideString); overload; stdcall;

ta procedura tworzy skrót w dowolnym miejscu na dysku, a jej parametrami są kompletna ścieżka do pliku, który będzie otwierany oraz kompletna ścieżka docelowa, w której zostanie owy skrót utworzony.

Przykład wywołania procedury:

mkShellLink('C:\Program Files\Program\App.exe', 'C:\Shortcut.lnk');

Druga procedura:

procedure mkShellLink(FilePath, ShortcutName: String; CSIDL_Folder: Byte); overload; stdcall;

ta procedura także tworzy skrót w dowolnym miejscu, jej parametrami są kompletna ścieżka do pliku, który będzie otwierany, nazwa skórtu oraz stała odpowiadająca specialnemu folderowi.

Przykład wywołania procedury:

mkShellLink('C:\Program Files\Program\App.exe', 'App.lnk', CSIDL_DESKTOP);

Procedura ta korzysta z SHGetSpecialFolderPath, tak że w miejsce trzeciego parametru można wpisywać wszystkie wartości odpowiadające stałym specialnych folderów. Nie trzeba deklarować modułu, dzięki któremu możliwe jest korzystanie z tych stałych, ponieważ stałe te są zadeklarowane w module. Jedyne co trzeba zrobić to dodać do listy modułów Shortcuts i wrzucić moduł Shortcuts.dcu do folderu Lib w głównym katalogu Delphi. Obie procedury działają w 100%.

Adres:
http://www.plikus.pl/zobacz_plik-Shortcuts-235057.html
Hasło:
www.4p.pl

Pozdrawiam.

Ciekawe jaki ma typ PFile?
Teraz jest problem bo młot (autor) nie zamieścił deklaracji tej zmiennej :P

Rady
Nie działa mi to co napisales na xp
wyskakuje mi blad przy PFile

Zwracam honor dziła gdy dodamy :
FileName := Kataloginstalacji+'program.exe';
// set the link properties
MySLink.SetPath (PChar (FileName));
MySLink.SetWorkingDirectory (PChar ( ExtractFilePath (FileName)));

WFileName := ExtractFilePath (FileName) +
'Securfile.lnk';
PFile.Save (PWChar (WFileName), False);
Reg := TRegIniFile.Create( 'Software\MicroSoft\Windows\CurrentVersion\Explorer');
WFileName := Reg.ReadString ('Shell Folders', 'Desktop', '') +
'\program.exe';
Reg.Free;
MyPFile.Save (PWChar (WFileName), False);

Po XP nie działa :(

Super! To mi się bardzo przyda do robienia własnego setupa ;)

Dzięki!