螢幕亮度設定程式 BrightControl

    看影片時候要把螢幕調到最亮,可是瀏覽網頁這種亮度又太刺眼,如果你經常要配合不同的應用調整螢幕亮度,而你的螢幕又不是EIZO的話,那這個程式可以幫你做到單鍵調整螢幕亮度,省去按螢幕OSD調整亮度的麻煩。

   

下載: MFC Static Library 版本 BrightControl.zip 
3231542282B33385960CB6B95F6A0056 

Share Library 版本 BrightControl0.32.zip  
E9A45AC37C028403D23748F0D63DAAE6 

如果你要自己寫一個的話,以下是參考資料及程式片段,我是用VS2008兜出來的。 
SetMonitorBrightness Dxva2.lib // Minimum supported client Windows Vista 
它應該是用 DDC 來控制螢幕的,不過這些 API 只有在 Vista 以上提供,我自己是在Windows7上使用。 

#include<HighLevelMonitorConfigurationAPI.h>

int CMonConfDlg::SetMonitorBright(HWND hWnd , DWORD cBrightness)
{
HMONITOR hMonitor = NULL;
DWORD cPhysicalMonitors;
DWORD minb=0;
DWORD curb=0;
DWORD maxb=0;
LPPHYSICAL_MONITOR pPhysicalMonitors = NULL;
// Get the monitor handle.
hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTOPRIMARY);

// Get the number of physical monitors.
BOOL bSuccess = GetNumberOfPhysicalMonitorsFromHMONITOR(
hMonitor, &cPhysicalMonitors);

if (bSuccess)
{
// Allocate the array of PHYSICAL_MONITOR structures.
pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(
cPhysicalMonitors* sizeof(PHYSICAL_MONITOR));
if (pPhysicalMonitors != NULL)
{
// Get the array.
bSuccess = GetPhysicalMonitorsFromHMONITOR(hMonitor, cPhysicalMonitors, pPhysicalMonitors);

int n = 0;
do {
bSuccess = GetMonitorBrightness(pPhysicalMonitors->hPhysicalMonitor , &minb, &curb, &maxb);
if( !bSuccess ) {
dbg_printf("GetMonitorBrightness, n = %d, bSuccess = %d\r\r\n", n, bSuccess);
        GetErrorMessage(TEXT("GetMonitorBrightness"));
Sleep(RETRY_SLEEP);
}
n++;
} while( !bSuccess && n < MAX_RETRY);

if( bSuccess ) {
if( curb != cBrightness && minb <= cBrightness && cBrightness <= maxb ) {
int n = 0;
do {
bSuccess = SetMonitorBrightness(pPhysicalMonitors->hPhysicalMonitor , cBrightness);
if( !bSuccess ) {
dbg_printf("SetMonitorBrightness, n = %d, bSuccess = %d\r\r\n", n, bSuccess);
        GetErrorMessage(TEXT("SetMonitorBrightness"));
Sleep(RETRY_SLEEP);
}
n++;
} while( !bSuccess && n < MAX_RETRY);
dbg_printf("SetMonitorBrightness(%d), bSuccess = %d\r\r\n",cBrightness, bSuccess);
}
}

// Close the monitor handles.
        bSuccess = DestroyPhysicalMonitors( cPhysicalMonitors, pPhysicalMonitors);
// Free the array.
free(pPhysicalMonitors);
}
}
return curb;
}

No comments: