我在C#.Net中创建一个程序,其中一个功能允许用户从列表中选择一个屏幕保护程序并预览或配置它。在做了一些研究之后,我发现通过使用“/ c”参数调用* .scr文件将显示配置对话框。
在命令行中使用此参数可以正常工作(“C:\ Windows \ System32> PhotoScreensaver.scr / c”)但是从C#调用它将始终导致屏幕保护程序被简单地显示,就好像参数被忽略一样
我使用的代码是:
Process.Start(ScreensaverPath, "/c");
其中ScreensaverPath包含* .scr文件的路径(包括)。
我也试过这段代码,但无济于事:
Process.Start(ScreensaverPath + "/c");
非常感谢任何帮助。
P.S。我使用的是Windows 8 Pro,但我需要解决方案与XP和更新版本兼容。
答案 0 :(得分:1)
我建议你首先创建ProcessStartInfo的实例设置你的属性,然后将实例传递给Process.Start(instanceOfProcessStartInfo)
我有直接使用Process.Start的类似问题,这是它的解决方案
答案 1 :(得分:1)
我认为直接传递args不会起作用。如果在“开始”|“运行”框中键入c:\windows\system32\sspipes.scr /c
,这也将直接进入屏幕保护程序,而不会显示配置屏幕。
我已经能够通过cmd文件执行此操作,因此解决方案(尽管不完美)是在某个地方创建一个cmd文件,其中只有一行%1 /c
然后你可以将屏幕保护程序的路径和文件名传递给cmd文件,这将打开配置屏幕
一些快速而肮脏的VB代码将说明
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim path As String = "C:\temp\scr.cmd"
Dim args As String = "C:\WINDOWS\system32\sspipes.scr"
Dim psi As New ProcessStartInfo
psi.Arguments = args
psi.FileName = path
Process.Start(psi)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim app As String = "C:\WINDOWS\system32\sspipes.scr"
Process.Start(app)
End Sub
End Class
这是一个带有2个按钮的表单。 Button1显示配置屏幕,按钮2运行屏幕保护程序。显然你会删除硬编码等,所以请原谅糟糕的编码风格。
您只需创建一个名为scr.cmd的文本文件,其中包含%1 /c
并将其保存到c:\temp