Delphi системные папки windows

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

Сегодня рассмотрим ещё один простой способ определения специальных папок Windows. К специальным относятся такие директории как, например:  «Мои документы», «Application Data», «Cookies» и т.д. В разное время развития операционной системы Windows, как и в разное время развития Delphi предлагалась масса различных способов определения путей к специальным директориям от самых простых — использование GetWindowsDirectory до таких «экзотических» как работа с интерфейсом ISHFolder и т.д.

Сегодня расмотрим более простой, на мой взгляд, способ получения всех без исключения системных папок. При этом мы воспользуемся всего одним заголовочным модулем Delphi — SHFolder.pas. Этот модуль содержит необходимы типы данных и константы для работы с библиотекой shfolder.dll, которая доступна во всех версиях Windows, начиная с Win95.

В начале немного теории. В модуле SHFolder.pas вы найдете всего одну функцию — SHGetFolderPath. Функция  получает путь к папке, определенной значением CSIDL. Следует отметить, что её не рекомендуется использовать в Windows Vista и выше, т.к. в бибилотеках ОС Win Vista и Windows 7 эта функция осталась только для обратной совместимости. Вместо этого рекоммендуется использовать функцию SHGetKnownFolderPath, которая, кстати сказать, по большому счёты не отличается от своей предшественницы. Т.к. я использую в работе только ОС Win XP, то для меня вполне хватит и обычной SHGetFolderPath.

Функция имеет следующее описание:

function(hwnd: HWND; csidl: Integer; hToken: THandle; dwFlags: DWord; pszPath: PAnsiChar): HRESULT;

Первый параметр hwnd — зарезервирован и не используется. При вызове функции достаточно присвоить ему значение 0.
csidl— определяет путь к какой директории мы хотим получить. Параметр может принимать следующие значения:

Константа Значение Путь к директории по умолчанию
CSIDL_PERSONAL $0005 C:\Documents and Settings\%User%\Мои
документы
CSIDL_APPDATA $001A C:\Documents and Settings\%User%\Application
Data
CSIDL_LOCAL_APPDATA $001C C:\Documents and Settings\%User%\Local
Settings\Application Data
CSIDL_MYMUSIC $000d C:\Documents and Settings\%User%\Мои
документы\Моя музыка
CSIDL_INTERNET_CACHE $0020 C:\Documents and Settings\%User%\Local
Settings\Temporary Internet Files
CSIDL_COOKIES $0021 C:\Documents and Settings\%User%\Cookies
CSIDL_HISTORY $0022 C:\Documents and Settings\%User%\Local
Settings\History
CSIDL_COMMON_APPDATA $0023 C:\Documents and Settings\All Users\Application Data
CSIDL_WINDOWS $0024 C:\WINDOWS
CSIDL_SYSTEM $0025 C:\WINDOWS\system32
CSIDL_PROGRAM_FILES $0026 C:\Program Files
CSIDL_MYPICTURES $0027 C:\Documents and Settings\%User%\Мои
документы\Мои рисунки
CSIDL_PROGRAM_FILES_COMMON $002b C:\Program Files\Common Files
CSIDL_COMMON_DOCUMENTS $002e C:\Documents and Settings\All Users\Документы
CSIDL_RESOURCES $0038 C:\WINDOWS\resources
CSIDL_RESOURCES_LOCALIZED $0039 C:\WINDOWS\resources\%LangID%
CSIDL_COMMON_ADMINTOOLS $002f C:\Documents and Settings\All Users\Главное меню\Программы\Администрирование
CSIDL_ADMINTOOLS $0030 C:\Documents and Settings\Главное меню\Программы\Администрирование

Параметр можно использовать совместно с флагом CSIDL_FLAG_CREATE (для версий Win 2k и выше). В этом случае, если заданная в параметре csidl директория не будет найдена, то функция автоматически её создаст и вернет путь по умолчанию.

  • hToken — маркер доступа. Для версий Windows 2000 и ниже всегда приравниваеся к NULL, для остальных версий может принимать ненудевое значение.
  • dwFlags — определяет какой путь будет возвращен функцией: по умолчанию или текущий. Соответственно, может принимать всего два значения: SHGFP_TYPE_DEFAULT и SHGFP_TYPE_CURRENT.
  • pszPath — указатель на строку WideChar.

