如何得到系统目录?如:win98 为c:\windows\system,win2000为d:\winnt\system32?

解决方案 »

  1.   

    用API 
      GetSystemDirectory
      

  2.   

    var
      szDir: array [0..255] of char;
    begin
      GetSystemDirectory(szDir, 255);
      

  3.   

    var
      vSysDir:String;
    begin
      SetLength(vSysDir,144);
      if GetSystemDirectory(PChar(vSysDir),144)<>0 then
      begin
        SetLength(vSysDir,StrLen(PChar(vSysDir)));
        ShowMessage(vSysDir);
      end
      else
        RaiseLastWin32Error;
    end;
      

  4.   

    UINT GetSystemDirectory(    LPTSTR lpBuffer, // address of buffer for system directory 
        UINT uSize  // size of directory buffer 
       );
      

  5.   

    各位大侠:
     我试了还是不行,是不是我的调用有问题:Function GetSystemDirectory(lpBuffer: string; nSize :integer):integer; far ;external 'kernel32.dll' ;
      

  6.   

    var
    temp :array[0..100] of char;
    begin
    GetSystemDirectory(temp,255);
    edit1.Text:=temp;
    end;
      

  7.   

    function GetSpecialFolderDir(mFolder: Integer): string;
      { 返回获取系统文件或系统目录 }
      (*
      CSIDL_BITBUCKET * 回收站
      CSIDL_CONTROLS * 控制面板
      CSIDL_DESKTOP * 桌面
      CSIDL_DESKTOPDIRECTORY 桌面目录 //如C:
      CSIDL_DRIVES * 我的电脑
      CSIDL_FONTS 字体 //如C:
      CSIDL_NETHOOD 网上邻居目录 //如C:
      CSIDL_NETWORK * 网上邻居
      CSIDL_PERSONAL 我的文档 //如C:Documents
      CSIDL_PRINTERS * 打印机
      CSIDL_PROGRAMS 程序组 //如C:Menu
      CSIDL_RECENT 最近文档 //如C:
      CSIDL_SENDTO 发送到 //如C:
      CSIDL_STARTMENU 开始菜单 //如C:Menu
      CSIDL_STARTUP 启动 //如C:\u21551启动
      CSIDL_TEMPLATES 模版 //如C:
      *)
    var
      vItemIDList: PItemIDList;
      vBuffer: array[0..MAX_PATH] of Char;
    begin
      SHGetSpecialFolderLocation(0, mFolder, vItemIDList);
      SHGetPathFromIDList(vItemIDList, vBuffer); //转换成文件系统的路径
      Result := vBuffer;
    end;