size : 1409
uploaded_on : Wed Oct 7 00:00:00 1998
modified_on : Wed Dec 8 14:03:13 1999
title : Desktop link
org_filename : DesktopLink.txt
author : Mario Mueller
authoremail : mario.mueller@online.de
description : How to create a link on the desktop
keywords :
tested : not tested yet
submitted_by : The CKB Crew
submitted_by_email : ckb@netalive.org
uploaded_by : nobody
modified_by : nobody
owner : nobody
lang : plain
file-type : text/plain
category : delphi-system32bit
__END_OF_HEADER__
> How can I create a link on the desktop to my program (application.exename)?
uses
ShlObj, ActiveX, ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
aObject : IUnknown;
aSLink : IShellLink;
aPFile : IPersistFile;
sDirectory : string;
wsFileName : WideString;
szWinDir : array[0..29] of char;
begin
FillChar(szWinDir, SizeOf(szWinDir), #0);
GetWindowsDirectory(szWinDir, SizeOf(szWinDir));
aObject := CreateComObject(CLSID_ShellLink);
aSLInk := aObject as IShellLink;
aPFile := aObject as IPersistFile;
with aSLink do
begin
SetPath(PChar(editProgramm.Text));
SetArguments(PCHar(editParameter.Text));
SetWorkingDirectory(szWinDir);
end;
sDirectory := GetShellFolderPath(CSIDL_DESKTOPDIRECTORY);
//sDirectory := GetShellFolderPath(CSIDL_STARTMENU);
Assert(sDirectory[Length(sDirectory)] <> '\', 'Backslash!');
wsFileName := sDirectory + '\' + editLink.Text;
aPFile.Save(PWChar(wsFileName), false);
end;
function TForm1.GetShellFolderPath(const aFolder : integer) : string;
var
pIIL : PItemIDList;
szPath : array[0..MAX_PATH] of char;
aMalloc : IMalloc;
begin
Result := '';
Assert(aFolder <= CSIDL_PRINTHOOD, 'Falsche ShellFolder-Konstante');
OleCheck(SHGetSpecialFolderLocation(0, aFolder, pIIL));
SHGetPathFromIDList(pIIL, szPath);
OleCheck(SHGetMalloc(aMalloc));
aMalloc.Free(pIIL);
Result := szPath;
end;