delphi 使用默认图像查看器打开多个图像(Microsoft.Photos.exe)

pcrecxhr  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(173)

例如,当我在Windows资源管理器中选择三个图像并按回车键时,默认图像查看器打开,我可以浏览图像。
这段代码对一张图片很好,但我无法浏览这些图片:

ShellExecute(Handle, PChar('open'), PChar(filename), PChar(''), PChar(path), SW_SHOWNORMAL);

字符串
我尝试用分号作为文件名分隔符,如下所示:

var
  path, filename: string;
  filenames: TStringList;
begin
  path := IncludeTrailingPathDelimiter(TPath.GetTempPath);
  filenames := TStringList.Create;
  try
    filenames.Delimiter := ';';
    ForEachSelectedRecordInGrid(
      DragDBGrid1,
      procedure begin
        filename := Trim(ExtractFileName(DateienQDateiname.AsString));
        if (filename <> '') then begin
          filename := path + filename;
          DateienQDatei.SaveToFile(filename);
          filenames.Add(filename);
        end;
      end
    );
    if (filenames.Count > 0) then
      ShellExecute(Handle, PChar('open'), PChar(filenames.DelimitedText), PChar(''), PChar(path), SW_SHOWNORMAL);
  finally
    filenames.Free;
  end;
end;


filenames.DelimitedText的内容是
C:\Users\completestranger\AppData\Local\Temp\cat.png; C:\Users\completesstranger\AppData\Local\Temp\dog.png; C:\Users\completestranger\AppData\Local\Temp\mouse.png
没找到
你知道吗?

k2arahey

k2arahey1#

无法使用ShellExecute/Ex()同时打开多个文件。您必须单独打开它们,并让Shell/ImageViewer根据需要处理它们。
否则,您可以获得表示多个文件的IContextMenu接口(即,获取父文件夹的IShellFolder,然后使用IShellFolder.GetUIObjectOf()和相关文件ITEMID s的数组),然后通过IContextMenu.InvokeCommand()方法调用'open' predicate 。
请参阅:
Win32 iContextMenu: How to generate context menu for multi-selected items?
Displaying a property sheet for multiple files

相关问题