阅读:1643回复:5
【200分请教】改变笔记本屏幕亮度的问题
急问各位dx一个关于如何改变笔记本液晶屏亮度的问题。
MSDN中有一个Backlight Control Interface,我用CreatFile()得到.LCD的句柄没有问题,可是用IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS查询支持亮度值时却无法返回正确值,亮度设置就更无法工作了 不知道那位dx用过这个控制字的DeviceIOCtrl(),是我的程序问题,还是thinkpad的LCD不支持这个函数? 如果这个函数不好使,那有什么其他可行的办法控制thinkpad LCD亮度呢? 由于硬件大作业要用到这个,所以很急,请各位dx帮忙,谢谢 [编辑 - 12/8/04 by oberon] [编辑 - 12/8/04 by oberon] |
|
沙发#
发布于:2004-12-08 19:39
急问各位dx一个关于如何改变笔记本液晶屏亮度的问题。 错误代码是多少??? |
|
|
板凳#
发布于:2004-12-08 20:22
我写的程序如下: #include <windows.h> #include "ntddvdeo.h" #include <iostream> using namespace std; void main(){ int bresult; UCHAR Bri_Lev[256]; PUCHAR pBri_Lev = &(Bri_Lev[0]);; DWORD Lev_Leng; HANDLE hDevice = CreateFile("\\\\.\\LCD", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0,NULL); if (hDevice == INVALID_HANDLE_VALUE) cout << "HANDLE created failed\n"; cout << "The LCD handle is" << hDevice << "\n"; cout << GetLastError() << "\n"; bresult = DeviceIoControl(hDevice, IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS, // Query Control Code NULL, 0, // no input buffer pBri_Lev, sizeof(pBri_Lev), // output buffer &Lev_Leng, // # bytes returned(Number of Levels supported) (LPOVERLAPPED) NULL); // synchronous I/O if (!bresult) cout << "Supported level created failed because of" << GetLastError() << "\n"; cout << "Supported Levels are:\n"; for(DWORD j=0;j<=Lev_Leng;j++) cout << "Level " << j << " " << "Value " << (int) Bri_Lev[j] << "\n"; CloseHandle(hDevice); } 程序的正确运行结果返回的亮度值应当是有一个字节长的元素构成的数组,输出的字节数代表支持的亮度级数,按照MSDN的说明输出缓冲区大小[out] Pointer to a buffer that receives an array of the available power levels. This buffer should be 256 bytes long. 但我的程序如果把输出缓冲区大小设为256,则显示支持的亮的级数为3435973836,getlasterror()的返回值为2,The system cannot find the file specified。如果输出缓冲区的值小于256或改为sizeof(pBri_Lev),则显示支持的亮度级数为0,Level 0 203 |
|
地板#
发布于:2005-06-02 17:05
遇到同样的问题,期待解决,请问 oberon 解决了吗,能否指点一下,谢谢
|
|
地下室#
发布于:2005-06-15 13:53
可是为什么在台式机器上连LCD的句柄都得不到
郁闷,msdn上难道写的是不支持的东西!!! |
|
5楼#
发布于:2005-06-28 11:36
MARK!!顶起
|
|