4696|13

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

背光亮度调整时,写注册表失败 [复制链接]

我在调整背光的亮度,写了几个函数,一个是读注册表,一个是写注册表,一个是设置背光亮度,
读注册表的程序如下:

  1. LONG        regStatus;
  2.         DWORD        valLen;
  3.         DWORD        valType;
  4.         HKEY        hregBL;
  5.        
  6.         regStatus = RegOpenKeyEx(HKEY_CURRENT_USER, RK_CONTROLPANEL_BACKLIGHT,0, 0, &hregBL);
  7.         if (regStatus!=ERROR_SUCCESS)
  8.         {
  9.        RETAILMSG(1,(TEXT("Backlight:RegOpenKeyEx(HLM\\%s) failed!!\r\n"),RK_CONTROLPANEL_BACKLIGHT));
  10.        //return regStatus;
  11.   }
  12.   valLen = sizeof(DWORD);
  13.         regStatus = RegQueryValueEx(hregBL, TEXT("Brightness"), NULL,&valType, (PBYTE)&pBrightness, &valLen);
  14.         RETAILMSG(1,(TEXT("pBrightness=0x%x\r\n"),pBrightness));
  15.                        
  16.         if (regStatus!=ERROR_SUCCESS)
  17.         {       
  18.                 pBrightness = 0xa;
  19.         }
  20.         RETAILMSG(1,(TEXT("pBrightness1=0x%x\r\n"),pBrightness));
  21.         RegCloseKey(hregBL);
复制代码

写注册表的程度如下:

  1. void SetBacklightRegs(void)
  2. {
  3.          LONG        regStatus;
  4.          HKEY        hregBL;
  5.          
  6.          regStatus = RegOpenKeyEx(HKEY_CURRENT_USER, RK_CONTROLPANEL_BACKLIGHT, 0, 0, &hregBL);
  7.          if (regStatus!=ERROR_SUCCESS)
  8.          {
  9.       RETAILMSG(1,(TEXT("Backlight:RegOpenKeyEx(HLM\\%s) failed!!\r\n"),RK_CONTROLPANEL_BACKLIGHT));
  10.       //return regStatus;
  11.    }
  12.          RegSetValueEx(hregBL,TEXT("Brightness"),0,REG_DWORD,(const BYTE *)&pBrightness,sizeof(DWORD));                                            
  13.    RegCloseKey(hregBL);  
  14. }
复制代码

设置背光时,我是先通过读注册表读出pBrightness的值,然后改变,然后再写回去。写的时候就会出错,系统会直接halt,如果不写回去,就不会出错,但是由于每次设置都是先读出来,所以如果不写回去的话,每次读出来的都还是默认值,背光只能改变一次。
请大家帮忙看一下,我写回去的代码有问题吗?
非常感谢!

最新回复

背光灯不是那么实现的,DEVICEIOCONTROL,去控件IO口应该还靠谱。  详情 回复 发表于 2009-1-9 11:02
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
向大家致以最诚挚的谢意,确实是那个const的问题。
结贴。
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
背光设置,应该采用DeviceIoControl()来操作背光设备,而不是简单的修改注册表。而且也不用存贮当前值,使用的时候,再调用DeviceIoControl()来获得当前值。

难道修改了注册表,背光就会随着变化吗?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
up
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 91program 的回复:
背光设置,应该采用DeviceIoControl()来操作背光设备,而不是简单的修改注册表。而且也不用存贮当前值,使用的时候,再调用DeviceIoControl()来获得当前值。

难道修改了注册表,背光就会随着变化吗?

一般的背光驱动里面会把背光的当前值写到注册表里保存,而提供给AP操作的一般是IOControl接口
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
学习
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
RegSetValueEx(hregBL,TEXT("Brightness"),0,REG_DWORD,(const BYTE *)&pBrightness,sizeof(DWORD));

lz把const拿掉试试!
 
 
 

回复

1

帖子

0

TA的资源

禁止访问

8
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
你的pBrightness定义在哪里?     
RegSetValueEx(hregBL,TEXT("Brightness"),0,REG_DWORD,(const BYTE *)&pBrightness,sizeof(DWORD));把const去掉看看
你们BSP里没有现成的注册表读写函数吗?直接拿过来修改一下使用不会有问题的
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
楼主是送一些值给背光驱动的吧。
————————————————————
在控制面板的程序改变都是修改注册表的?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
up
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

12
 
regStatus = RegOpenKeyEx(HKEY_CURRENT_USER, RK_CONTROLPANEL_BACKLIGHT, 0, 0, &hregBL);
倒数第二个参数不应该是0吧

楼主读写注册表只是得到系统当前保存的背光灯的亮度值及修改后的值,
他改变亮度应该是用到了DeviceIoControl()


 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
谢谢大家,我是使用了DeviceIOControl,我再把我的执行流程说一遍,请大家帮忙检查一下:
1、背光驱动中设置IOControl,定义一个#define IOCTL_BACKLIGHT_CONTROL 0x10
2、在case IOCTL_BACKLIGHT_CONTROL下,程序如下:

  1.    if(*lpInBuf==1)
  2.          SetBacklightStatus(TRUE);
  3.    else
  4.          SetBacklightStatus(FALSE);
复制代码

3、上述设置是在MDD下做的,现在在PDD中ms2_backlight.cpp中,添加一楼所说的注册表读取和写入的函数,和设置背光值的函数,pBrightness也是在这里定义的。通过读注册表,可以读出pBrightness的值,然后通过SetBacklightStatus函数,即TRUE,则pBrightness+1,FALSE则pBrightness-1。然后将改变后的值写回注册表。顺便说一句,得到pBrightness的值后,我会有一个SetPWM函数来通过pBrightness改变当前背光的状态,背光是通过改变PWM而改变的。
4、在外部驱动调用IOControl,我是在键盘驱动中调用的,类似于我们的笔记本,键盘上有两个键,一个是增加背光,一个是减少背光,调用方式如下:

  1.                                        BYTE state = 0;
  2.                                           if ((blHandleMon = CreateFile(L"BKL1:", GENERIC_READ | GENERIC_WRITE,
  3.                                                              FILE_SHARE_READ | FILE_SHARE_WRITE,
  4.                                                              NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE)
  5.                               {
  6.                                          RETAILMSG(1, (TEXT("PwrButtonIntrThread: backlight driver not found.  Error %d\r\n"),
  7.                                                      GetLastError()));
  8.                               }
  9.                
  10.                                     DeviceIoControl(blHandleMon,0x10,&state,sizeof(BYTE),NULL,0,NULL,NULL);
  11.                                                             RETAILMSG(1, (TEXT("Keyboard: Backlight++\r\n")));
  12.                                                             CloseHandle(blHandleMon);
复制代码

这就是我的整个设计流程,请大家在帮忙看看。
另外,我的背光驱动中有一个void BacklightRegChanged()函数,但是这个函数是空的,并没有实现。
谢谢!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
背光灯不是那么实现的,DEVICEIOCONTROL,去控件IO口应该还靠谱。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表