首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C++ WinAPI在Windows 10上设置亮度

使用C++ WinAPI在Windows 10上设置亮度
EN

Stack Overflow用户
提问于 2016-09-01 04:15:06
回答 1查看 2.9K关注 0票数 3

我正试图在Windows 10机器上设置亮度。显示器似乎不支持setMonitorBrightness,而setDeviceGammaRamp改变了伽马,白点等,所以我尽量不使用它。

我正在尝试使用IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS控件使其工作。当我使用CreateFile()获得监视器句柄时,我会检查句柄是否无效,是否正常。但是,当我用ERROR_INVALID_HANDLE调用DeviceIoControl()时,会得到IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS (错误6)。

代码语言:javascript
运行
复制
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)呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-02 20:22:41

在电话里

代码语言:javascript
运行
复制
DeviceIoControl(h, IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,
                (DISPLAY_BRIGHTNESS*)&_displayBrightness, nOutBufferSize, NULL, 0, &ret,
                &olp)

&olp指向未初始化的重叠结构。这个结构有一个事件对象(hEvent)的句柄,它包含一个随机值。这是DeviceIoControl调用所抱怨的无效句柄。

由于您没有使用CreateFile标志调用FILE_FLAG_OVERLAPPED (这对显示设备确实没有任何意义),所以根本不需要传递OVERLAPPED结构。只要通过NULL,调用就会成功:

代码语言:javascript
运行
复制
DeviceIoControl(h, IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,
                (DISPLAY_BRIGHTNESS*)&_displayBrightness, nOutBufferSize, NULL, 0, &ret,
                NULL)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39262619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档