9

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

目前我要做的就是打开电源控制面板,点击高级设置,并通过这么多 UAC 框进行战斗,任何人看着我一定会认为我完全疯了。

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

4

5 回答 5

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);
}

注意:ManagementClass, ManagementObjectCollection, 和ManagementObject所有实现IDisposable。您应该调用Dispose()或使用“ using”来避免资源泄漏。

于 2009-04-28T18:15:40.440 回答
2

这只是远景:

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

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

于 2008-12-17T00:42:05.810 回答
1

据我所知,没有用于此的托管 (.NET) API。但是,对于 Vista,有可通过互操作使用的非托管 API。请参阅 MSDN:监视器配置 APIWmiSetBrightness

可能有一些可管理的方式来达到 WmiSetBrightness 方法,但我不知道它们。

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

于 2008-12-17T00:43:12.067 回答
1

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

于 2008-12-17T00:53:31.937 回答
0

要添加到 DaEagles 的答案,http: //www.pinvoke.net/站点可以成为在 .Net 中使用 win32-apis 时的救命稻草。如果该信息不存在,请在您为 .Net 成功进行互操作后添加。

于 2008-12-17T00:50:05.670 回答