oberon
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1643回复:5

【200分请教】改变笔记本屏幕亮度的问题

楼主#
更多 发布于:2004-12-08 11:25
急问各位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]
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-08 19:39
急问各位dx一个关于如何改变笔记本液晶屏亮度的问题。

MSDN中有一个Backlight Control Interface,我用CreatFile()得到.LCD的句柄没有问题,可是用IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS查询支持亮度值时却无法返回正确值,亮度设置就更无法工作了

不知道那位dx用过这个控制字的DeviceIOCtrl(),是我的程序问题,还是thinkpad的LCD不支持这个函数?

如果这个函数不好使,那有什么其他可行的办法控制thinkpad LCD亮度呢?

由于硬件大作业要用到这个,所以很急,请各位dx帮忙,谢谢
 

错误代码是多少???
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
oberon
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2005-04-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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
jackboy
驱动牛犊
驱动牛犊
  • 注册日期2003-10-13
  • 最后登录2010-11-10
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望130点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-02 17:05
遇到同样的问题,期待解决,请问 oberon 解决了吗,能否指点一下,谢谢
jasoner
驱动牛犊
驱动牛犊
  • 注册日期2005-04-08
  • 最后登录2005-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-15 13:53
可是为什么在台式机器上连LCD的句柄都得不到
郁闷,msdn上难道写的是不支持的东西!!!
kissfire
驱动牛犊
驱动牛犊
  • 注册日期2004-09-09
  • 最后登录2006-01-05
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-06-28 11:36
MARK!!顶起
游客

返回顶部