Небольшой пример использования SHGetFolderPath. В первом случае мы попробуем получить путь к папке «Мои документы», а во втором — к папке с локализованными ресурсами. При этом, во втором случае, если путь не будет найден, то создадим необходимую директорию:
1. Как получить путь к папке «Мои документы»

var buf: array [1..MAX_PATH] of widechar;
begin
  Memo1.Lines.Clear;
  if Succeeded(SHGetFolderPath(0,CSIDL_PERSONAL,0,SHGFP_TYPE_CURRENT,@buf)) then
    Memo1.Lines.Add(buf);
end;

Результат выполнения функции:

C:\Documents and Settings\%User%\Мои документы

2. Как получить путь к папке с локализованными ресурсами или создать её, вернув путь по умолчанию

var buf: array [1..MAX_PATH] of widechar;
begin
  Memo1.Lines.Clear;
  if Succeeded(SHGetFolderPath(0,CSIDL_RESOURCES_LOCALIZED or  CSIDL_FLAG_CREATE,0,SHGFP_TYPE_CURRENT,@buf)) then
    Memo1.Lines.Add(buf);
end;

Результат выполнения функции:

C:\WINDOWS\resources\419

Аналогичным образом можно получать/создавать другие специальные директории Windows. По-моему рассмотреный выше вариант получения путей вполне приемлим для работы в ОС до Windows Vista. Ну, а если нужна поддержка более поздних версий, то тут уже надо использовать последние версии библиотеки и, вдимо, придётся использовать интерфейс ISHFolder.

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

Sometime we need some special directories path from Microsoft Windows system to store User data or to copy some files etc. So we can get those folder paths in Delphi in several ways. In this blog I have tried to cover all the ways. If I have left something please feel free to add comments.

By using Windows API function SHGetFolderPath 

Delphi provides SHGetFolderPath API function which helps us to get windows system folder paths. We need to use ShlObj unit in uses clause.

For more details about SHGetFolderPath please visit following link



Here at following I have created a string function GetSpecialFolderPath using SHGetFOlderPath API function which will return all special Windows folder path as per CSIDLFolder value.

function GetSpecialFolderPath(CSIDLFolder: Integer): string;

var

   FilePath: array [0..MAX_PATH] of char;

begin

  SHGetFolderPath(0, CSIDLFolder, 0, 0, FilePath);

  Result := FilePath;

end;

// to get DESKTOP folder location //

procedure TForm1.Button2Click(Sender: TObject);

begin

  ShowMessage(GetSpecialFolderPath(CSIDL_DESKTOP, False));

end;

CSIDL (constant special item ID list) values provide a unique system-independent way to identify special folders used frequently by applications.

