Verknüpfung erstellen

Hallo!
Wie ist es möglich, aus einem Programm heraus automatisch eine Verknüpfung (z.B. auf den Desktop) zu erstellen und diese mit einem beliebigen Symbol zu versehen???
Danke!!!
Florian

Hallo!

Persönlich finde ich es geschickter, sowas das Installationsprogramm erledigen zu lassen. Trotzdem hier ein „wenig“ Code:

aus Simons Faq: www.pics-software.de

{$IFDEF VER90}
uses OLE2, ComObj, ShlObj;
{$ELSE}
uses ActiveX, ComObj, ShlObj;
{$ENDIF}

const
IID_IPersistFile : TGUID=(D1:blush:0000010B;D2:blush:0000;D3:blush:0000;D4:frowning:$C0,$00,$00,$00,$00,$00,$00,$46));

function SpecialDirectory(ID:integer):string;
var pidl : PItemIDList;
Path : PChar;
begin
if SUCCEEDED(SHGetSpecialFolderLocation(0,ID,pidl)) then begin
Path:=StrAlloc(max_path);
SHGetPathFromIDList(pidl,Path);
Result:=String(Path);
if Result[length(Result)]’’ then
Result:=Result+’’;
end;
end; {SpecialDirectory}

Function CreateFolder(Foldername:string):boolean;
begin
Result:=false;
SetLastError(0);
CreateDirectory(PChar(Foldername), nil );
if (GetLastError()=0) or (GetLastError()=ERROR_ALREADY_EXISTS) then
Result:=true;
end; {CreateFolder}

function CreateLink(lpszPathObj,lpszPathLink,lpszDesc:string):Boolean;
var psl : IShellLink;
ppf : IPersistFile;
begin
Result:=false;
if SUCCEEDED(CoCreateInstance(CLSID_ShellLink,nil,CLSCTX_INPROC_SERVER, IID_IShellLinkA, psl)) then begin
psl.SetPath(PChar(lpszPathObj));
psl.SetDescription(PChar(lpszDesc));
if SUCCEEDED(psl.QueryInterface(IID_IPersistFile,ppf)) then begin
ppf.Save(StringToOLEStr(lpszPathLink),TRUE);
Result:=true;
end;
end;
end; {CreateLink}

Aufrufe:
CreateFolder();
: Komplette Pfadangabe der Programmgruppe

CreateLink(,);
: Datei, auf die der Shortcut verweisen soll
: Dateiname des Shortcuts (Endung : .lnk)
: Beschreibung des Shortcuts

SpecialDirectory();
: Identifier für Systemordner, mögliche Werte:
Autostart-Gruppe : CSIDL_Startup
Startmenü : CSIDL_Startmenu
Programs-Menü : CSIDL_Programs
Persönliche Favoriten : CSIDL_Favorites
Desktop : CSIDL_Desktopdirectory
„Send an“-Verzeichnis : CSIDL_Sendto

Beispiele :
CreateFolder(SpecialDirectory(CSIDL_Programs)+‚Neu‘);
->Erstellt die Programmgruppe „Neu“ im Programs-Menü.

CreateLink(‚C:\Test\Programm.exe‘,SpecialDirectory(CSIDL_Startup)+‚Programm.lnk‘,‚Programm‘);
->Erstellt einen Link it dem Titel „Programm“ auf die Datei „C:\Test\Programm.exe“
in der Autostart-Gruppe.

unter http://vitt.tsx.org findest du eine Komponente, die genau das erledigt. Hab ich nicht getestet.

Gruss und viel Erfolg

RQ

Vielen Dank!!!
Ich werds mal ausprobieren!!!
MfG
Florian