我试图让自己在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监视器接口标准并不是一个很好的目标。 –