Following CSIDL Constants we can use.

  CSIDL_DESKTOP                   = $0000; { <desktop> }

  CSIDL_INTERNET                  = $0001; { Internet Explorer (icon on desktop) }

  CSIDL_PROGRAMS                = $0002; { Start Menu\Programs }

  CSIDL_CONTROLS                 = $0003; { My Computer\Control Panel }

  CSIDL_PRINTERS                  = $0004; { My Computer\Printers }

  CSIDL_PERSONAL                 = $0005; { My Documents.  This is equivalent to 
                                                                       CSIDL_MYDOCUMENTS in XP and above }

  CSIDL_FAVORITES                 = $0006; { <user name>\Favorites }

  CSIDL_STARTUP                    = $0007; { Start Menu\Programs\Startup }

  CSIDL_RECENT                      = $0008; { <user name>\Recent }

  CSIDL_SENDTO                     = $0009; { <user name>\SendTo }

  CSIDL_BITBUCKET                 = $000a; { <desktop>\Recycle Bin }

  CSIDL_STARTMENU                = $000b; { <user name>\Start Menu }

  CSIDL_MYDOCUMENTS           = $000c; { logical «My Documents» desktop icon }

  CSIDL_MYMUSIC                    = $000d; { «My Music» folder }

  CSIDL_MYVIDEO                    = $000e; { «My Video» folder }

  CSIDL_DESKTOPDIRECTORY   = $0010; { <user name>\Desktop }

  CSIDL_DRIVES                       = $0011; { My Computer }

  CSIDL_NETWORK                   = $0012; { Network Neighborhood (My Network Places) }

  CSIDL_NETHOOD                   = $0013; { <user name>\nethood }

  CSIDL_FONTS                        = $0014; { windows\fonts }

  CSIDL_TEMPLATES                 = $0015; { <user name>\appdata\roaming\template folder }

  CSIDL_COMMON_STARTMENU = $0016; { All Users\Start Menu }

  CSIDL_COMMON_PROGRAMS  = $0017; { All Users\Start Menu\Programs }

  CSIDL_COMMON_STARTUP     = $0018; { All Users\Startup }

  CSIDL_COMMON_DESKTOPDIRECTORY  = $0019; { All Users\Desktop }

  CSIDL_APPDATA                    = $001a; { <user name>\Application Data }

  CSIDL_PRINTHOOD                = $001b; { <user name>\PrintHood }

  CSIDL_LOCAL_APPDATA         = $001c; { <user name>\Local Settings\Application Data 
                                                                                (non roaming) }

  CSIDL_ALTSTARTUP               = $001d; { non localized startup }

  CSIDL_COMMON_ALTSTARTUP= $001e; { non localized common startup }

  CSIDL_COMMON_FAVORITES  = $001f; { User favourites }

  CSIDL_INTERNET_CACHE       = $0020; { temporary inter files }

  CSIDL_COOKIES                    = $0021; { <user name>\Local Settings\Application Data\
                                                                    ..\cookies }

  CSIDL_HISTORY                    = $0022; { <user name>\Local Settings\
                                                                       Application Data\..\history}

  CSIDL_COMMON_APPDATA     = $0023; { All Users\Application Data }

  CSIDL_WINDOWS                  = $0024; { GetWindowsDirectory() }

  CSIDL_SYSTEM                      = $0025; { GetSystemDirectory() }

  CSIDL_PROGRAM_FILES         = $0026; { C:\Program Files }

  CSIDL_MYPICTURES               = $0027; { C:\Program Files\My Pictures }

  CSIDL_PROFILE                      = $0028; { USERPROFILE }

  CSIDL_SYSTEMX86                 = $0029; { x86 system directory on RISC }

  CSIDL_PROGRAM_FILESX86    = $002a; { x86 C:\Program Files on RISC }

  CSIDL_PROGRAM_FILES_COMMON   = $002b; { C:\Program Files\Common }

  CSIDL_PROGRAM_FILES_COMMONX86 = $002c; { x86 C:\Program Files\Common on RISC }

  CSIDL_COMMON_TEMPLATES              = $002d; { All Users\Templates }

  CSIDL_COMMON_DOCUMENTS            = $002e; { All Users\Documents }

  CSIDL_COMMON_ADMINTOOLS           = $002f; { All Users\Start Menu\Programs\
                                                                            Administrative Tools }

  CSIDL_ADMINTOOLS                          = $0030; { <user name>\Start Menu\Programs\
                                                                              Administrative Tools }

  CSIDL_CONNECTIONS                        = $0031; { Network and Dial-up Connections }

  CSIDL_COMMON_MUSIC                     = $0035; { All Users\My Music }

  CSIDL_COMMON_PICTURES                = $0036; { All Users\My Pictures }

  CSIDL_COMMON_VIDEO                     = $0037; { All Users\My Video }

  CSIDL_RESOURCES                            = $0038; { Resource Directory }

  CSIDL_RESOURCES_LOCALIZED          = $0039; { Localized Resource Directory }

  CSIDL_CDBURN_AREA                        = $003b; { USERPROFILE\Local Settings\
                                                                       Application Data\Microsoft\CD Burning }

By using GetEnvironmentVariable function
GetEnvironmentVariable function returns Environment Variables value stored in Windows System. We just need to pass Environment variable name like WINDIR, TEMP, USERPROFILE. We need to use Sysutils unit in uses clause.


function GetEnvironmentVariable(const Name: string): string;


For example we will call this function to get windows directory.
procedure TForm1.Button1Click(Sender: TObject);
begin
  sWindowsDir := GetEnvironmentVariable(‘WINDIR’);
  ShowMessage(sWindowsDir);
end;


