Das ist meine Vorgehensweise:
Delphi-Quellcode:
{*******************************************************************************
* CREATE LINK *
********************************************************************************}
procedure CreateLink (Target, Args, WorkDir, ShortCutName, Icon: String; IconNo: Integer);
var
IObj: IUnknown;
Link: IShellLink;
IPFile: IPersistFile;
TargetW: WideString;
begin
IObj := CreateComObject (CLSID_ShellLink);
Link := IObj as IShellLink;
IPFile := IObj as IPersistFile;
with Link do
begin
SetPath (PChar (Target));
SetArguments (PChar (Args));
SetShowCmd (SW_SHOWMINIMIZED);
SetWorkingDirectory (PChar (WorkDir));
SetIconLocation (PChar (Icon), IconNo);
end;
TargetW := ShortCutName;
IPFile.Save (PWChar (TargetW), False);
End;
Damit möchte ich den Link erzeugen. Funktioniert prima. Ein beispielaufruf wäre:
CreateLink('c:\test.txt', '', '', 'd:\test.lnk', 'c:\icon.ico', 0);
Soweit kein Problem.
Nun der Code um den Link ins Startmenue zu bekommen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
b:PAnsiChar;
StartmenuProgrammeOrdner: String;
begin
b := AllocMem(MAX_PATH);
SHGetSpecialFolderPath(Form1.Handle, b, CSIDL_PROGRAMS, True);
StartmenuProgrammeOrdner := b;
FreeMem(b);
CreateLink ('C:\meinprogramm\unterordner\dwi_run.cmd', '', '', StartmenuProgrammeOrdner + '\Mein Programm 1.0\test.lnk', 'C:\test.ico', 0);
End;
Ich kann einen Link direkt im Startmenue erzeugen - sobald ich ihn aber ein einen vorhandenen Ordner einfügen will passiert nix.