C++获得系统路径

源码:

  1. #include <Shlobj.h>  
  2. #include <stdio.h>  
  3. #include <locale.h>  
  4.   
  5. int main()  
  6. {  
  7.     setlocale(LC_ALL, "chs");  
  8.   
  9.     TCHAR szPath[MAX_PATH];  
  10.   
  11.     int CSIDL[] = {  
  12.         CSIDL_ADMINTOOLS,       CSIDL_APPDATA,  CSIDL_CDBURN_AREA,      CSIDL_COMMON_ADMINTOOLS,    CSIDL_COMMON_APPDATA,  
  13.         CSIDL_COMMON_DESKTOPDIRECTORY,          CSIDL_COMMON_DOCUMENTS, CSIDL_COMMON_FAVORITES,     CSIDL_COMMON_MUSIC,  
  14.         CSIDL_COMMON_PICTURES,  CSIDL_COMMON_PROGRAMS,  CSIDL_COMMON_STARTMENU, CSIDL_COMMON_STARTUP,  
  15.         CSIDL_COMMON_TEMPLATES, CSIDL_COMMON_VIDEO,     CSIDL_COOKIES,          CSIDL_FAVORITES,  
  16.         CSIDL_HISTORY,          CSIDL_INTERNET_CACHE,   CSIDL_LOCAL_APPDATA,    CSIDL_MYDOCUMENTS,  
  17.         CSIDL_MYMUSIC,          CSIDL_MYPICTURES,       CSIDL_MYVIDEO,          CSIDL_PROFILE,      CSIDL_PROGRAM_FILES,  
  18.         CSIDL_PROGRAM_FILES_COMMON,                     CSIDL_PROGRAMS,         CSIDL_RECENT,       CSIDL_SENDTO,  
  19.         CSIDL_STARTMENU,        CSIDL_STARTUP,          CSIDL_SYSTEM,           CSIDL_TEMPLATES,    CSIDL_WINDOWS,  
  20.         0  
  21.     };  
  22.   
  23.     for (int i=0;CSIDL[i];i++) {  
  24.         if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL[i], NULL, SHGFP_TYPE_CURRENT, szPath))) {  
  25.             wprintf(L"%d, %s ", i, szPath);  
  26.         }  
  27.     }  
  28.   
  29.     return 0;  
  30. }  

在XP上,用VS2010编译通过,假设是win7或者更高版本号,应该用

  1. HRESULT SHGetKnownFolderPath(  
  2.   _In_      REFKNOWNFOLDERID rfid,  
  3.   _In_      DWORD dwFlags,  
  4.   _In_opt_  HANDLE hToken,  
  5.   _Out_     PWSTR *ppszPath  
  6. );  

结果:

[plain] view plaincopy
  1. 0, C:Documents and SettingsAdministrator「開始」菜单程序管理工具  
  2. 1, C:Documents and SettingsAdministratorApplication Data  
  3. 2, C:Documents and SettingsAdministratorLocal SettingsApplication DataMicrosoftCD Burning  
  4. 3, C:Documents and SettingsAll Users「開始」菜单程序管理工具  
  5. 4, C:Documents and SettingsAll UsersApplication Data  
  6. 5, C:Documents and SettingsAll Users桌面  
  7. 6, C:Documents and SettingsAll UsersDocuments  
  8. 7, C:Documents and SettingsAll UsersFavorites  
  9. 8, C:Documents and SettingsAll UsersDocumentsMy Music  
  10. 9, C:Documents and SettingsAll UsersDocumentsMy Pictures  
  11. 10, C:Documents and SettingsAll Users「開始」菜单程序  
  12. 11, C:Documents and SettingsAll Users「開始」菜单  
  13. 12, C:Documents and SettingsAll Users「開始」菜单程序启动  
  14. 13, C:Documents and SettingsAll UsersTemplates  
  15. 14, C:Documents and SettingsAll UsersDocumentsMy Videos  
  16. 15, D:My DocumentsCookies  
  17. 16, D:My DocumentsFavorites  
  18. 17, C:Documents and SettingsAdministratorLocal SettingsHistory  
  19. 18, C:Documents and SettingsAdministratorLocal SettingsTemporary Internet Files  
  20. 19, C:Documents and SettingsAdministratorLocal SettingsApplication Data  
  21. 20, D:My Documents  
  22. 21, D:My DocumentsMy Music  
  23. 22, D:My DocumentsMy Pictures  
  24. 23, D:My DocumentsMy Videos  
  25. 24, C:Documents and SettingsAdministrator  
  26. 25, C:Program Files  
  27. 26, C:Program FilesCommon Files  
  28. 27, C:Documents and SettingsAdministrator「開始」菜单程序  
  29. 28, C:Documents and SettingsAdministratorRecent  
  30. 29, C:Documents and SettingsAdministratorSendTo  
  31. 30, C:Documents and SettingsAdministrator「開始」菜单  
  32. 31, C:Documents and SettingsAdministrator「開始」菜单程序启动  
  33. 32, C:WINDOWSsystem32  
  34. 33, C:Documents and SettingsAdministratorTemplates  
  35. 34, C:WINDOWS  

原文地址:https://www.cnblogs.com/bhlsheji/p/5328314.html