我正在尝试在 Windows 10 计算机上设置亮度。显示器好像不支持setMonitorBrightness
, and setDeviceGammaRamp
改变伽玛、白点等,所以我尽量不使用它。
我正在尝试使用它来使其工作IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
控制。当我使用监视器句柄时CreateFile()
,我检查句柄是否无效,没有问题。但我得到ERROR_INVALID_HANDLE
(错误6)当我打电话时DeviceIoControl()
with IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS
.
typedef struct _DISPLAY_BRIGHTNESS {
UCHAR ucDisplayPolicy;
UCHAR ucACBrightness;
UCHAR ucDCBrightness;
} DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS;
DISPLAY_BRIGHTNESS _displayBrightness;
_displayBrightness.ucDisplayPolicy = 0;
_displayBrightness.ucACBrightness = 0; //for testing purposes
_displayBrightness.ucDCBrightness = 0;
DWORD ret = NULL;
OVERLAPPED olp;
DWORD nOutBufferSize = sizeof(_displayBrightness);
HANDLE h = CreateFile(L"\\\\.\\LCD",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0, NULL);
if (h == INVALID_HANDLE_VALUE) {
//Does not reach here
return false;
}
if (!DeviceIoControl(h, IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS, (DISPLAY_BRIGHTNESS *)&_displayBrightness, nOutBufferSize, NULL, 0, &ret, &olp))
{
// GetLastError() returns error code 6 - Invalid handle
return false;
}
另外,我应该使用CreateFile()
获取监视器句柄,或者我可以调用MonitorFromWindow(nullptr, MONITOR_DEFAULTTOPRIMARY)
反而?