我在索尼笔记本电脑上安装了 Windows Server 2008,但亮度控制不起作用。我想写一个程序来让我改变它。
目前我要做的就是打开电源控制面板,点击高级设置,并通过这么多 UAC 框进行战斗,任何人看着我一定会认为我完全疯了。
我只想要一个简单的小程序来做,但我不知道要调用什么 API
我在索尼笔记本电脑上安装了 Windows Server 2008,但亮度控制不起作用。我想写一个程序来让我改变它。
目前我要做的就是打开电源控制面板,点击高级设置,并通过这么多 UAC 框进行战斗,任何人看着我一定会认为我完全疯了。
我只想要一个简单的小程序来做,但我不知道要调用什么 API
我在 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
”来避免资源泄漏。
这只是远景:
http://msdn.microsoft.com/en-us/library/ms775232.aspx
在使用 SetMonitorBrightness 设置其亮度之前,您需要使用 GetPhysicalMonitorsFromHMONITOR 识别显示器。我怀疑以前没有人在.net 中做过,所以你可能需要编写自己的互操作。该 api 似乎并不特别困难,因此您应该能够很容易地做到这一点。
据我所知,没有用于此的托管 (.NET) API。但是,对于 Vista,有可通过互操作使用的非托管 API。请参阅 MSDN:监视器配置 API和WmiSetBrightness。
可能有一些可管理的方式来达到 WmiSetBrightness 方法,但我不知道它们。
如果您不在 Vista 或 Server 2008 上,那么您将进入一个不愉快的世界:软件配置必须直接通过显示器驱动程序完成。根据您上面提到的 UAC,我怀疑您的情况并非如此,但下一个人可能想知道。:)
这里只是一个头脑风暴者......在笔记本电脑上,您可以使用键盘上的一些组合键来更改亮度。如果您只想使其更暗/更亮而不必将其设置为特定值,则应该可以发送这些按键。
要添加到 DaEagles 的答案,http: //www.pinvoke.net/站点可以成为在 .Net 中使用 win32-apis 时的救命稻草。如果该信息不存在,请在您为 .Net 成功进行互操作后添加。