显示多个shell对象的属性表

时间:2012-05-04 10:01:03

标签: c++ winapi windows-shell shellexecute

我必须显示指定项目的属性窗口:文件夹和文件。

对于显示属性窗口的一个项目非常简单 - 只需设置.lpFile字段即可。但我无法得到如何显示几个项目的属性窗口。

1)枚举.lpFile中的文件,如“”file1.txt“”file2.txt“”等等不起作用。即使它起作用也不适用,因为文件列表可能太大了。

2)通过PIDLIST_ABSOLUTE工作没有带来任何结果。可以通过ILCreateFromPath为单个文件创建PIDLIST_ABSOLUTE,但不能将多个PIDLIST_ABSOLUTE合并为一个。

有没有人有任何解决方法?任何答案将不胜感激

PS:正如我最近所理解的那样,PIDLIST_ABSOLUTE是为具体的唯一对象创建的。因此无法连接两个或多个PIDLIST_ABSOLUTE。但问题仍然存在。

2 个答案:

答案 0 :(得分:0)

  

调用IShellFolder :: GetUIObjectOf,传递多个pidl,并要求输入   IContextMenu,然后调用“属性”动词。 - Raymond Chen

谢谢你,雷蒙德。它有效!

答案 1 :(得分:0)

delphi中最简单的方法:

从IExplorerBrowser或剪贴板中获取DataObject

 if (OleGetClipboard(LDataObject) = S_OK) then
    SHMultiFileProperties(LDataObject, 0);

否则使用动词'属性':

function TExplorerFrame.DoVerb(Verb: AnsiString): Boolean;
var
  LFolderView: IFolderView2;
begin
  Result := False;
  if Supports(FCurrentShellView, IID_IFOLDERVIEW2, LFolderView) then
  begin
    if Verb = 'default' then
      Result := (LFolderView.InvokeVerbOnSelection(nil) = S_OK)
    else
      Result := (LFolderView.InvokeVerbOnSelection(pAnsiChar(@Verb[1])) = S_OK);
  end;
end;