不通过读取注册表取得,
不通过读取系统目录,然后再对系统路径操作而取得的系统Program Files路径
需要直接取得,有没有此方法!!!

解决方案 »

  1.   

    LPITEMIDLIST pidl;
    LPMALLOC pShellMalloc;
    char szDir[200];
    if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))

            if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_PROGRAMS 
    ,&pidl)))
            {
                    // 如果成功返回true
                    SHGetPathFromIDList(pidl, szDir);
                    pShellMalloc->Free(pidl);
            }
             pShellMalloc->Release();
    }::MessageBox (NULL,szDir,"Path",MB_OK);
      

  2.   

    #include "shlobj.h" WINSHELLAPI     HRESULT     WINAPI     SHGetSpecialFolderLocation (  HWND hwndOwner, 指定了"所有者窗口",在調用這個函數時可能出現的對話框或訊息框. 
     int nFolder, 決定哪個目錄是待查找目錄 
     LPITEMIDLIST * ppidl pidl地址. SHGetSpecialFolderLocation把地址寫到pidl. ); 函數功能: 可以幫我們找到windows的Desktop目錄、啟動目錄、我的文檔目錄等.
      部分參數詳細信息: nFolder: 是一個整數id,決定哪個目錄是待查找目錄,它的取值可能是:   CSIDL_BITBUCKET  回收站  
     
     CSIDL_CONTROLS  控制面板  
     
     CSIDL_DESKTOP  Windows 桌面desktop  
     
     CSIDL_DESKTOPDIRECTORY  desktop的目錄  
     
     CSIDL_DRIVES  我的電腦  
     
     CSIDL_FONTS  字體目錄  
     
     CSIDL_NETHOOD  網上鄰居  
     
     CSIDL_NETWORK  網上鄰居virtual folder  
     
     CSIDL_PERSONAL  我的文檔  
     
     CSIDL_PRINTERS  印表機  
     
     CSIDL_PROGRAMS  程式組  
     
     CSIDL_RECENT  大多數最近打開的文檔列表 
     
     CSIDL_SENDTO  "發送到"菜單項  
     
     CSIDL_STARTMENU  任務條啟動菜單項  
     
     CSIDL_STARTUP  啟動目錄  
     
     CSIDL_TEMPLATES  臨時文檔