c++ - 尝试打开显示设备句柄以使用 C++ 在 Windows XP 上更改亮度

标签 c++ windows winapi monitor

我正在尝试编写 C++/WinAPI 代码来更改显示器亮度。代码必须与 Windows XP 兼容,所以我不能使用像 SetMonitorBrightness 这样的 API。所以我想试试 IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS但我似乎无法获得设备句柄。

HANDLE hDevice = ::CreateFile(_T("\\\\.\\LCD"),
    GENERIC_READ | GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    0, NULL);
if(hDevice != INVALID_HANDLE_VALUE)
{
    //Do work here

    ::CloseHandle(hDevice);
}
else
{
    nOSErr = ::GetLastError();
    //Get code 2
}

我尝试了 GENERIC_READ、GENERIC_WRITE 和 FILE_SHARE_READ、FILE_SHARE_WRITE 标志的各种组合,但在调用 CreateFile 时我总是收到错误代码 2。

那么我做错了什么?

最佳答案

您知道并非所有设备都支持此 API,对吗?您的膝上型电脑可能支持它,因为它允许软件调整其屏幕亮度,甚至可能使用键盘上的功能键。您的另一台机器(运行 Windows 7 的机器)可能不支持它,因此使用 \\\\.\\LCD 调用 CreateHandle 不会给您带来任何用处.它与操作系统无关,与硬件和/或视频驱动程序有关。

关于c++ - 尝试打开显示设备句柄以使用 C++ 在 Windows XP 上更改亮度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874615/

相关文章:

c - 在进程错误之间复制文件句柄

php - 在 Windows Server 2008 IIS 7 上从 PHP 5.2.17 升级到 5.2.6

java - UnsatisfiedLinkError "Access is denied"即使完全控制

windows - Docker- 为什么 docker 更新主机文件?

c++ - 如何在 nvidia Nsight eclipse 中使用 GNU 科学库 (gsl)

c++ - OpenProcess 函数返回无效句柄

winapi - 如何防止我生成的进程生成子进程?

c++ - 在 C++ 中计算数组中不相等的字符串

c++ - 使用 C++ 宏检查变量是否存在

c++ - 当我不关心顺序并且没有重复项时,更快的删除删除习惯用法?