C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Стандартные директории
Антон
  Отправлено: 07.01.2006, 11:48


Ученик-кочегар

Группа: Участник
Сообщений: 8



sad.gif Подскажите как открыть Мои Документы,Рабочий стол не зная буквы диска и имя пользователя.
AVC
Отправлено: 10.01.2006, 09:34


Ветеран

Группа: Модератор
Сообщений: 1583



Вот то, чем пользуюсь сам. Устроит?
CODE

//---------------------------------------------------------------------------
// Получение стандартных каталогов по их именам
// Возврат
//  Путь к каталогу с завершающим \ (DirAdds)
//  Пустая строка при ошибке
// *AVC 18.08.2005 переработка на без TRegistry и добавление DirAdds
//---------------------------------------------------------------------------
//  ... == C:\Documents and Settings\avc
// AppData     ...\Application Data
// Cookies     ...\Cookies
// Desktop     ...\Рабочий стол
// Favorites    ...\Избранное
// NetHood     ...\NetHood
// Personal    ...\Мои документы
// My Pictures    ...\Мои документы\Мои рисунки
// PrintHood    ...\PrintHood
// Recent     ...\Recent
// SendTo     ...\SendTo
// Start Menu    ...\Главное меню
// Templates    ...\Шаблоны
// Programs    ...\Главное меню\Программы
// Startup     ...\Главное меню\Программы\Автозагрузка
// Local Settings   ...\Local Settings
// Local AppData   ...\Local Settings\Application Data
// Cache     ...\Local Settings\Temporary Internet Files
// History     ...\Local Settings\History
// Administrative Tools ...\Главное меню\Программы\Администрирование
// My Music    ...\Мои документы\\Мои музыкальные записи
//
// Fonts     C:\WINNT\Fonts
//---------------------------------------------------------------------------

PACKAGE AnsiString __fastcall AxGetShellFolder (const AnsiString& ShellFolder_Name)
{
AnsiString SubKey  = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
HKEY hKey;
long lerr;

lerr = RegOpenKeyEx(HKEY_CURRENT_USER, SubKey.c_str(), 0, KEY_READ, &hKey);
if (lerr != ERROR_SUCCESS) return "";

char buf[300];
DWORD bufsize = sizeof(buf);
DWORD type;

lerr = RegQueryValueEx(hKey, ShellFolder_Name.c_str(), NULL, &type, buf, &bufsize);
if (lerr != ERROR_SUCCESS) memset(buf, 0x00, bufsize);

RegCloseKey(hKey);

return DirAdds(AnsiString(buf));
}


Вернуться в Вопросы программирования в C++Builder