2008-09-16 39 views
1

我們需要在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成功。

回答

1

大問題!

不管你做什麼,不要給予dig into the registry找到這個信息的誘惑!另外,我們必須抵制硬編碼路徑的誘惑,即使是部分路徑。如果我們得到特殊的AppData路徑,那麼只需在最後添加一個字符串,這可能會導致在非美國安裝的軟件文件夾名稱被本地化爲該語言。例如。 GetSpecialFolderPath(APP_DATA) + "\\Fonts"不適用於非英文版本的Windows。

希望有人對您的問題有正確的答案;我很想知道我自己!

相關問題