应用调节亮度常用的方法有如下两种:
一、利用IOCTL:
在背光驱动的IOCTL里面增加调节背光亮度的IOCTL,如下:
case IOCTL_BACKLIGHT_ADJUST:
//获取应用传递过来的参数
//调节PWM值
case IOCTL_BACKLIGHT_GETLEVEL://这个主要用来查询当前背光亮度。
//传送出背光的当前亮度。
在应用程序里面通过deviceiocontrol 传递个参数到背光的XXX_IOControl函数来实现。
二、监控注册表ControlPanel/Backlight子键:
[HKEY_CURRENT_USER/ControlPanel/Backlight]
"OnOff"=dword:00000001
"Brightness"=dword:00000032 ;the brightness of backlight while OS use Battery Power
"ACBrightness"=dword:00000040 ;the brightness of backlight while OS use AC power.
"ACTimeoutUnchecked"=dword:00000000 ;temporary store ACTimeout
"ACBacklightOnTap"=dword:00000001
"BatteryTimeoutUnchecked"=dword:00000000 ;temporary store BatteryTimeout
"ExtOnOff"=dword:00000001
在驱里面做如下操作来监控背光注册表,当应用程序修改注册表的时候,驱动就会重新读取注册表的值来设定背光的相关参数:
dwResult = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("ControlPanel//Backlight"), 0, KEY_NOTIFY, &hKey);
if(ERROR_SUCCESS != dwResult)
{
goto exit;
}
// Request notification of backlight registry changes:
hEventRegistryChange = CeFindFirstRegChange(hKey, FALSE, REG_NOTIFY_CHANGE_LAST_SET);
if(INVALID_HANDLE_VALUE == hEventRegistryChange)
{
RETAILMSG(ZONE_ERROR, (TEXT("BKL: CeFindFirstRegChange failed/r/n")));
goto exit;
}
RegCloseKey(hKey);
hKey = NULL;
WaitForSingleObject(hEventRegistryChange, INFINITE);
//重新读取注册表项,设定背光参数
CeFindNextRegChange(hEventRegistryChange);
应用可以通过改变注册表的值来调节亮度。
"Brightness"=dword:00000032
"ACBrightness"=dword:00000040