GetMonitorBrightness http://msdn.microsoft.com/en-us/library/ms775205.aspx如何运作?有人能给我一个在C#中调用此代码的实际工作实现吗?
我正在尝试检索笔记本电脑支持的允许亮度级别。
我有以下工作代码,将亮度设置为1到~150。但我正在寻找允许的输入值(最小值最大值)。
static void SetBrightness(byte targetBrightness)
{
ManagementScope scope = new ManagementScope("root\\WMI");
SelectQuery query = new SelectQuery("WmiMonitorBrightnessMethods");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
using (ManagementObjectCollection objectCollection = searcher.Get())
{
foreach (ManagementObject mObj in objectCollection)
{
mObj.InvokeMethod("WmiSetBrightness",
new Object[] { UInt32.MaxValue, targetBrightness });
break;
}
}
}
}
答案 0 :(得分:4)
虽然使用Interop应该可以通过WMI使用此功能。稍微更改我的原始代码会导致以下代码起作用:
ManagementScope scope;
SelectQuery query;
scope = new ManagementScope("root\\WMI");
query = new SelectQuery("SELECT * FROM WmiMonitorBrightness");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
using (ManagementObjectCollection objectCollection = searcher.Get())
{
foreach (ManagementObject mObj in objectCollection)
{
Console.WriteLine(mObj.ClassPath);
foreach (var item in mObj.Properties)
{
Console.WriteLine(item.Name + " " +item.Value.ToString());
if(item.Name =="CurrentBrightness")
//Do something with CurrentBrightness
}
}
}
}
现在我真的很好奇如何处理特殊的'像非笔记本电脑屏幕的情况,如果他们实施任何影响亮度的方式。
答案 1 :(得分:1)
该函数具有最小值和最大值的输出:
LPDWORD pdwMinimumBrightness=NULL;
LPDWORD pdwMaximumBrightness=NULL;
HANDLE pmh = pPhysicalMonitors[0].hPhysicalMonitor;
GetMonitorBrightness(pmh, pdwMinimumBrightness, pdwMaximumBrightness);
这假设您需要第一个监视器的值。