我将使用什么API调用来改变笔记本电脑(.NET)的亮度?

时间:2008-12-17 00:34:18

标签: .net winapi api brightness

我在Sony笔记本电脑上安装了Windows Server 2008,亮度控制不起作用。我想写一个程序让我改变它。

目前我要做的就是打开电源控制面板,点击高级设置,然后通过如此多的UAC盒子进行战斗,任何看着我的人都必须认为我完全疯了。

我只想要一个简单的小程序来做,但我不知道要调用什么API

5 个答案:

答案 0 :(得分:9)

我在MSDN中查找了John RudyWmiSetBrightness链接,并想出了这个:

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”以避免资源泄漏。

答案 1 :(得分:2)

这只是vista:

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

在使用SetMonitorBrightness设置亮度之前,您需要使用GetPhysicalMonitorsFromHMONITOR识别显示器。我怀疑在.net之前没有人这样做过,所以你可能需要编写自己的互操作。 api看起来并不是特别困难,所以你应该能够很容易地做到这一点。

答案 2 :(得分:1)

据我所知,没有托管(.NET)API。但是,对于Vista,可以通过互操作提供非托管API。请参阅MSDN:Monitor Configuration APIsWmiSetBrightness

可能有管理方式来命中WmiSetBrightness方法,但我不知道它们。

如果您不在Vista或Server 2008上,那么您将面临一个令人不快的世界:软件配置必须直接通过显示器驱动程序完成。基于你上面提到的UAC,我怀疑对你来说并非如此,但下一个人可能想知道。 :)

答案 3 :(得分:1)

这里只是一个头脑风暴......在笔记本电脑上,您可以使用键盘上的一些按键角色来改变亮度。应该可以发送那些按键如果你只是想让它更暗/更轻而不必将它设置为特定值。

答案 4 :(得分:0)

要添加到DaEagles答案,{。3}}网站在.Net中使用win32-apis时可以节省生命。如果该信息不存在,请在为.Net创建成功的互操作后添加。