显示多个外壳对象的属性表

Display property sheets for multiple shell objects

本文关键字:属性 对象 外壳 显示      更新时间:2023-10-16

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

对于显示属性窗口的一个项目非常简单 - 只需设置 .lpFile 字段。但是我无法了解如何显示多个项目的属性窗口。

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

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

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

PS:正如我最近了解到的那样,PIDLIST_ABSOLUTE是为具体的独特对象而唯一创建的。因此,两个或多个PIDLIST_ABSOLUTE无法连接起来。但问题仍然是现实的。

调用 IShellFolder::GetUIObjectOf,传递多个 pidls,并请求 IContextMenu,然后调用"properties"动词。——陈炜

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

德尔福最简单的方法:

从IExplorerBrowser或剪贴板获取数据对象

 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;