However we can use GetEnvironmentVariable function to get some extra information from system like Computer name, User Name etc. Following are environment variable lists we can use with GetEnvironmentVariable .

ALLUSERSPROFILE
APPDATA
CLIENTNAME
COMMONPROGRAMFILES
COMPUTERNAME
COMSPEC
HOMEDRIVE
HOMEPATH
LOGONSERVER
NUMBER_OF_PROCESSORS
OS
PATH
PATHEXT
PCTOOLSDIR
PROCESSOR_ARCHITECTURE
PROCESSOR_IDENTIFIER
PROCESSOR_LEVEL
PROCESSOR_REVISION
PROGRAMFILES
SESSIONNAME
SYSTEMDRIVE
SYSTEMROOT
TEMP
TMP
USERDOMAIN
USERNAME
USERPROFILE
WINDIR


By using other Window’s API functions Delphi provides. We need to use Windows Unit in uses clause.


{ Getting the Windows Directory } 
function GetWinDir: string; 
var 
  dir: array [0..MAX_PATH] of Char; 
begin 
  GetWindowsDirectory(dir, MAX_PATH); 
  Result := StrPas(dir); 
end; 


{ Getting the System Directory } 
function SystemDir: string; 
var 
  dir: array [0..MAX_PATH] of Char; 
begin 
  GetSystemDirectory(dir, MAX_PATH); 
  Result := StrPas(dir); 
end; 


{ Getting the Temporary Directory } 
function GetTempDir: string; 
var 
  Buffer: array[0..MAX_PATH] of Char; 
begin 
  GetTempPath(SizeOf(Buffer) — 1, Buffer); 
  Result := StrPas(Buffer); 

end; 

Как использовать OAuth2 со Spring Security в Java

Javaican 14.05.2025

Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .

Анализ текста на Python с NLTK и Spacy

AI_Generated 14.05.2025

NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .

Реализация DI в PHP

Jason-Webb 13.05.2025

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

Обработка изображений в реальном времени на C# с OpenCV

stackOverflow 13.05.2025

Объединение библиотеки компьютерного зрения OpenCV с современным языком программирования C# создаёт симбиоз, который открывает доступ к впечатляющему набору возможностей. Ключевое преимущество этого. . .

POCO, ACE, Loki и другие продвинутые C++ библиотеки

NullReferenced 13.05.2025

В C++ разработки существует такое обилие библиотек, что порой кажется, будто ты заблудился в дремучем лесу. И среди этого многообразия POCO (Portable Components) – как маяк для тех, кто ищет. . .

Паттерны проектирования GoF на C#

UnmanagedCoder 13.05.2025

Вы наверняка сталкивались с ситуациями, когда код разрастается до неприличных размеров, а его поддержка становится настоящим испытанием. Именно в такие моменты на помощь приходят паттерны Gang of. . .

Создаем CLI приложение на Python с Prompt Toolkit

py-thonny 13.05.2025

Современные командные интерфейсы давно перестали быть черно-белыми текстовыми программами, которые многие помнят по старым операционным системам. CLI сегодня – это мощные, интуитивные и даже. . .

Конвейеры ETL с Apache Airflow и Python

AI_Generated 13.05.2025

ETL-конвейеры – это набор процессов, отвечающих за извлечение данных из различных источников (Extract), их преобразование в нужный формат (Transform) и загрузку в целевое хранилище (Load). . . .

Выполнение асинхронных задач в Python с asyncio

py-thonny 12.05.2025

Современный мир программирования похож на оживлённый мегаполис – тысячи процессов одновременно требуют внимания, ресурсов и времени. В этих джунглях операций возникают ситуации, когда программа. . .

Работа с gRPC сервисами на C#

UnmanagedCoder 12.05.2025

gRPC (Google Remote Procedure Call) — открытый высокопроизводительный RPC-фреймворк, изначально разработанный компанией Google. Он отличается от традиционых REST-сервисов как минимум тем, что. . .

В Windows есть специальная функция, позволяющая получить пути к стандартным папкам.
В Delphi это будет выглядеть так:

uses ShlObj;

function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := '';
result := PChar(s);
end;

