写程序关闭显示器及设置亮度_显示屏写程序

为完成自己定下的发文60篇目标,差不多持续两个月,到今天刚好是第60篇,持续输出还是有些不容易。今天就把以前曾经研究过的技术点拿来凑数,也没什么作用,只为好玩。

在有些特定情况下,想用程序控制关闭显示器(比如你写一个屏保程序,到一定时间后关闭显示器),Windows系统对此做了统一封装,你只需要调用一个API即可:

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

其中最后一个参数取值的意义是:

-1 (显示器正在打开)
1 (显示器进入节能状态)
2 (显示器正在关闭)

是不是很简单,而设置显示器亮度就稍繁琐一点,首先你要得到显示器设备句柄:

HANDLE h = CreateFile(TEXT("\\\\.\\LCD"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);

其次向设备发送设置亮度的控制码:

#define IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS 		CTL_CODE(FILE_DEVICE_VIDEO, 0x127, METHOD_BUFFERED, FILE_ANY_ACCESS)

DISPLAY_BRIGHTNESS DisplayBrightness;
DisplayBrightness.ucDisplayPolicy = 0;
DisplayBrightness.ucACBrightness = level;
DisplayBrightness.ucDCBrightness = level;

DWORD nOutBufferSize = sizeof(DisplayBrightness);
BOOL ret = DeviceIoControl(h, IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS, (DISPLAY_BRIGHTNESS *)&DisplayBrightness, nOutBufferSize, NULL, 0, &nOutBufferSize, NULL);

当然Windows也提供了查询显示器是否支持设置亮度及查询当前亮度的控制码:

#define IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS  CTL_CODE(FILE_DEVICE_VIDEO, 0x125, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS 	CTL_CODE(FILE_DEVICE_VIDEO, 0x126, METHOD_BUFFERED, FILE_ANY_ACCESS)

对于Windows程序员来说,实现其功能是小菜一碟了。欢迎关注!

原文链接:,转发请注明来源!