Форум: "Начинающим";
Текущий архив: 2011.02.27;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c