3

C#.Net でプログラムを作成しています。機能の 1 つを使用すると、ユーザーはリストからスクリーンセーバーを選択し、プレビューまたは構成できます。いくつかの調査を行った後、「/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

最初にProcessStartInfoのインスタンスを作成してプロパティを設定し、そのインスタンスを Process.Start(instanceOfProcessStartInfo) に渡すことをお勧めします

Process.Start を直接使用して同様の問題が発生しましたが、これが解決策でした

于 2012-10-25T22:42:05.967 に答える
1

引数を直接渡すことは C# からはうまくいかないと思います。Start|Run ボックスに入力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 つのボタンがあるフォーム用です。ボタン 1 は設定画面を表示し、ボタン 2 はスクリーンセーバーを実行します。明らかに、ハードコーディングなどを削除するので、悪いコーディング スタイルを許してください。

その中にscr.cmdというテキストファイルを作成して%1 /c保存するだけです。c:\temp

于 2012-10-25T23:20:34.760 に答える