У Windows'а целая куча специальных папок. Ну, например, папка под принтеры или папка под рабочий стол. Конечно можно зайти в каталог Windows и посмотреть где и что. Только во всех этих рассуждениях есть одно слабое место. Вы не можете заранее предполагать где эти папки находятся и как называются. Если не верите, то почитайте Windows 95 Resource там есть такое понятие как системная политика, которая реализуется с помощью программы PolEdit, которая позволяет устанавливать эти папки самому под конкретного пользователя. Раз дела обстоят так плохо, то должен быть механизм определения этих папок. И он есть. Можно воспользоваться функцией SHGetSpecialFolderLocation, которая и даст Вам возможность узнать их. Смотрим пример:
#include "stdafx.h" #include "Shlobj.h" #include "iostream.h" void main() { LPITEMIDLIST pidl; char buffer[256]; SHGetSpecialFolderLocation(NULL,CSIDL_RECENT ,&pidl); if (pidl==NULL) { cout << "Error" << endl; return; } SHGetPathFromIDList(pidl,buffer); cout << buffer << endl; }
В функцию SHGetSpecialFolderLocation передается константа, которая характеризует имя какой папки нужно получить и возвращает указатель на данные (pidl), на основе которого используя функцию SHGetPathFromIDList можно получить само имя. Вот описания функций:
WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation ( HWND hwndOwner, int nFolder, LPITEMIDLIST *ppidl ); WINSHELLAPI BOOL WINAPI SHGetPathFromIDList ( LPCITEMIDLIST pidl, LPSTR pszPath );