Функции нужно передать id папки, путь которой хотим получить. Список id идёт далее.
Следует помнить, что не все id будуть работать в разных версиях Windows. Например папки ‘Documents & Settungs’ нет в 98-х и бессмысленно пытаться получить путь к ней.
Смысл данного поста скорее не в том, чтобы показать, как пользоваться функцией SHGetSpecialFolderPath, а, скорее, дать перечень CSIDL и описание к ним на русском.

Вот полный код:

uses ShlObj;

const
{
// Следующие идентификаторы имеются в модуле ShlObj:
CSIDL_DESKTOP = $0000;
// Виртуальный каталог, представляющий Рабочий стол. (Корень в проводнике)
CSIDL_INTERNET = $0001;
// Виртуальный каталог для Internet Explorer.
CSIDL_PROGRAMS = $0002;
// Меню Пуск -> Программы
CSIDL_CONTROLS = $0003;
// Виртуальный каталог, содержащий иконки пунктов панели управления
CSIDL_PRINTERS = $0004;
// Виртуальный каталог, содержащий установленные принтеры
CSIDL_PERSONAL = $0005;
// Виртуальный каталог, представляющий папку "Мои документы"
// До Vista ссылался на какталог "Мои документы" на жёстком диске
CSIDL_FAVORITES = $0006;
// Избранное. (обычно C:\Documents and Settings\username\Favorites)
CSIDL_STARTUP = $0007;
// Пуск -> Программы -> Автозагрузка
CSIDL_RECENT = $0008;
// Недавние документы (обычно C:\Documents and Settings\username\My Recent Documents
// Для добавления ссылки документа используйте SHAddToRecentDocs
CSIDL_SENDTO = $0009;
// Папка, содержащая ярлыки меню "Отправить" (Sent to...) (обычно C:\Documents and Settings\username\SendTo)
CSIDL_BITBUCKET = $000a;
// Виртуальный каталог, содержащий файлы в корзине текущего пользователя
CSIDL_STARTMENU = $000b;
// Элементы меню Пуск текущего пользователя (обычно C:\Documents and Settings\username\Start Menu)
CSIDL_DESKTOPDIRECTORY = $0010;
// Рабочий стол текущего пользователя (обычно C:\Documents and Settings\username\Desktop)
CSIDL_DRIVES = $0011;
// Виртуальный каталог, представляющий папку "Мой компьютер"
CSIDL_NETWORK = $0012;
// Виртуальный каталог, представляющий "Сетевое окружение"
CSIDL_NETHOOD = $0013;
// Папка "My Nethood Places" (обычно C:\Documents and Settings\username\NetHood)
// В неё ссылки на избранные расшаренные ресурсы
CSIDL_FONTS = $0014;
// Папка, содержащая установленные шрифты. (обычно C:\Windows\Fonts)
CSIDL_TEMPLATES = $0015;
// Шаблоны документов. (Обычно Settings\username\Templates)
CSIDL_COMMON_STARTMENU = $0016;
// Элементы меню Пуск для всех пользователей. (обычно C:\Documents and Settings\All Users\Start Menu)
// Константы, начинающиеся на CSIDL_COMMON_ существуют только в NT версиях
CSIDL_COMMON_PROGRAMS = $0017;
// Меню Пуск -> программы для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs)
CSIDL_COMMON_STARTUP = $0018;
// Меню Пуск -> Программы -> Автозагрузка для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs\Startup)
CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
// Элементы Рабочего стола для всех пользователей (обычно C:\Documents and Settings\All Users\Desktop)
CSIDL_APPDATA = $001a;
// Папка, в которой рограммы должны хранить свои данные(C:\Documents and Settings\username\Application Data)
CSIDL_PRINTHOOD = $001b;
// Установленные принтеры. (обычно C:\Documents and Settings\username\PrintHood)
CSIDL_ALTSTARTUP = $001d; // DBCS
// user's nonlocalized Startup program group. Устарело.
CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS
// Устарело
CSIDL_COMMON_FAVORITES = $001f;
// Ссылки "Избранное" для всех пользователей
CSIDL_INTERNET_CACHE = $0020;
// Временные Internet файлы (обычно C:\Documents and Settings\username\Local Settings\Temporary Internet Files)
CSIDL_COOKIES = $0021;
// Папка для хранения Cookies (обычно C:\Documents and Settings\username\Cookies)
CSIDL_HISTORY = $0022;
// Хранит ссылки интернет истории IE
}

