2012-08-08 33 views
0

我想寫一個C++/WinAPI代碼來改變顯示器的亮度。代碼必須與Windows XP兼容,所以我不能使用像SetMonitorBrightness這樣的API。所以我想試試IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS,但我似乎甚至得不到設備句柄。試圖打開顯示設備句柄來改變使用C++的Windows XP的亮度

HANDLE hDevice = ::CreateFile(_T("\\\\.\\LCD"), 
    GENERIC_READ | GENERIC_WRITE, 
    FILE_SHARE_READ | FILE_SHARE_WRITE, 
    NULL, 
    OPEN_EXISTING, 
    0, NULL); 
if(hDevice != INVALID_HANDLE_VALUE) 
{ 
    //Do work here 

    ::CloseHandle(hDevice); 
} 
else 
{ 
    nOSErr = ::GetLastError(); 
    //Get code 2 
} 

我試過GENERIC_READ,GENERIC_WRITE和FILE_SHARE_READ,FILE_SHARE_WRITE標誌的各種組合,但我總是得到錯誤代碼2時的CreateFile調用。

那麼我在這裏做錯了什麼?

+0

當我嘗試時,我得到一個有效的句柄。 – Neil 2012-08-08 23:32:20

+0

我剛剛在Windows Vista(筆記本電腦)上試過,並且獲得了有效的句柄。任何想法爲什麼它不適用於我的Windows 7機器? – ahmd0 2012-08-08 23:46:56

+0

對不起,我沒有試用Windows 7的機器;我想我可以啓動一個Windows 8預覽虛擬機,但是我不得不在其上加載一些東西。 – Neil 2012-08-09 00:09:36

回答

1

你知道並非所有的設備都支持這個API,對吧?您的筆記本電腦可能支持它,因爲它允許軟件調整其屏幕亮度,甚至可以使用鍵盤上的功能鍵。您的其他計算機(運行Windows 7的計算機)可能不支持它,因此撥打CreateHandle\\\\.\\LCD不會爲您提供任何幫助。它與操作系統無關,與硬件和/或視頻驅動程序有關。

+0

好點,謝謝。有趣的是,SetMonitorBrightness似乎改變了Windows 7機器上的顯示器亮度(其中「\\。\ LCD」設備失效),但在Windows Vista上「\\。\ LCD」設備成功,SetMonitorBrightness失敗並顯示錯誤代碼ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA。 – ahmd0 2012-08-09 01:36:29

+0

我正在尋找的所有功能都是改變支持Windows XP SP3的顯示器亮度的可靠方法。任何想法可能是什麼? – ahmd0 2012-08-09 01:37:09

+0

您是否找到針對您的問題的解決方案? – 2013-12-18 15:01:11

相關問題