我正在用C#.Net创建一个程序,其中一个功能允许用户从列表中选择一个屏幕保护程序,并对其进行预览或配置。在做了一些研究之后,我发现通过调用带有"/c“参数的*.scr文件将会显示配置对话框。
在命令行中使用这个参数可以很好地工作("C:\Windows\System32>PhotoScreensaver.scr /c"),但是从C#调用它总是会导致屏幕保护程序被简单地显示出来,就好像这个参数被忽略了一样。
我使用的代码是这样的:
Process.Start(ScreensaverPath, "/c");其中,ScreensaverPath包含指向(包括) *.scr文件的路径。
我也试过这段代码,但没有用:
Process.Start(ScreensaverPath + "/c");任何帮助都将不胜感激。
附注:我使用的是Windows 8专业版,但我需要的解决方案是与XP和更新版本兼容。
发布于 2012-10-26 06:42:06
我建议您首先创建ProcessStartInfo的实例,设置属性,然后将该实例传递给Process.Start(instanceOfProcessStartInfo)
我直接使用Process.Start遇到了类似的问题,以下是解决方案
发布于 2012-10-26 07:20:35
我不认为在C#中直接传递参数是可行的。如果您在Start|Run框中键入c:\windows\system32\sspipes.scr /c,也会直接进入屏幕保护程序,而不会弹出配置屏幕。
不过,我已经能够通过cmd文件做到这一点,所以一个解决方案(尽管不是很完美)是在某个地方创建一个只有一行%1 /c的cmd文件
然后,您可以将屏幕保护程序的路径和文件名传递给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这是一个有两个按钮的表单。Button1调出配置屏幕,按钮2运行屏幕保护程序。显然,你会删除硬编码等,所以请原谅糟糕的编码风格。
您只需创建一个包含%1 /c的名为scr.cmd的文本文件,并将其保存到c:\temp
https://stackoverflow.com/questions/13078311
复制相似问题