Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1290029388
Юрий
2010-11-18 00:29
2011.02.27
С днем рождения ! 18 ноября 2010 четверг


15-1289566593
Wc2
2010-11-12 15:56
2011.02.27
Круговое меню


2-1291636226
новичок95
2010-12-06 14:50
2011.02.27
организация кода


3-1253521934
alsov
2009-09-21 12:32
2011.02.27
Ошибка подключения к mssql 2005


2-1287694639
Ллирик
2010-10-22 00:57
2011.02.27
Offset на строковую константу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский