|
#1
|
||||
|
||||
Свойства файла
Всем огромный привет!!!
Подскажите пожалуйста как вызвать системное окно свойств файла, зная только его имя и путь. Заранее благодарен — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#2
|
|||
|
|||
Код:
procedure TMainForm.acImageFileProperiesExecute(Sender: TObject); var AFileName : String; begin AFileName := PPicList.GetFileName; If Not FileExists(AFileName) Then MessageDlg(Format(Language1.TranslateUserMessage('FileNotFound'),[AFileName]),mtError,[mbOK],0) Else ExecuteContextMenu(AFileName,'Properties'); end; и юнит: Код:
unit ShellContextMenu; interface uses Windows, SysUtils, Forms, ShlObj, ActiveX; function ExecuteContextMenu (const FileName, Cmd: string): Boolean; implementation function ExecuteContextMenu (const FileName, Cmd: string): Boolean; var ShellFolder : IShellFolder; FileObject : IShellFolder; Menu : IContextMenu; lpItemIdList, lpNameList: PItemIDList; WideStr : WideString; Malloc : IMalloc; Attributes, uLength : ULONG; Command : TCMInvokeCommandInfo; hr: HRESULT; begin Result := FALSE; if FileExists (FileName) then begin Menu := nil; Malloc := nil; FileObject := nil; ShellFolder := nil; try hr := SHGetMalloc (Malloc); if SUCCEEDED (hr) then begin hr := SHGetDesktopFolder (ShellFolder); if SUCCEEDED (hr) then begin WideStr := ExtractFilePath (FileName); hr := ShellFolder.ParseDisplayName (0, nil, PWideChar (WideStr), uLength, lpItemIdList, Attributes); if SUCCEEDED (hr) then begin hr := ShellFolder.BindToObject (lpItemIdList, nil, IID_IShellFolder, Pointer (FileObject)); if SUCCEEDED (hr) then begin WideStr := ExtractFileName (FileName); hr := FileObject.ParseDisplayName (0, nil, PWideChar (WideStr), uLength, lpNameList, Attributes); if SUCCEEDED (hr) then begin hr := FileObject.GetUIObjectOf (0, 1, lpNameList, IID_IContextMenu, nil, Pointer (Menu)); if SUCCEEDED (hr) then begin FillChar (Command, sizeof (Command), 0); Command.cbSize := sizeof (Command); Command.hwnd := Application.Handle; Command.lpVerb := PChar (Cmd); Command.nShow := SW_SHOW; Result := SUCCEEDED (Menu.InvokeCommand (Command)); end; end; end; end; end; end; finally Menu := nil; FileObject := nil; if Malloc <> nil then Malloc.Free (lpItemIdList); Malloc := nil; ShellFolder := nil; end; end; end; end. |
#3
|
||||
|
||||
Большое спасибо, немного переделал для отображения свойств папки
И еще один вопрос, для того чтобы вызвать свойства группы файлов, файлы необходимо вписать в одну стрчку чередуя их #0#0 или каким-то другим делителем? #0#0 у меня не сработал. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 24.07.2008 в 18:15. |