process.start更多图片

Andy75

成员
已加入
2020年5月29日
留言内容
6
编程经验
1-3
大家好,
我有一个从openFileDialog(Windows 10)获取的字符串变量(路径)。
我想将此路径传递给Process.Start,以开始浏览文件夹的图像。
我想展示"next" and "previous"也可以使用按钮,用户可以使用鼠标箭头移动。
这怎么可能?
我尝试过
"ProcessStartInfo startInfo =新的ProcessStartInfo(fileImage)",
但是下一个和上一个按钮不存在。
尖端?

谢谢
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,602
地点
弗吉尼亚州切萨皮克
编程经验
10+
Unfortunately that is not going to work. When you call Process.Start() giving it just a filename the default image viewer is launched by Windows and you don't have any control over that viewer that is launched. That viewer may not be the Win10 Photo Viewer. It may be Adobe. It may ACDSee. It may be plain old MSPaint.exe.

要获得所需的控制权,您需要使用上一个/下一个按钮和一个图片框来创建一个表单。只需加载"current"图像进入图片框,并在按下下一个和上一个按钮时采取适当的措施。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,073
地点
挪威
编程经验
10+
他说的是MS Photos应用程序,当从资源管理器中打开图像文件时,您可以浏览同一文件夹中的上一个/下一个,但是使用Process.Start,该应用程序仅锁定到该文件。我尝试了几种方法来打开带有图像文件路径的应用程序,并且使其在正常浏览器交互作用下的表现不走运。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
你可以这样做 :
C#:
            const string Location_ToOpen = @"C:\Users\user\Downloads\Imported Pics\102ND500\Canapy Shots\Me In Canopy\Copyright\SCP_3546.jpg";
            ProcessStartInfo Process_Info = new ProcessStartInfo(Location_ToOpen, @"%SystemRoot%\System32\rundll32.exe % ProgramFiles %\Windows Photo Viewer\PhotoViewer.dll, ImageView_Fullscreen %1")
            {
                UseShellExecute = true,
                WorkingDirectory = Path.GetDirectoryName(Location_ToOpen),
                FileName = Location_ToOpen,
                Verb = "OPEN"
            };
            Process.Start(Process_Info);
经过测试和工作。希望能帮助到你。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
约翰

我假设是W10?

为我工作。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
如果文件夹中没有其他照片,则不会有下一张/上一张。

我也在W10上。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
开导我?也许我们可以积累一个友好的解决方案...
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,073
地点
挪威
编程经验
10+
他说的是MS Photos应用程序,当从资源管理器中打开图像文件时,您可以浏览同一文件夹中的上一个/下一个,但是使用Process.Start,该应用程序仅锁定到该文件。我尝试了几种方法来打开带有图像文件路径的应用程序,并且使其在正常浏览器交互作用下的表现不走运。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
我想将此路径传递给Process.Start,以开始浏览文件夹的图像。
他要的是我提出的内容,我给出的代码通过使用Photos Previewer应用程序完成了。好吧,它实际上是一个DLL,但无论如何。

您能为我提供您所指内容的屏幕截图,以防我认为不是吗?
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,073
地点
挪威
编程经验
10+
1590884645674.png


使用Process打开文件时,没有此类导航。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
即使以最大缩放比例,我也无法分辨屏幕截图中是哪个应用程序。但这不是我为其提供代码解决方案的那个。但是,它将按照他的要求进行。只是不与您截屏的任何应用程序一起使用。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
Unfortunately that is not going to work. When you call Process.Start() giving it just a filename the default image viewer is launched by Windows and you don't have any control over that viewer that is launched. That viewer may not be the Win10 Photo Viewer. It may be Adobe. It may ACDSee. It may be plain old MSPaint.exe.

要获得所需的控制权,您需要使用上一个/下一个按钮和一个图片框来创建一个表单。只需加载"current"图像进入图片框,并在按下下一个和上一个按钮时采取适当的措施。
这就是潜在的功能问题。正如我的邪恶双胞胎所指出的那样。它确实取决于安装了什么预览器,这将决定其为什么对您不起作用以及对我不起作用的基本功能。跟随。前提是OP为Windows Photo Previewer安装了W7 DLL,但这仍然是一个有效的答案:
You can do this :
C#:
            const string Location_ToOpen = @"C:\Users\user\Downloads\Imported Pics\102ND500\Canapy Shots\Me In Canopy\Copyright\SCP_3546.jpg";
            ProcessStartInfo Process_Info = new ProcessStartInfo(Location_ToOpen, @"%SystemRoot%\System32\rundll32.exe % ProgramFiles %\Windows Photo Viewer\PhotoViewer.dll, ImageView_Fullscreen %1")
            {
                UseShellExecute = true,
                WorkingDirectory = Path.GetDirectoryName(Location_ToOpen),
                FileName = Location_ToOpen,
                Verb = "OPEN"
            };
            Process.Start(Process_Info);
经过测试和工作。希望能帮助到你。
如果我们的OP没有或不想安装或使用W7 DLL。然后,他们将需要传递您正在使用的UWP版本的受支持参数。这也包括将UWP文件也定向为启动。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
我应该指出,我不是针对UWP版本,而是针对W7中较旧的DLL。看截图:
什么sApp图片2020-05-31 at 01.54.58.jpeg
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,974
地点
英国
编程经验
10+
甚至有一个uri方案,但是在UWP之外似乎不起作用: 启动URI的默认应用-UWP applications
现在,我知道您都在使用Microsoft商店中的photos应用程序,而不是W7中的旧应用程序。 UWP类型的应用程序都在沙盒上运行,因此,存在一些安全策略,这些策略阻止我们在其环境中执行其他进程。所以 可能是 还有一些安全政策会阻止我们将参数传递给photos应用?

关于为什么您的链接不起作用 @约翰·H ;这可能是一个错误,可能需要修补。在这种情况下,请等待我们的运气好运。 @安迪75 -看来您有两个选择。
  1. 将Windows 7图像预览器与您的软件捆绑在一起
  2. 或做 @跳伞 建议并创建自己的预览器。
 
最佳 底部