请教高手如何获得当前的笔记本的背光亮度,程序控制笔记本的背光亮度,高手做过此方面的指点下是否有此类的API函数,我要的不是在当前亮度下调节对比度,而是得到当前的背光亮度,我们的数据是在EC空间内,但是在VISTA和WIN7下,要是得到此值必须以管理员的权限运行,可是不能手动运行。做过此方面的高手指点下,要是写驱动读写数据的话,在VISTA和WIN7下能否越过UAC,因为我们的程序要出货的,说白了就是OSD软件的背光亮度控制程序。

解决方案 »

  1.   

    估计没硬件的API接口文档做不了。
      

  2.   

    我晕,我都发布了这么长时间了,CSDN的 高手就可怜可怜我吧,我现在找到方法了,可是GetMonitorBrightNess() 不知道为什么得不到值 高手 指点下吧!!!
      

  3.   

    vista,win7上面加强了安全属性,所以需要Admin权限的程序就需要跳UAC通知用户,你做成驱动,权限是够了,但是你安装驱动等,也是需要admin权限的,否则无法安装成功。
    所以最终会过来,你可以把你的exe,嵌入requireAdministrator的manifest,这样用户双击exe的时候,就会自动跳UAC,让用户允许...
      

  4.   

    谢谢,非常的感谢,我现在找到解决的办法了,现在EC做了控制背光亮度的功能了,也就是说系统能支持这项功能了,可是我现在当前亮度的值还是取不出来,按常规来说 应该能取出来的.下面的API函数 高手有接触到的没?
    VISTA系统下提供了一些高层的API可以方便地控制屏幕的亮度、色温、对比度、显示区等。这些API定义在HighLevelMonitorConfigurationAPI.h中,库为dxva2.lib。在对屏幕操作前需要获得其句柄,操作完后要释放。这里分别以GetPhysicalMonitor和FreePhysicalMonitor实现。void FreePhysicalMonitor(DWORD npm, LPPHYSICAL_MONITOR ppm)
    {
    DestroyPhysicalMonitors(npm, ppm);
    // Free the array.
    free(ppm);
    }LPPHYSICAL_MONITOR GetPhysicalMonitor(DWORD *pnpm)
    {
    HMONITOR hMon = NULL;
    hMon = MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY);
    LPPHYSICAL_MONITOR ppm = NULL;
    DWORD npm = 0;
    BOOL bRet = GetNumberOfPhysicalMonitorsFromHMONITOR(hMon, &npm);
    if (bRet) {
    ppm = (LPPHYSICAL_MONITOR)malloc(npm * sizeof(PHYSICAL_MONITOR));
    if (ppm) {
    bRet = GetPhysicalMonitorsFromHMONITOR(hMon, npm, ppm);
    if (!bRet) {
    FreePhysicalMonitor(npm, ppm);
    ppm = NULL;
    npm = 0;
    }
    }
    }
    *pnpm = npm;
    return ppm;
    }返回的是PHYSICAL_MONITOR数组,以下示例只是使用了第一个PHYSICAL_MONITOR元素。1、调整屏幕前我们可以看看显示器支持什么功能
    Vista提供的API是GetMonitorCapabilities(在有些显示器上虽然GetMonitorCapabilities调用失败,但仍然可以调整亮度等;在有些显示器上,从GetMonitorCapabilities返回的值看可以支持某些功能,但实际又不能。这些都另当别论)。LPPHYSICAL_MONITOR ppm = 0;
    ppm = GetPhysicalMonitor();
    if (ppm) {
    DWORD nmc = 0, nct = 0;
    GetMonitorCapabilities(ppm->hPhysicalMonitor, &nmc, &nct);
    CString str = _T("");
    if (nmc & MC_CAPS_BRIGHTNESS) {
    str += _T("Support brightness control\n");
    }
    if (nmc & MC_CAPS_COLOR_TEMPERATURE) {
    str += _T("Support color temperature\n");
    }
    if (nmc & MC_CAPS_CONTRAST) {
    str += _T("Support contrast\n");
    }
    .........
    if (str == _T(""))
    str = _T("Support None");
    MessageBox(str);
    FreePhysicalMonitor(npm, ppm);
    }2、如何调整亮度
    LPPHYSICAL_MONITOR ppm = 0;
    DWORD npm = 0;
    ppm = GetPhysicalMonitor(&npm);
    if (ppm) {
    DWORD nMin = 0, nCur = 0, nMax = 0;
    GetMonitorBrightness(ppm->hPhysicalMonitor, &nMin, &nCur, &nMax);
    CString str;
    str.Format(_T("Min:%d, Cur:%d, Max:%d"), nMin, nCur, nMax);
    MessageBox(str);
    SetMonitorBrightness(ppm->hPhysicalMonitor, nMin);
    Sleep(1000);
    SetMonitorBrightness(ppm->hPhysicalMonitor, nMax);
    Sleep(1000);
    SetMonitorBrightness(ppm->hPhysicalMonitor, nCur);
    Sleep(1000);
    FreePhysicalMonitor(npm, ppm);
    }3、调色温LPPHYSICAL_MONITOR ppm = 0;
    DWORD npm = 0;
    ppm = GetPhysicalMonitor(&npm);
    if (ppm) { 
    SetMonitorRedGreenOrBlueGain(ppm->hPhysicalMonitor, MC_RED_GAIN, 50);
    Sleep(500);
    SetMonitorRedGreenOrBlueGain(ppm->hPhysicalMonitor, MC_GREEN_GAIN, 49);
    Sleep(500);
    SetMonitorRedGreenOrBlueGain(ppm->hPhysicalMonitor, MC_BLUE_GAIN, 52);
    MessageBox(_T("Set color temperature => Done"));FreePhysicalMonitor(npm, ppm);
    }4、调对比度LPPHYSICAL_MONITOR ppm = 0;
    DWORD npm = 0;
    ppm = GetPhysicalMonitor(&npm);
    if (ppm) {
    DWORD nMin, nCur, nMax;
    GetMonitorContrast(ppm->hPhysicalMonitor, &nMin, &nCur, &nMax);
    CString str;
    str.Format(_T("Min:%d, Cur:%d, Max:%d"), nMin, nCur, nMax);
    MessageBox(str);
    SetMonitorContrast(ppm->hPhysicalMonitor, nMin);
    Sleep(1000);
    SetMonitorContrast(ppm->hPhysicalMonitor, nMax);
    Sleep(1000);
    SetMonitorContrast(ppm->hPhysicalMonitor, nCur);
    Sleep(1000);
    FreePhysicalMonitor(npm, ppm);
    }5、查看显示器类型LPPHYSICAL_MONITOR ppm = 0;
    DWORD npm = 0;
    ppm = GetPhysicalMonitor(&npm);
    if (ppm) {
    TCHAR *descs[] = {
    _T("Shadow-mask cathode ray tube (CRT)"), 
    _T("Aperture-grill CRT"),
    _T("Thin-film transistor (TFT) display"),
    _T("Liquid crystal on silicon (LCOS) display"),
    _T("Plasma display"),
    _T("Organic light emitting diode (LED) display"),
    _T("Electroluminescent display"),
    _T("Microelectromechanical display"),
    _T("Field emission device (FED) display")
    };
    MC_DISPLAY_TECHNOLOGY_TYPE dtt;
    GetMonitorTechnologyType(ppm->hPhysicalMonitor, &dtt);
    CString str;
    str.Format(_T("Technology type: %s"), descs[(int)dtt]);
    MessageBox(str);
    FreePhysicalMonitor(npm, ppm);
    }6、恢复出厂设置LPPHYSICAL_MONITOR ppm = 0;
    DWORD npm = 0;
    ppm = GetPhysicalMonitor(&npm);
    if (ppm) {
    RestoreMonitorFactoryDefaults(ppm->hPhysicalMonitor);
    FreePhysicalMonitor(npm, ppm);
      

  5.   

    CSDN 的高手,冒个泡啊!期待你们的指点!
      

  6.   

    GetMonitorBrightness系列操作需要发控制码给显示设备的驱动,如果设备驱动不回应的话,肯定是得不到正确值的。这个问题你应该找设备供应商寻求支持,最好可以直接从他们那边拿SDK和Sample。