Узнаем специальные папки Windows

У 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
);
 
« Предыдущая статья   Следующая статья »