2008-12-17 71 views
9

我在Sony筆記本電腦上安裝了Windows Server 2008,並且亮度控制不起作用。我想寫一個程序讓我改變它。我會用什麼API調用來改變筆記本電腦(.NET)的亮度?

目前我所要做的就是打開電源控制面板,點擊高級設置,並通過如此多的UAC盒打鬥,任何看着我的人都必須認爲我完全瘋了。

我只想要一個簡單的小程序來做到這一點,但我不知道該叫什麼API

回答

9

我在MSDN擡頭John Rudy的鏈接WmiSetBrightness以及與此想出了:

ManagementClass mclass = new ManagementClass("WmiMonitorBrightnessMethods"); 
mclass.Scope = new ManagementScope(@"\\.\root\wmi"); 
ManagementObjectCollection instances = mclass.GetInstances(); 

// I assume you get one instance per monitor 
foreach(ManagementObject instance in instances) 
{ 
    ulong timeout = 1; // in seconds 
    ushort brightness = 50; // in percent 
    object[] args = new object[] { timeout, brightness }; 
    instance.InvokeMethod("WmiSetBrightness", args); 
} 

注:ManagementClassManagementObjectCollectionManagementObject都實現IDisposable。您應該致電Dispose()或使用「using」以避免泄漏資源。

2

這僅僅是Vista的:

http://msdn.microsoft.com/en-us/library/ms775232.aspx

您需要設置之前GetPhysicalMonitorsFromHMONITOR確定監聽其亮度與SetMonitorBrightness。我懷疑沒有人在.net中完成它,所以你可能需要編寫自己的互操作。 api似乎不是特別困難,所以你應該能夠很容易地做到這一點。

+0

Vista和Server 2008 – Lucas 2009-04-28 18:16:07

1

據我所知,沒有託管(.NET)的API。但是,對於Vista,通過互操作可以使用非託管API。請參閱MSDN:Monitor Configuration APIsWmiSetBrightness

可能有管理方式擊中WmiSetBrightness方法,但我不知道它們。

如果您不在Vista或Server 2008上,那麼您將處於一個不愉快的世界:軟件配置必須通過顯示器驅動程序直接完成。根據你上面提到的UAC,我懷疑你不是這種情況,但下一個人可能想知道。 :)

+0

+1,我基於你的答案;) – Lucas 2009-04-28 18:16:54

0

要添加到DaEagles的答案,http://www.pinvoke.net/網站可以在使用.Net中的win32-apis時節省生命。如果這些信息不存在,請在您爲.Net成功完成互操作時添加它。

1

只是一個在這裏的頭腦風暴......在筆記本電腦上,你可以使用鍵盤上的一些鍵組合來改變亮度。應該可以發送這些按鍵如果您只是想讓它變得更暗/更輕,而不必將其設置爲特定值。

+1

問題是,愚蠢的索尼有一個驅動程序的亮度(它不是基於硬件)。我只是不能讓它與UAC的2008服務器一起工作。從來沒有嘗試沒有 – 2008-12-17 01:31:27

相關問題