我想得到桌面上的快捷方式的图标及其路径!!
我用IShellLink接口(Delphi6开发人员指南),取不到“我的电脑”,“网上邻居”的图标及它们的路径!!
哪位高手给出完整代码,至少给80分!(我是新来的最多只能出100分了)

解决方案 »

  1.   

    从快捷方式获得被链接的文件function ExeFromLink(const linkname: string): string; 
    var
      FDir,
        FName,
        ExeName: PChar;
      z: integer; 
    begin
      ExeName:= StrAlloc(MAX_PATH);
      FName:= StrAlloc(MAX_PATH);
      FDir:= StrAlloc(MAX_PATH);
      StrPCopy(FName, ExtractFileName(linkname));
      StrPCopy(FDir, ExtractFilePath(linkname));
      z:= FindExecutable(FName, FDir, ExeName);
      if z > 32 then
        Result:= StrPas(ExeName)
      else
        Result:= ';
      StrDispose(FDir);
      StrDispose(FName);
      StrDispose(ExeName); 
    end;
      

  2.   

    uses 
      Registry, 
      ActiveX, 
      ComObj, 
      ShlObj; type 
      ShortcutType = (_DESKTOP, _QUICKLAUNCH, _SENDTO, _STARTMENU, _OTHERFOLDER); function CreateShortcut(SourceFileName: string; // the file the shortcut points to 
                            Location: ShortcutType; // shortcut location 
                            SubFolder,  // subfolder of location 
                            WorkingDir, // working directory property of the shortcut 
                            Parameters, 
                            Description: string): //  description property of the shortcut 
                            string; 
    const 
      SHELL_FOLDERS_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\Explorer'; 
      QUICK_LAUNCH_ROOT = 'Software\MicroSoft\Windows\CurrentVersion\GrpConv'; 
    var 
      MyObject: IUnknown; 
      MySLink: IShellLink; 
      MyPFile: IPersistFile; 
      Directory, LinkName: string; 
      WFileName: WideString; 
      Reg: TRegIniFile; 
    begin   MyObject := CreateComObject(CLSID_ShellLink); 
      MySLink := MyObject as IShellLink; 
      MyPFile := MyObject as IPersistFile;   MySLink.SetPath(PChar(SourceFileName)); 
      MySLink.SetArguments(PChar(Parameters)); 
      MySLink.SetDescription(PChar(Description));   LinkName := ChangeFileExt(SourceFileName, '.lnk'); 
      LinkName := ExtractFileName(LinkName);   // Quicklauch 
      if Location = _QUICKLAUNCH then 
      begin 
        Reg := TRegIniFile.Create(QUICK_LAUNCH_ROOT); 
        try 
          Directory := Reg.ReadString('MapGroups', 'Quick Launch', ''); 
        finally 
          Reg.Free; 
        end; 
      end 
      else 
      // Other locations 
      begin 
        Reg := TRegIniFile.Create(SHELL_FOLDERS_ROOT); 
        try 
        case Location of 
          _OTHERFOLDER : Directory := SubFolder; 
          _DESKTOP     : Directory := Reg.ReadString('Shell Folders', 'Desktop', ''); 
          _STARTMENU   : Directory := Reg.ReadString('Shell Folders', 'Start Menu', ''); 
          _SENDTO      : Directory := Reg.ReadString('Shell Folders', 'SendTo', ''); 
        end; 
        finally 
          Reg.Free; 
        end; 
      end;   if Directory <> '' then 
      begin 
        if (SubFolder <> '') and (Location <> _OTHERFOLDER) then 
          WFileName := Directory + '\' + SubFolder + '\' + LinkName 
        else 
          WFileName := Directory + '\' + LinkName;     if WorkingDir = '' then 
          MySLink.SetWorkingDirectory(PChar(ExtractFilePath(SourceFileName)));     MyPFile.Save(PWChar(WFileName), False); 
        Result := WFileName; 
      end; 
    end; function GetProgramDir: string; 
    var 
      reg: TRegistry; 
    begin 
      reg := TRegistry.Create; 
      try 
        reg.RootKey := HKEY_CURRENT_USER; 
        reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', False); 
        Result := reg.ReadString('Programs'); 
        reg.CloseKey; 
      finally 
        reg.Free; 
      end; 
    end; // Some examples: procedure TForm1.Button1Click(Sender: TObject); 
    const 
     PROGR = 'c:\YourProgram.exe'; 
    var 
      resPath: string; 
    begin 
      //Create a Shortcut in the Quckick launch toolbar 
      CreateShortcut(PROGR, _QUICKLAUNCH, '','','','Description');   //Create a Shortcut on the Desktop 
      CreateShortcut(PROGR, _DESKTOP, '','','','Description');   //Create a Shortcut in the Startmenu /"Programs"-Folder 
      resPath := CreateShortcut(PROGR, _OTHERFOLDER, GetProgramDir,'','','Description'); 
      if resPath <> '' then 
      begin 
        ShowMessage('Shortcut Successfully created in: ' + resPath); 
      end; 
    end; 
      

  3.   

    需引用单元shiobj
    function PutselfToDesktop(TargetName,Mycaption,DispInfo:String):boolean;
    {________________________________________________
    |  Mycaption:快捷方式标题                       |
    |  TargetName:快捷方式指向的文件,需包含完整路径|                       |
    |  DispInfo:快捷方式提示信息  可为空            |
    |  win2000指向快捷方式时可显示win98下无用        |
    |________________________________________________}
    var
      IObject    : IUnknown;
      ISLink     : IShellLink;
      IPFile     : IPersistFile;
      PIDL       : PItemIDList;
      InFolder   : array[0..MAX_PATH] of Char;
      TargetName : String;
      LinkName   : WideString;
    begin   
      if not fileexists(TargetName)  then Exit;
      if mycaption='' 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)));
        SetDescription(pchar(DispInfo));
      end;
      // 在桌面上建立
      SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL);
      SHGetPathFromIDList(PIDL, InFolder);
      LinkName := InFolder + '\'+mycaption+'.lnk';
      IPFile.Save(PWChar(LinkName), false);
    //在程序组中建立
      SHGetSpecialFolderLocation(0,CSIDL_STARTMENU , PIDL);
      SHGetPathFromIDList(PIDL, InFolder);
      LinkName := InFolder + '\程序\'+mycaption+'.lnk';
      IPFile.Save(PWChar(LinkName), false);
      result:=true;
    end;
      

  4.   

    Delphi 6只带的Demo下面有一个Virtual ListView,里面有实现资源管理器的功能,就是你要的,自己看看源代码就明白了。
      

  5.   

    C:\Documents and Settings\All Users\桌面?
      

  6.   

    我的电脑之类的不是快捷方式,有CLSID……你去注册表里面看就是了
      

  7.   

    程序描述:在Form1上放一个image1,和一个edit1,和button1。问题:谁能实现:当点击button1时,在image1上显示“我的电脑”
    的图标,并在edit1上显示“我的电脑”的路径。给出代码马上给分,至少80分。
      

  8.   

    我的天呀!!CSDN竟然没人会??
      

  9.   

    桌面快捷方式在DeskTop目录
    我的电脑和网上邻居是系统项,楼上说得对,在注册表里,但具体GUID是什么我也忘了
      

  10.   

    显示我的电脑图标uses Shellapi, ShlObj;procedure TForm1.Button1Click(Sender: TObject);
    var
      sfi:TShFileInfo;
      pidl: PItemIDList;
    begin
      if Succeeded(SHGetSpecialFolderLocation(Handle, CSIDL_DRIVES, Pidl)) then
      begin
        ShGetFileInfo(PChar(pidl), 0, sfi, sizeof(sfi), SHGFI_ICON or SHGFI_PIDL);
        Image1.Picture.Icon.Handle := sfi.hIcon;
      end;
    end;
      

  11.   

    首先感谢bdmh(bdmh)帮助。
    to  papaya_stone(^_^)shentong(^_^) :用你给的
    函数无法取得word在桌面的快捷方式的正确路径。
    因为,将取得的路径用ShellExecute打不开word程序。
    有谁知道怎么取得像word,excel等的桌面快捷方式的
    路径,并执行word程序吗??