Note: Brightness control in Vista/Windows 7 and Later

Brightness Control in WDDM , 描述 Vista 支援 Brightness 控制的方法

1. Vista 會透過 monitor.sys 這隻Driver 去查詢 WDDM(new VGA driver architecture) 是否有支援亮度控制,

2. 假設 WDDM 不支援的話, 會轉向系統的ACPI( need ACPI 3.0 and later)查詢是否有實做 ACPI Brightness control

3. 假設系統支援的話 monitor.sys 會去註冊一個熱鍵的ACPI notification

而 User model 的Applicaiton 則可以透過WMI 去改變Monitor.sys 控制的亮度 (使用 WmiSetBrightness WMI call.)

Brightness control 被引進Windows 是從 WinXP Tablet PC Edition and SP1 開始, 是透過 Brightness IOCTLs (這個應該是透過Driver implement, MSDN的範例是有個 \\.LCD driver objec), 這個方法在Vista 仍然可用, 不過可想而知的是, 這個明顯不如ACPI 的方法通用, 應該沒啥人在用了才對 ,寫錯了 T_T , 應該是兩邊都要做, 一台PC, 不能確定客戶使用那個OS.所以兩邊都須要implement才對!

Brightness control 在 Vista Logo program Requirements 需要通過測試項目 SYSFUND-0131 & SYSFUND-0132, 所以市面上主要的商用機應該都吻合

ACPI notification code, (see section B.7 Notifications Specific to Output Devices in ACPI 4.0a spec)

#define ACPI_NOTIFY_CYCLE_BRIGHTNESS_HOTKEY 0x85
#define ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY 0x86
#define ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY 0x87
#define ACPI_NOTIFY_ZERO_BRIGHTNESS_HOTKEY 0x88

ACPI methods

_BCL, _BCM, and _BQC,   Control methods

_DOS , Disabling Automatic Brightness Changes

Windows 7 Brightness Control for Integrated Displays , 關於Win7 的變動, 主要多了一些測試方式!

update:

下列的code可以在 Thinkpad X60 with XP Sp3 (Intel 945 GMA Driver), 打開LCD Device

#define strLCD _T(“\\\\.\\LCD")

HANDLE hLCD = CreateFile(strLCD,  GENERIC_READ, FILE_SHARE_READ,  NULL, OPEN_EXISTING, 0, NULL);
if (hLCD != INVALID_HANDLE_VALUE) { // success!

CloseHandle(hLCD);

}

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: