Шаг 20 - Узнаем специальные папки 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
);

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.