|
Вопрос # 3 269/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Необходимо показать системное окно Свойства файла, но не для одного, а для нескольких. В инете полно инфы как это сделать для одного файла (например, http://vrssoft2004.narod.ru/htm/sovet_proritets_file.htm). Как это можно сделать для нескольких?
Заранее спасибо.
 |
Вопрос задал: VIRUS (статус: Посетитель)
Вопрос отправлен: 11 октября 2009, 03:09
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Игорь Данилевич
Здравствуйте, VIRUS!
Ответ на Ваш вопрос можно найти опять же в инете:
http://www.forum.vingrad.ru/findpost-1781959.html
Используется ф-я SHMultiFileProperties.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
- Dialogs, ShellAPI, ShlObj, ActiveX, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- function SHMultiFileProperties(pdtObj: IDataObject;
- dwFlags: DWORD): HRESULT; stdcall; external 'shell32.dll';
-
- implementation
-
- {$R *.dfm}
-
- function ShowPropertiesDialog(const AFolder: String; Files: TStrings): HRESULT;
- const
- IID_IDataObject: TGUID = (
- D1: $0000010E; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00,
- $00, $00, $00, $46));
- var
- Data: IDataObject;
- FolderID, FileID: PItemIDList;
- Desktop: IShellFolder;
- Folder: IShellFolder2;
- PFolder, PFileName: PWideChar;
- Malloc: IMalloc;
- I: Integer;
- ItemList: array of PItemIDList;
- begin
- Result := E_INVALIDARG;
- if not Assigned(Files) then
- Exit;
- if Succeeded(SHGetMalloc(Malloc)) then
- try
- if Succeeded(SHGetDesktopFolder(Desktop)) then
- try
- PFolder := StringToOleStr(AFolder);
- if Succeeded(Desktop.ParseDisplayName(0, nil, PFolder, PULONG(nil)^,
- FolderID, PULONG(nil)^)) then
- try
- if Succeeded(Desktop.BindToObject(FolderID, nil, IID_IShellFolder2,
- Folder)) then
- try
- SetLength(ItemList, Files.Count);
- for I := 0 to Files.Count - 1 do
- begin
- PFileName := StringToOleStr(Files[I]);
- if Succeeded(Folder.ParseDisplayName(0, nil, PFileName,
- PULONG(nil)^, FileID, PULONG(nil)^)) then
- ItemList[I] := FileID;
- end;
- if Succeeded(Folder.GetUIObjectOf(0, Files.Count, ItemList[0],
- IID_IDataObject, nil, Data)) then
- try
- Result := SHMultiFileProperties(Data, 0);
- finally
- Data := nil;
- end;
- finally
- for I := 0 to High(ItemList) do
- if Assigned(ItemList[I]) then
- Malloc.Free(ItemList[I]);
- Folder := nil;
- end;
- finally
- Malloc.Free(FolderID);
- end;
- finally
- Desktop := nil;
- end;
- finally
- Malloc := nil;
- end;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- List: TStringList;
- begin
- List := TStringList.Create;
- with List do
- try
- Sorted := True;
- Duplicates := dupIgnore;
-
- Append('explorer.exe');
- Append('win.ini');
- Append('regedit.exe');
- if Succeeded(ShowPropertiesDialog('C:WINDOWS', List)) then
- MessageBox(Handle, 'Success!', 'Information', MB_ICONINFORMATION);
- finally
- Free;
- end;
- end;
-
- end.
 |
Ответ отправил: Игорь Данилевич (статус: 3-ий класс)
Время отправки: 11 октября 2009, 21:47
Оценка за ответ: 5
Комментарий к оценке: Спасибо.
А если файлы лежат в разных папках?
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 12 октября 2009, 17:36; участников в обсуждении: 1.
|
VIRUS (статус: Посетитель), 12 октября 2009, 17:36 [#1]:
А если файлы лежат в разных папках?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|