3

我正在 C#.Net 中创建一个程序,其中一项功能允许用户从列表中选择屏幕保护程序并预览或配置它。在做了一些研究后,我发现通过使用“/c”参数调用 *.scr 文件将显示配置对话框。

从命令行使用这个参数可以正常工作(“C:\Windows\System32>PhotoScreensaver.scr /c”),但是从 C# 调用它总是会导致屏幕保护程序被简单地显示,就好像参数被忽略了一样。

我正在使用的代码是这样的:

Process.Start(ScreensaverPath, "/c");

其中 ScreensaverPath 包含 *.scr 文件的路径(包括)。

我也试过这段代码,但无济于事:

Process.Start(ScreensaverPath + "/c");

任何帮助将不胜感激。

PS 我使用的是 Windows 8 Pro,但我需要与 XP 和更新版本兼容的解决方案。

4

2 回答 2

1

我认为直接传递 args 不会在 C# 中起作用。如果您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 调出配置屏幕,Button 2 运行屏幕保护程序。显然你会删除硬编码等,所以请原谅糟糕的编码风格。

您只需要在其中创建一个名为 scr.cmd 的文本文件并将%1 /c其保存到c:\temp

于 2012-10-25T23:20:34.760 回答
1

我建议您首先创建ProcessStartInfo的实例设置您的属性,然后将该实例传递给 Process.Start(instanceOfProcessStartInfo)

我直接使用 Process.Start 时遇到了类似的问题,这就是它的解决方案

于 2012-10-25T22:42:05.967 回答