// Следующих идентификаторов нет в ShlObj:
CSIDL_ADMINTOOLS = $30;
// Административные инструменты текущего пользователя (например консоль MMC). Win2000+

CSIDL_CDBURN_AREA = $3b;
// Папка для файлов, подготовленных к записи на CD/DVD
// (Обычно C:\Documents and Settings\username\Local Settings\Application Data\Microsoft\CD Burning)

CSIDL_COMMON_ADMINTOOLS = $2f;
// Папка, содержащая инструменты администрирования

CSIDL_COMMON_APPDATA = $23;
// Папака AppData для всех пользователей. (обычно C:\Documents and Settings\All Users\Application Data)

CSIDL_COMMON_DOCUMENTS = $2e;
// Папка "Общие документы" (обычно C:\Documents and Settings\All Users\Documents)

CSIDL_COMMON_TEMPLATES = $2d;
// Папка шаблонов документов для всех пользователей (Обычно C:\Documents and Settings\All Users\Templates)

CSIDL_COMMON_MUSIC = $35;
// Папка "Моя музыка" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Music)

CSIDL_COMMON_PICTURES = $36;
// Папка "Мои рисунки" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Pictures)

CSIDL_COMMON_VIDEO = $37;
// Папка "Моё видео" для всех пользователей (C:\Documents and Settings\All Users\Documents\My Videos)

CSIDL_COMPUTERSNEARME = $3d;
// Виртуальная папка, представляет список компьютеров в вашей рабочей группе

CSIDL_CONNECTIONS = $31;
// Виртуальная папка, представляет список сетевых подключений

CSIDL_LOCAL_APPDATA = $1c;
// AppData для приложений, которые не переносятся на другой компьютер (обычно C:\Documents and Settings\username\Local Settings\Application Data)

CSIDL_MYDOCUMENTS = $0c;
// Виртуальный каталог, представляющий папку "Мои документы"

CSIDL_MYMUSIC = $0d;
// Папка "Моя музыка"

CSIDL_MYPICTURES = $27;
// Папка "Мои картинки"

CSIDL_MYVIDEO = $0e;
// Папка "Моё видео"

CSIDL_PROFILE = $28;
// Папка пользователя (обычно C:\Documents and Settings\username)

CSIDL_PROGRAM_FILES = $26;
// Папка Program Files (обычно C:\Program Files)

CSIDL_PROGRAM_FILESX86 = $2a;

CSIDL_PROGRAM_FILES_COMMON = $2b;
// Папка Program Files\Common (обычно C:\Program Files\Common)

CSIDL_PROGRAM_FILES_COMMONX86 = $2c;

CSIDL_RESOURCES = $38;
// Папка для ресерсов. Vista и выше (обычно C:\Windows\Resources)

CSIDL_RESOURCES_LOCALIZED = $39;

CSIDL_SYSTEM = $25;
// Папака System (обычно C:\Windows\System32 или C:\Windows\System)

CSIDL_SYSTEMX86 = $29;

CSIDL_WINDOWS = $24;
// Папка Windows. Она же %windir% или %SYSTEMROOT% (обычно C:\Windows)

