uses
  ShlObj, ActiveX, ComObj;function SetShellLink(mPath: string; mWorkingDirectory: string;
  mFileName: WideString): Boolean;
var
  vShellLink: IShellLink;
  vPersistFile: IPersistFile;
  vUnKnown: IUnKnown;
begin
  Result := True;
  try
    vUnKnown := CreateComObject(CLSID_ShellLink);
    vShellLink := vUnKnown as IShellLink;
    vPersistFile := vUnKnown as IPersistFile;
    vShellLink.SetPath(PChar(mPath));
    vShellLink.SetWorkingDirectory(PChar(mWorkingDirectory));
    vPersistFile.Save(PWChar(mFileName), False);
  except
    Result := False;
  end;
end; { SetShellLink }procedure TForm1.Button1Click(Sender: TObject);
begin
  SetShellLink(ParamStr(0), ExtractFilePath(ParamStr(0)), 'C:\Test.lnk');
end;