уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Сегодня рассмотрим ещё один простой способ определения специальных папок 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;
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Определение системных папок
, Windows,Temp, и т.д.
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Здрасте всем! |
P.O.D |
|
Albinos_X |
|
Full Member Рейтинг (т): 16 |
фпоиск… Цитата
function c_GetTempPath: String; var Buffer: array[0..1023] of Char; begin SetString(Result, Buffer, GetTempPath(Sizeof(Buffer)-1,Buffer)); end;
этот код так же можно использовать для: http://www.drkb.ru/ |
Gonarh |
|
посмотри SHGetSpecialFolderPath в модуле ShlObj |
ViktorXP |
|
функция на получения пити
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 Добавлено |
Testudo |
|
Цитата ViktorXP @ и незабудь повесить два модуля Функция GetTempPath, и вообще никаких модулей добавлять не надо (Windows всегда добавлен) |
ViktorXP |
|
Цитата Testudo @ Функция GetTempPath, и вообще никаких модулей добавлять не надо (Windows всегда добавлен)
но зато у моей функции больше возможностей |
Meverik |
|
Непомню где, видел такие функции, может помогут:
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 ]