Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свойства файла [D7, WinXP]


Страницы:   1 2

Cj ©   (2007-03-08 05:04:00) 

Напомните пожалуйста, какие параметры надо давать EXPLORER-у для вывода свойств файла\папки. Заранее спасибо.


Rouse_   (2007-03-09 12:49:00) [21]

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm2 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 end;

var
 Form2: TForm2;

implementation

uses
 ShlObj,
 ActiveX;

{$R *.dfm}

procedure ShowFileOrFolderOption(Path: String);
var
 CoInit, AResult: HRESULT;
 CommonDir, FileName: String;
 Desktop, ShellFolder: IShellFolder;
 pchEaten, Attr: Cardinal;
 PathPIDL: PItemIDList;
 FilePIDL: array [0..1] of PItemIDList;
 M: IMAlloc;
 Context: IContextMenu;
 AInvokeCommand: TCMInvokeCommandInfo;
begin
 // Первичная инициализация
 Attr := 0;
 PathPIDL := nil;
 CoInit := CoInitializeEx(nil, COINIT_MULTITHREADED);
 try
   // Получаем пути и имя фала
   CommonDir := ExtractFilePath(Path);
   FileName := ExtractFileName(Path);
   // Получаем указатель на интерфейс рабочего стола
   if SHGetDesktopFolder(Desktop) <> S_OK then
     RaiseLastOSError;
   // Если работаем с папкой
   if FileName = '' then
   begin
     // Получаем указатель на папку "Мой компьютер"
     if (SHGetSpecialFolderLocation(0, CSIDL_DRIVES, PathPIDL) <> S_OK) or
       (Desktop.BindToObject(PathPIDL,  nil,  IID_IShellFolder,
         Pointer(ShellFolder)) <> S_OK) then RaiseLastOSError;
     // Получаем указатель на директорию
     ShellFolder.ParseDisplayName(0, nil, StringToOleStr(CommonDir),
       pchEaten, FilePIDL[0], Attr);
   end
   else
   begin
     // Получаем указатель на папку "Мой компьютер"
     if (Desktop.ParseDisplayName(0, nil, StringToOleStr(CommonDir),
       pchEaten, PathPIDL, Attr) <> S_OK) or
       (Desktop.BindToObject(PathPIDL, nil, IID_IShellFolder,
         Pointer(ShellFolder)) <> S_OK) then RaiseLastOSError;
     // Получаем указатель на файл
     ShellFolder.ParseDisplayName(0, nil, StringToOleStr(FileName),
       pchEaten, FilePIDL[0], Attr);
   end;

   // Получаем указатель на контектсное меню файла
   AResult := ShellFolder.GetUIObjectOf(0, 1, FilePIDL[0],
     IID_IContextMenu, nil, Pointer(Context));
   if Succeeded(AResult) then
   begin
     FillMemory(@AInvokeCommand, SizeOf(AInvokeCommand), 0);
     with AInvokeCommand do
     begin
       cbSize := SizeOf(AInvokeCommand);
       hwnd := 0;
       lpVerb := PChar('properties'); // строковая константа для операции над элементом...
       fMask := CMIC_MASK_FLAG_NO_UI;
       nShow := SW_SHOWNORMAL;
     end;
     // Выполнение команды...
     Context.InvokeCommand(AInvokeCommand);
   end;

 finally
   // Освобождаем занятые ресурсы чтобы небыло утечки памяти
   // Для освобождения использем IMalloc
   SHGetMAlloc(M);
   if M <> nil then
   begin
     if FilePIDL[0] <> nil then
       M.Free(FilePIDL[0]);
     if PathPIDL <> nil then
       M.Free(PathPIDL);
   end;
   if CoInit = S_OK then CoUninitialize;
 end;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
 ShowFileOrFolderOption('c:\');
 ShowFileOrFolderOption('c:\1.txt');
end;

end.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо