在win2000下面和xp下面采用如下方式取得快捷方式路径,应用都没有问题,到了win98下面为什么不行啦?各位救命阿,在win98下面取的桌面和开始菜单里面的快捷方式是怎么获取的?  //创建桌面文件快捷方式
  SHGetSpecialFolderLocation(0, CSIDL_COMMON_DESKTOPDIRECTORY, PIDL); 
  SHGetPathFromIDList(PIDL, AddDirectory);
  
  //创建开始菜单快捷方式
  SHGetSpecialFolderLocation(0, CSIDL_COMMON_programs, PIDL);
  SHGetPathFromIDList(PIDL, AddDirectory);

解决方案 »

  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.   

    怎样在win98下面创建快捷方式阿~~
      

  3.   

    建立快捷方式:
    const
      CCH_MAXNAME=255;
      LNK_RUN_MIN=7;
      LNK_RUN_MAX=3;
      LNK_RUN_NORMAL=1;type LINK_FILE_INFO=record
             FileName:array[0..MAX_PATH] of char;
             WorkDirectory:array[0..MAX_PATH] of char;
             IconLocation:array[0..MAX_PATH] of char;
             IconIndex:integer;
             Arguments:array[0..MAX_PATH] of char;
             Description:array[0..CCH_MAXNAME] of char;
             ItemIDList:PItemIDList;
             RelativePath:array[0..255] of char;
             ShowState:integer;
             HotKey:word;
         end;function CreateLinkFile(const info:LINK_FILE_INFO;const DestFileName:string=''):boolean;
    var
     anobj:IUnknown;
     shlink:IShellLink;
     pFile:IPersistFile;
     wFileName:widestring;
    begin
     wFileName:=destfilename;
     anobj:=CreateComObject(CLSID_SHELLLINK);
     shlink:=anobj as IShellLink;
     pFile:=anobj as IPersistFile;
     shlink.SetPath(info.FileName);
     shlink.SetWorkingDirectory(info.WorkDirectory);
     shlink.SetDescription(info.Description);
     shlink.SetArguments(info.Arguments);
     shlink.SetIconLocation(info.IconLocation,info.IconIndex);
    // shlink.SetIDList(info.ItemIDList);
     shlink.SetHotkey(info.HotKey);
     shlink.SetShowCmd(info.ShowState);
     shlink.SetRelativePath(info.RelativePath,0);
     if DestFileName='' then
      wFileName:=ChangeFileExt(info.FileName,'lnk');
     result:=succeeded(pFile.Save(pwchar(wFileName),false));
    end;
      

  4.   

    procedure TForm1.Button3Click(Sender: TObject);
    var
    tmpObject : IUnknown;
    tmpSLink : IShellLink;
    tmpPFile : IPersistFile;
    PIDL : PItemIDList;
    StartupDirectory : array[0..MAX_PATH] of Char;
    StartupFilename : String;
    LinkFilename : WideString;
    begin
    StartupFilename := 'C:\Program Files\WinZip\winzip32.exe';
    tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展
    tmpSLink := tmpObject as IShellLink;//取得接口
    tmpPFile := tmpObject as IPersistFile;//用来储存*.lnk文件的接口
    tmpSLink.SetPath(pChar(StartupFilename));//设定notepad.exe所在路径
    tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(StartupFilename)));//设定工作目录
    SHGetSpecialFolderLocation(0, 
    CSIDL_DESKTOPDIRECTORY, 
    PIDL);//获得桌面的Itemidlist
    SHGetPathFromIDList(PIDL, 
    StartupDirectory);//获得桌面路径 
    LinkFilename := StartupDirectory + '\MyNotepad.lnk';
    tmpPFile.Save(pWChar(LinkFilename),FALSE);//保存*.lnk文件end;
      

  5.   

    多谢楼上的
    SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL);//获得桌面的Itemidlist
    SHGetPathFromIDList(PIDL, StartupDirectory);//获得桌面路径
    这两个语句在win98下面创建不了快捷方式!怎么处理? 
      

  6.   

    你写的只适合win2000/XP之类的操作系统!
      

  7.   

    没有人回家,我自己接贴:
    //先取Windows系统目录
    function TfrmMain.GetWindowsDir(): string;
    var
      Buf: array[0..MAX_PATH] of Char;
    begin
      GetWindowsDirectory(Buf, MAX_PATH);
      Result := Trim(Buf);
      if Result = '' then
        Exit;
      if Result[Length(Result)] <> '\' then
        Result := Result + '\';
    end;//再设置快捷方式的路径;procedure TfrmMain.SetLinkPath();
    var
      PIDL: PItemIDList;
      AddDirectory: array[0..MAX_PATH] of Char;
      WinVer: TWin32SysType;
      sWinDir: string;
    begin
      WinVer := GetWindowVersion();
      sWindir := GetWindowsDir();
      if (WinVer = Windows98) then
      begin
      //创建桌面文件快捷方式
        LinkFilenameDestop := sWindir + 'Desktop\' + s_frmMain_ProductName + '.lnk';
      //创建开始菜单快捷方式
        CreateDirectory(pChar(sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName), nil);
        LinkFilenameStartUp := sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName + string('\') + s_frmMain_ProductName + '.lnk';
        wsLinkFileNameUninstall := sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName + string('\') + s_UnInstall_ProductName + '.lnk';
        lstFiles.Add('dir=' + sWindir + 'Start Menu\Programs\' + s_frmMain_ProductName);
        lstFiles.Add('file=' + LinkFilenameDestop);
        lstFiles.Add('file=' + LinkFIlenameStartUp);
        lstFiles.Add('file=' + wsLinkFileNameUninstall);
      end
      else
      begin
      //创建桌面文件快捷方式
        SHGetSpecialFolderLocation(0, CSIDL_COMMON_DESKTOPDIRECTORY, PIDL); //取得桌面文件夹;
        SHGetPathFromIDList(PIDL, AddDirectory);
        LinkFilenameDestop := AddDirectory + string('\') + s_frmMain_ProductName + '.lnk';
      //创建开始菜单快捷方式
        SHGetSpecialFolderLocation(0, CSIDL_COMMON_programs, PIDL);
        SHGetPathFromIDList(PIDL, AddDirectory);
        CreateDirectory(pChar(AddDirectory + string('\') + s_frmMain_ProductName), nil);
        LinkFilenameStartUp := AddDirectory + string('\') + s_frmMain_ProductName + string('\') + s_frmMain_ProductName + '.lnk';
        wsLinkFileNameUninstall := AddDirectory + string('\') + s_frmMain_ProductName + string('\') + s_UnInstall_ProductName + '.lnk';
        lstFiles.Add('dir=' + AddDirectory + string('\') + s_frmMain_ProductName);
        lstFiles.Add('file=' + LinkFilenameDestop);
        lstFiles.Add('file=' + LinkFIlenameStartUp);
        lstFiles.Add('file=' + wsLinkFileNameUninstall);
      end;
    end;