2017-08-28 13 views
0

サードパーティの実行可能ファイルを使用するすべてのモニタの明るさを設定するC#メソッドがあります。問題は、輝度を変更するために、この実行ファイルを別のパラメータで呼び出す必要があることです。しかし、私のコードはSetBrightnessを呼び出すたびに新しいプロセスを作成します。すでに実行中の既存のプロセスをどのように使用し、別のパラメータを渡して再度実行するのですか?これを簡単にするProcessクラスのメソッドはありません。呼び出しプロセス。新しいプロセスを開始することなく、一度目以降の呼び出しを開始します。

編集:コマンドラインを使用してこのexeを実行すると、プロセスはWindowsシステムトレイに開いたままになり、プロセスがタスクマネージャで実行されていることがわかります。私のコードを実行すると、タスクマネージャで2つのexeのインスタンスが表示されることがあります。だから、私は何をしようとしているのは、常に同じインスタンスを呼び出すことですが、異なるパラメータで呼び出すことです。毎回exeを再起動することは、毎回起動するには時間がかかりすぎるため、オプションではありません。

public bool SetBrightness(short monitorStartIndex, short monitorEndIndex, short brightness) 
    { 
     // Construct the parameter string used by the tool so that it updates all monitors in one call. 
     // Example "1 b75 2 b75" will set brightness to 75 for monitors 1 and 2. 
     StringBuilder arguments = new StringBuilder(); 
     for (int i = monitorStartIndex; i <= monitorEndIndex; i++) 
     { 
      arguments.Append(i).Append(" "); 
      arguments.Append(string.Format("b{0}", brightness)).Append(" "); 
     } 

     var path = Path.GetDirectoryName(Environment.GetCommandLineArgs()[1]); 
     var final = Path.Combine(path, "External Assemblies\\ClickMonitorDDC_3_9.exe"); 

     var p = new Process 
     { 
      StartInfo = 
      { 
       FileName = final, 
       Arguments = arguments.ToString(), 
       UseShellExecute = false, 
       RedirectStandardOutput = true 
      } 
     }; 

     try 
     { 
      p.Start(); 
     } 
     catch (Exception e) 
     { 
      Trace.TraceError("Error while changing the brightness using ClickMonitorDDC_3_9.exe. Inner Exception : " + e.Message); 
      return false; 
     } 

     return true; 
    } 
+1

はなぜ、その後、静的変数としてプロセスを保存あなたは開始時に関数を呼び出すプロセス毎回終わりませんか?編集:または、すでに実行した後にさらにデータを受け取るようにプロセスが設定されている場合は、毎回新しい命令を送信します。それは私がもっと情報なしで与えることができる最高の答えです。 – HumbleWebDev

+4

明るさを変更するには、このexeを別のパラメータで呼び出す必要があるとします。だから実際にそれを行う必要がない限り、実際にexeをもう一度開始するために新しいプロセスとして再び起動する必要はありませんか?何か不足していますか? –

+0

私の質問を編集しました。お役に立てれば。新しい指示をどうやって送るのですか? – Ray

答えて

0

Processクラスで使用可能なWaitForExitメソッドを使用します。サードパーティの実行可能ファイルをコマンドラインから使用する場合は、コードと同じ種類のパラメータを使用してください。パラメータを設定して終了すると、プロンプトに戻ります。明るさを変更し、設定して終了するまで待つだけで、あなたのメソッドを呼び出すことができます。あなたのコード

変更

は下記見:

try 
    { 
     p.Start(); 
     p.WaitForExit() 
    } 
+0

どのようにすれば、異なるパラメータで実行可能ファイルを再実行することができますか?わかりません。 – Ray

+0

p.WaitForExitを使用すると、プロセスは基本的に終了します。その後、SetBrightnessメソッドを再度呼び出します。プロセスメソッドがプロセスの新しいインスタンスを実行するときに起動する開始引数を使用しているので、実行中のプロセスの既存のパラメータをどのように変更するかはわかりません。これは、少なくともオープンプロセスの大部分を残すのを防ぎますが、既存のプロセスを変更することはできません – Darthchai

関連する問題