サードパーティの実行可能ファイルを使用するすべてのモニタの明るさを設定する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;
}
はなぜ、その後、静的変数としてプロセスを保存あなたは開始時に関数を呼び出すプロセス毎回終わりませんか?編集:または、すでに実行した後にさらにデータを受け取るようにプロセスが設定されている場合は、毎回新しい命令を送信します。それは私がもっと情報なしで与えることができる最高の答えです。 – HumbleWebDev
明るさを変更するには、このexeを別のパラメータで呼び出す必要があるとします。だから実際にそれを行う必要がない限り、実際にexeをもう一度開始するために新しいプロセスとして再び起動する必要はありませんか?何か不足していますか? –
私の質問を編集しました。お役に立てれば。新しい指示をどうやって送るのですか? – Ray