本帖最后由 dzgsfjw 于 2011-04-24 22:28:14 编辑

解决方案 »

  1.   

    我曾经也用过这函数建立快捷方式,貌似在Win7下无效
      

  2.   


    //shortcutname 为创建的程序名字
    procedure Tform1.Createshortcut(const shortcutname: String);
    var
     IObject    : IUnknown;  
     ISLink     : IShellLink;
     IPFile     : IPersistFile;
     PIDL       : PItemIDList;
     InFolder   : array[0..128] of Char;
     TargetName,str : String;
     LinkName   : WideString;
     strExeName:String;
    begin
     TargetName:=ParamStr(0);
     if not fileexists(TargetName)  then Exit;
     if trim(ExtractFilePath(ParamStr(0)))=trim(GetDesktopFolder) then Exit;
     IObject := CreateComObject(CLSID_ShellLink);
     ISLink  := IObject as IShellLink;
     IPFile  := IObject as IPersistFile;
     with ISLink do begin
       SetPath(pChar(TargetName));
       SetWorkingDirectory
      (pChar(ExtractFilePath(TargetName)));
     end;
     // 在桌面上建立
     SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL);
     SHGetPathFromIDList(PIDL, InFolder);
     strExeName:=ExtractFileName(Application.ExeName);
     if Pos('.',   strExeName)>0 then
       strExeName:=Copy(strExeName,1,LastDelimiter('.',strExeName)-1);
     LinkName := InFolder + '\'+strExeName+'.lnk';
     If fileexists(LinkName) Then DeleteFile(Pchar(LinkName));
     str:=ExtractFilePath(TargetName);
     If Trim(str)<>Trim(InFolder+'\') Then
       IPFile.Save(PWChar(LinkName), false);
    //在程序组中建立
     SHGetSpecialFolderLocation(0,CSIDL_STARTMENU , PIDL);
     SHGetPathFromIDList(PIDL, InFolder);
    end;