Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.27;
Скачать: CL | DM;

Вниз

IShellFolder и диалог свойства файлов   Найти похожие ветки 

 
SIV5000   (2010-11-28 10:39) [0]

Народ привет. Подскажите пожалуйста. Есть процедура для получения свойств файлов:

procedure ShellMenuExecute(Folder: IShellFolder; var Pidl: PItemIDList;
const Count: Integer; const AHandle: THandle);
var
 CM : IContextMenu;
 CI : TCmInvokeCommandInfo;
begin
 if Folder <> nil then begin
   if (Folder.GetUIObjectOf(AHandle, Count, Pidl, IID_IContextMenu, nil, Pointer(CM)) = NOERROR)
  then begin
     ZeroMemory(@CI, SizeOf(CI));
     CI.cbSize := SizeOf(TCmInvokeCommandInfo);
     CI.hwnd := AHandle;
     CI.lpVerb := "properties";
     CM.InvokeCommand(CI);
     CM := nil;
   end;
 end;
end;

Запускаю вот так:

procedure TForm1.Button1Click(Sender: TObject);
var
IDListArray: TIDListArray;
Desktop: IShellFolder;
PIDL1, PIDL2: PItemIDList;
begin
  GetPIDLFromPath(Handle, "02.bmp", PIDL1);
  GetPIDLFromPath(Handle, "03.bmp", PIDL2);
  SetLength(IDListArray, 2);
  IDListArray[0]:= PIDL1;
  IDListArray[1]:= PIDL2;

 SHGetDesktopFolder(Desktop);
 ShellMenuExecute(Desktop, IDListArray[0], 2, handle);
end;

1. Файлы 02.bmp, 03.bmp находяться на рабочем столе, а как получить IShellFolder если файлы будут находиться D:\Pictures\02.bmp... \03.bmp ?

Я не много знаю о IShellFolder, но там где я читал, сказано что сначала надо получить интерфейс папки а потом можно работать с ее содержимым. Так вот такой вопрос.
2. А как быть если нужно работать с многими файлами, который находяться в разных местах? Вот как запустить вышепредставленную процедуру если файлы будут:

D:\Pictures\02.bmp
С:\10.bmp
E:\Video\film.avi

???????
На какую тогда папку нужно получать интерфейс если файлы не в одной и той же папке?
3. И еще вопрос, относиться к преведенной процедуре. Как получить свойства корневого диска (например С:\). Что тогда указывать в Folder: IShellFolder; и в var Pidl: PItemIDList ????


 
sniknik ©   (2010-11-28 11:12) [1]

> что сначала надо получить интерфейс папки
SHGetDesktopFolder получает не интерфейс папки, а виндовой оболочки (проводника, грубо).
то что у тебя переменная названа в программе Desktop вовсе не означает, что туда только интерфейс десктопа/рабочего стола запишется.

> GetPIDLFromPath
это вроде только для висты, нет?  т.е. на XP уже забили, а жаль хорошая операционка...
не пробовал указывать не файл, а вместе с путем?


 
SIV5000   (2010-11-28 15:15) [2]


> что у тебя переменная названа в программе Desktop вовсе
> не означает, что туда только интерфейс десктопа/рабочего
> стола запишется.

Ето я знаю.

> > GetPIDLFromPath это вроде только для висты, нет?

Забыл уточнит, GetPIDLFromPath - ето функция которая возвращает PItemIDList из указаного пути. Нашел ее в нете, есть еще другая функция только на оборот. Но ето не важно, с ней проблем нет.

P.S. А лучше XP пока еще нет, и если майкрософт будет продолжать в том же роде, то лучше XP и не будет :)


 
SIV5000   (2010-11-30 20:56) [3]

Народ, так что, никто не работал с IShellFolder?


 
Amoeba_   (2010-11-30 21:40) [4]

Может эта статья сгодится?
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=57


 
SIV5000   (2010-12-04 11:59) [5]

Спасибо за ссылку, прочитал но ответа не нашел. Ну может кто нибуть дать ответ? Как я выше писал, чтоб работать с содержимым папки нужно сначала получить интерфейс етой папки (IShellFolder), тогда интерфейс какой папки нужно получать если файлы находяться в разных директориях?
 К примеру, если запускаем поиск файлов в експлорере, нам выдает список файлов нахоящихся в разных директориях, и с ними можно так же работать (показать контекстное меню, копировать.....) . Еще в начале темы я привел процедуру открытия диалога свойств файлов, но она работает если файлы в одной папке. Я сначала получаю итерфейс етой папки (Folder: IShellFolder;) и в результате выплывает диалог.
Так как же все-таки ето сделать? Неужели никто не знает и не может  растолковать новичку?


 
sniknik ©   (2010-12-04 18:28) [6]

> но ответа не нашел.
ответ. 2-3 предложение статьи -

Пространство имён оболочки являет собой иерархически упорядоченный мир объектов, известных операционной системе, с их свойствами и предоставляемыми действиями.

Основное пространство имён начинается с корневого объекта "Рабочий стол", и его легко исследовать, запустив приложение "Проводник".


запусти проводник и посмотри как "адресоваться".

> и не может  растолковать новичку?
лучше чем статья? вряд ли.



Страницы: 1 вся ветка

Текущий архив: 2011.02.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1291707614
novichek
2010-12-07 10:40
2011.02.27
определить ОС


2-1291283179
Великий
2010-12-02 12:46
2011.02.27
Посимвольное считывание из Edit а


6-1235464649
В-В
2009-02-24 11:37
2011.02.27
Как запустить сетевое подключение Windows?


4-1245770042
lexik
2009-06-23 19:14
2011.02.27
Иконка в Tray без окна. (Без VCL)


15-1290162602
VirEx(work)
2010-11-19 13:30
2011.02.27
TListBox перерисовка