none
如何调用windows自带的windows图片查看器,查看List<string>文件路径列表中的图片? RRS feed

  • 问题

  • windows图片查看器不是独立的程序文件,而是一个可以通过RUNDLL32.exe调用的dll文件,其文件路径是C:\WINDOWS\system32\shimgvw.dll。

    想为自己的程序增加图片查看功能,也就是类似windows图片查看器或美图看看那样,但是要求后台的图片路径列表的图片可以是不同目录下的。虽然知道大致怎么写这个东西。但是可以的话,想调已有的程序帮我实现,减少成本。

    有一个List<string>对象,里面所存储的都是图片文件路径,而且每个图片路径并不都位于同一个目录下。如何调用windows图片查看器浏览List<string>里面所存的文件路径指向的图片?并且上一张和下一张已经幻灯片浏览的图片内容都在这个List<string>内,



    2017年6月8日 13:05

答案

  • windows图片查看器是个IDropTarget类型的文件关联,要传多个文件的话,需要调用Windows Shell的接口。

    能加个界面的话,可以用IExplorerBrowser+IResultsFolder将要不同目录的文件聚合到同一个目录视图下(类似文件打开对话框里的搜索结果),参考Windows SDK里面的ExplorerBrowserCustomContents实例。这样这些文件就有了共同的父IShellFolder,相当于在同一个虚拟目录下,可以用ShellExecute打开视图里面的文件(需要先获得每个文件的pidl)。

    如果不能有界面的话,可以用CDefFolderMenu_Create2创建个菜单之后InvokeCommand。但是默认的菜单是缺东西的,因为SHGetDesktopFolder+不同目录下的文件创建出来的DataObject的时候没有实现HD_DROP。你可以聚合系统的SHGetDesktopFolder来提供自己的IDataObject实现。



    Visual C++ MVP





    2017年6月9日 17:16
    版主

全部回复

  • Hi  便携式家园,

    感谢你在MSDN论坛发帖。

    你现在的工程是基于.NET Framework开发的吗?如果是,你可以考虑在程序中另起一个新的进程,指明这个进程的需要调用用的exe,以及EXE需要的参数。 这样就可以调用 windows 的图片预览器,下面是部分代码,你可以参考一下:

    Process photoViewer = new Process();
    photoViewer.StartInfo.FileName = @"The photo viewer file path";
    photoViewer.StartInfo.Arguments = @"Your image file path";
    photoViewer.Start();

    你需要指定这个应用程序的路径,以及需要的参数,就可以执行这exe程序。

    因为你需要切换图片,你需要修改这个argument这个参数,通过list<string>.

    一般是没有类似的代码,都是需要我们自己去完成。 如果你在开发中遇到问题,请随时联系我们。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年6月9日 7:01
    版主
  • windows图片查看器是个IDropTarget类型的文件关联,要传多个文件的话,需要调用Windows Shell的接口。

    能加个界面的话,可以用IExplorerBrowser+IResultsFolder将要不同目录的文件聚合到同一个目录视图下(类似文件打开对话框里的搜索结果),参考Windows SDK里面的ExplorerBrowserCustomContents实例。这样这些文件就有了共同的父IShellFolder,相当于在同一个虚拟目录下,可以用ShellExecute打开视图里面的文件(需要先获得每个文件的pidl)。

    如果不能有界面的话,可以用CDefFolderMenu_Create2创建个菜单之后InvokeCommand。但是默认的菜单是缺东西的,因为SHGetDesktopFolder+不同目录下的文件创建出来的DataObject的时候没有实现HD_DROP。你可以聚合系统的SHGetDesktopFolder来提供自己的IDataObject实现。



    Visual C++ MVP





    2017年6月9日 17:16
    版主