私は自分でC#で目を覚ますプログラムを作ろうとしていましたが、多少の作業の後に画面を暗くすることになっていました。画面の明るさを変更するには、SetDeviceGammaRampメソッドを使用するこの記事(https://www.codeproject.com/Articles/47355/Setting-Screen-Brightness-in-C)を続けました。SetDeviceGammaRampは画面をちょうど点滅させます。
がprivate unsafe void dimScreen()
{
var brightness = 10;
short* gArray = stackalloc short[3 * 256];
short* idx = gArray;
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 256; i++)
{
int arrayVal = i * (brightness + 128);
if (arrayVal > 65535)
arrayVal = 65535;
*idx = (short)arrayVal;
idx++;
}
}
SetDeviceGammaRamp(hdc, gArray);
Thread.Sleep(10000);
}
しかし、代わりに永久的に明るさを変更する(または少なくとも10秒間)画面がちょうど半分秒間点滅:私のコードは、以下です。 SetDeviceGammaRampをスリープ状態で数回呼び出すと状況が変わることはありません。私が得るのは数回の点滅だけです。輝度変数を変更すると、その点滅の明るさも変わるので、hdcとgArray変数が正しく割り当てられていると仮定します。私は他のソリューションを探してみましたが、そのほとんどがこの方法を使用していて、誰もこの問題を抱えていないようです。問題が何であるかについてのアイデアは?
UPD:問題は全面的に流れていたようです。ガンマの変化に気づき、以前の値にリセットします。
ルックを、ビデオドライバがクラッシュしたことを、いくつかのオッズと自動回復が点滅アーティファクトを生成します。別のマシンを試してください。これは画面の明るさを調整するための非常に良い方法ではないことに注意してください。安全なログインデスクトップは影響を受けません。残念なことに、コードで輝度を確実に制御することは難しい目標です.VESAモニタインタフェース規格はあまり良くありません。 –