Как вы надежно получаете папку быстрого запуска в XP и Vista? - PullRequest
1 голос
/ 16 сентября 2008

Нам необходимо надежно получить папку быстрого запуска как для всех, так и для текущих пользователей как в Vista, так и в XP. Я занимаюсь разработкой на C ++, но, вероятно, это скорее общий вопрос по Windows API.

Для справки, вот код для получения папки Application Data в обеих системах:

    HRESULT hres; 
    CString basePath;
    hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
    basePath.ReleaseBuffer();

Я подозреваю, что это просто вопрос того, какую подпапку использует Microsoft.

В Windows XP подпапка данных приложения:

Microsoft \ Internet Explorer \ Быстрый запуск

В Vista кажется, что подпапка была изменена на:

Роуминг \ Microsoft \ Internet Explorer \ Быстрый запуск

но я бы хотел убедиться, что это правильный способ определения правильного местоположения.

Поиск правильного способа определения этого местоположения весьма важен, поскольку использование жестко закодированных имен папок почти всегда прерывается при переходе на международные установки и т. Д. Тот факт, что папка называется ' Роуминг в Vista заставляет меня задуматься, есть ли какая-то особая обработка, связанная с этой папкой (сродни папке Local Settings в XP).

EDIT: Следующая статья msdn: http://msdn.microsoft.com/en-us/library/bb762494.aspx указывает, что CSIDL_APPDATA имеет эквивалентный идентификатор FOLDERID_RoamingAppData, который, похоже, поддерживает утверждение StocksR о том, что CSIDL_APPDATA возвращает C: \ Users \ xxxx \ AppData \ Roaming, поэтому его можно использовать тот же относительный путь для быстрого запуска 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 был успешным.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2008

AppData на Vista ссылается на C: \ Users \ xxxx \ AppData \ Роуминг, а не на папку C: \ Users \ xxxx \ AppData, это сам.

Также это художественное http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx на сайте Microsoft подразумевает, что вы просто должны использовать путь относительно папки appdata

1 голос
/ 17 сентября 2008

Отличный вопрос!

Что бы вы ни делали, не поддавайтесь искушению копаться в реестре , чтобы найти эту информацию!

Кроме того, мы должны противостоять искушению жестко закодировать некоторый путь, даже частично. Если мы получим специальный путь AppData, а затем просто добавим строку в конец, это может прерваться при установке программного обеспечения за пределами США, где имя папки локализовано на этот язык. Например. GetSpecialFolderPath(APP_DATA) + "\\Fonts" не будет работать в неанглийских версиях Windows.

Надеюсь, у кого-то есть правильный ответ на ваш вопрос; Мне любопытно узнать это сам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...