function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := GetSpecialPath(CSIDL_APPDATA);
result := PChar(s);
end;

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


    Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
    Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…


    Определение системных папок
    , Windows,Temp, и т.д.

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,

      Здрасте всем!
      Подскажите пожалуйста как мне определить расположение системной папки временых файлов в WinXp текущего пользователя и папку временых файлов Windows!
      (с учетом того что винда может стоять не на диске С);
      Заранее очень благодарен !))))


      P.O.D



      Сообщ.
      #2

      ,


        Albinos_X



        Сообщ.
        #3

        ,

          Full Member

          Рейтинг (т): 16

          фпоиск…
          темп

          Цитата

            function c_GetTempPath: String;

            var

            Buffer: array[0..1023] of Char;

            begin

            SetString(Result, Buffer, GetTempPath(Sizeof(Buffer)-1,Buffer));

            end;

          этот код так же можно использовать для:
          GetCurrentDirectory
          GetSystemDirectory
          GetWindowsDirectory

          http://www.drkb.ru/


          Gonarh



          Сообщ.
          #4

          ,

            посмотри SHGetSpecialFolderPath в модуле ShlObj


            ViktorXP



            Сообщ.
            #5

            ,

              функция на получения пити

                function pathDir(num:integer):string;

                var

                  Allocator: IMalloc;

                  SpecialDir: PItemIdList;

                  FBuf: array[0..MAX_PATH] of Char;

                begin

                  if SHGetMalloc(Allocator) = NOERROR then

                  begin

                    SHGetSpecialFolderLocation(Form1.Handle, num, SpecialDir);

                    SHGetPathFromIDList(SpecialDir, @FBuf[0]);

                    Allocator.Free(SpecialDir);

                    result:=(string(FBuf));

                  end;

                end;

              а вт константы для ее

              Цитата

              CSIDL_DESKTOP
              CSIDL_INTERNET
              CSIDL_PROGRAMS
              CSIDL_CONTROLS
              CSIDL_PRINTERS
              CSIDL_PERSONAL
              CSIDL_FAVORITES
              CSIDL_STARTUP
              CSIDL_RECENT
              CSIDL_SENDTO
              CSIDL_BITBUCKET
              CSIDL_STARTMENU
              CSIDL_DESKTOPDIRECTORY
              CSIDL_DRIVES
              CSIDL_NETWORK
              CSIDL_NETHOOD
              CSIDL_FONTS
              CSIDL_TEMPLATES
              CSIDL_COMMON_STARTMENU
              CSIDL_COMMON_PROGRAMS
              CSIDL_COMMON_STARTUP
              CSIDL_COMMON_DESKTOPDIRECTORY
              CSIDL_APPDATA
              CSIDL_PRINTHOOD
              CSIDL_ALTSTARTUP
              CSIDL_COMMON_ALTSTARTUP
              CSIDL_COMMON_FAVORITES
              CSIDL_INTERNET_CACHE
              CSIDL_COOKIES
              CSIDL_HISTORY

              Добавлено
              и незабудь повесить два модуля
              ActiveX, ShlObj


              Testudo



              Сообщ.
              #6

              ,

                Цитата ViktorXP @

                и незабудь повесить два модуля
                ActiveX, ShlObj

                Функция GetTempPath, и вообще никаких модулей добавлять не надо (Windows всегда добавлен)


                ViktorXP



                Сообщ.
                #7

                ,

                  Цитата Testudo @

                  Функция GetTempPath, и вообще никаких модулей добавлять не надо (Windows всегда добавлен)

                  но зато у моей функции больше возможностей
                  не а канешно непротив твоей если там кроме одной етой папки ничево ненадо, сам зото чем меньше тем лудше


                  Meverik



                  Сообщ.
                  #8

                  ,

                    Непомню где, видел такие функции, может помогут:

                        function WinDir: string; // Определение папки Windows

                        var

                          intLen:integer;

                          strBuffer:string;

                        begin

                          SetLength(strBuffer,1000);

                          intLen:=GetWindowsDirectory(PChar(strBuffer),1000);

                          WinDir:=Trim(Copy(strBuffer,1,intLen));

                        end;

                        function SysDir: string; // Определение системной папки

                        var

                          intLen:integer;

                          strBuffer:string;

                        begin

                          SetLength(strBuffer,1000);

                          intLen:=GetSystemDirectory(PChar(strBuffer),1000);

                          SysDir:=Trim(Copy(strBuffer,1,intLen));

                        end;

                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                    0 пользователей:

                    • Предыдущая тема
                    • Delphi: Общие вопросы
                    • Следующая тема

                    [ Script execution time: 0,0287 ]   [ 16 queries used ]   [ Generated: 14.05.25, 12:20 GMT ]  

                    Понравилась статья? Поделить с друзьями:
                    0 0 голоса
                    Рейтинг статьи
                    Подписаться
                    Уведомить о
                    guest

                    0 комментариев
                    Старые
                    Новые Популярные
                    Межтекстовые Отзывы
                    Посмотреть все комментарии
                  • Тихий звук в наушниках windows 10 realtek
                  • Как определить размер файла подкачки windows 10
                  • Prolific 2303 driver windows 10
                  • Как обновить драйвера камеры на ноутбуке windows 10
                  • Как использовать зарезервированную оперативную память windows 10