我們需要在Vista和XP下爲所有用戶和當前用戶可靠地獲取快速啓動文件夾。我正在用C++進行開發,但這可能更像是一個常見的Windows API問題。如何可靠地獲取XP和Vista中的快速啓動文件夾?
供參考,在這裏是代碼來獲得這兩個系統下的Application Data文件夾:
HRESULT hres;
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
我懷疑這只是一個知道哪些子文件夾Microsoft使用的問題。
在Windows XP中,應用程序數據的子文件夾:
微軟\的Internet Explorer \快速啓動
在Vista下,看來該子文件夾已被更改爲:
漫遊\ Microsoft \ Internet Explorer \快速啓動
但我想確保這是確定正確位置的正確方法。
查找正確確定此位置的方法非常重要,因爲依靠硬編碼的文件夾名稱幾乎總是會在您進入國際安裝等時破壞......該文件夾名爲「Roaming」的事實在Vista讓我懷疑是否有一些與該文件夾相關的特殊處理(類似於XP下的本地設置文件夾)。
編輯: 以下MSDN文章:http://msdn.microsoft.com/en-us/library/bb762494.aspx表示CSIDL_APPDATA具有FOLDERID_RoamingAppData的等效ID,這似乎支持StocksR的說法,CSIDL_APPDATA不會返回C:\用戶\ XXXX \應用程序數據\漫遊,所以它應該是可能的爲CSIDL_APPDATA使用相同的相對路徑以快速啓動(\ Microsoft \ Internet Explorer \ Quick Launch)。
所以下面的算法是正確的每MS:
HRESULT hres;
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
CString qlPath = basePath + "\\Microsoft\\Internet Explorer\\Quick Launch";
它也將是一個好主意,檢查HRES以確保調用SHGetSpecialFolderPath成功。