2008-12-17 68 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

相关问题