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;
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)));
Po XP nie działa :(
Super! To mi się bardzo przyda do robienia własnego setupa ;)
Dzięki!