我試圖讓自己在C#中的眼睛保護程序,應該在工作一段時間後使屏幕變暗。爲了改變屏幕亮度,我跟着這個(https://www.codeproject.com/Articles/47355/Setting-Screen-Brightness-in-C)文章使用SetDeviceGammaRamp方法。我的代碼如下: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:似乎問題一直伴隨着通量。它會注意到gamma的變化並將其重置爲先前的值。
照照Windows事件日誌,一些勝算的視頻驅動程序崩潰和自動恢復產生的閃爍假象。嘗試另一臺機器。請注意,這不是調整屏幕亮度的好方法,例如,安全登錄桌面不受影響。不幸的是,用代碼可靠地控制亮度是一個難以捉摸的目標,VESA監視器接口標準並不是一個很好的目標。 –