Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Путь и Имя папки My Computer

Delphi , Файловая система , Директории

Путь и Имя папки My Computer

Раздолбил как-то компьютерный вирус очередной винчестер и на обломках написал: знание - страшная сила.

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

Операционная система windows 32 основывается на оболочке, которая использует виртуальные папки, такие, как 'my computer' (Мой компьютер), 'desktop' (Рабочий Стол) и 'recycle bin' (Корзина). Некоторые из них являются частью физической файловой системы. Другими словами, они имеют соответствующий реальный каталог в файловой системе. Это относится, например, к системным папкам 'desktop' и 'recycle bin'. Данные каталоги могут быть использованы как InitialDir в TOpenDialog, но сначала вы должны получить их физическое месторасположение, которое может различаться на других компьютерах. Чтобы узнать их реальное месторасположение на локальном диске, вы должны воспользоваться некоторыми специальными вызовами API (смотри пример ниже). Другие папки, типа 'my computer' и 'printers' не являются частью файловой системы, они чисто виртуальные. Обращаю ваше внимание на то, что такие папки можно использовать в TOpenDialog, но никак не в InitialDir.

Виртуальные папки (я немного упрощаю) имеют тип SHITEMID (идентификатор элемента). Получить к ним доступ можно используя pointers to item identifiers list (PIDL, указатель на элемент списка идентификаторов). Для того, чтобы получить PIDL специальной папки, вы должны использовать функцию SHGetSpecialFolder. Физическое месторасположение соответствующей директории можно получить, передавая PIDL в качестве входного параметра функции GetPathFromIDList. Если папка является частью файловой системы, функция возвращает путь к ней в виде строки (которая впоследствии может использоваться как InitialDir). Но если вы хотите использовать OpenDialog только с виртуальными папками (например, с 'my computer'), то в принципе вы должны использовать PIDL как InitialDir, но это работать не будет. Я думаю дело в том, что TOpenDialog использует PIDLs только для просмотра, а для InitialDir требуются только реальные (физические) каталоги.

Вот пример, показывающий как получить путь к 'recent documents' (последние документы) и использовать его в качестве InitialDir:


procedure TForm1.Button1Click(Sender: TObject);
var
  PIDL: Pointer;
  Path: LPSTR;
const
  CSIDL_RECENT = $0008; 
begin
  Path := StrAlloc(MAX_PATH);
  SHGetSpecialFolderLocation(Handle, CSIDL_RECENT, @PIDL);
  // возвращает False если папка не является частью файловой системы
  if SHGetPathFromIDList(PIDL, Path) then 
  begin
    OpenDialog1.InitialDir := Path;
    OpenDialog1.Execute;
  end;
  StrDispose(Path);
end;

Я думаю вам необходимо создать класс-оболочку для этих вызовов API. Они располагаются в shell32.dll. Наилучший совет, который я могу дать при изучении этого вопроса - копнуть поглубже файл ShlObj.h. Я также не программирую в C, но почерпнул оттуда немало ценной информации.

Вот некоторые константы, которые вам могут понадобиться:


CSIDL_DESKTOP            = $0000;
CSIDL_PROGRAMS           = $0002;
CSIDL_CONTROLS           = $0003;
CSIDL_PRINTERS           = $0004;
CSIDL_PERSONAL           = $0005;
CSIDL_STARTUP            = $0007;
CSIDL_RECENT             = $0008;
CSIDL_SENDTO             = $0009;
CSIDL_BITBUCKET          = $000a;
CSIDL_STARTMENU          = $000b;
CSIDL_DESKTOPDIRECTORY   = $0010;
CSIDL_DRIVES             = $0011;  // Мой компьютер
CSIDL_NETWORK            = $0012;
CSIDL_NETHOOD            = $0013;
CSIDL_FONTS              = $0014;
CSIDL_TEMPLATES          = $0015;

Статья Путь и Имя папки My Computer раздела Файловая система Директории может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Директории ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
29.03.2024 10:52:25/0.038009881973267/0