说明
用到WMI查询,引用System.Management,涉及COM,无法裁剪,则可以忽略System.Management,此dll不进行裁剪,配置如下
C#
<ItemGroup>
<TrimmerRootAssembly Include="System.Management" />
</ItemGroup>
监听类
C#
public class LightWatcher : IDisposable
{
public event EventHandler<BrightnessChangedEventArgs> BrightnessChanged;
public class BrightnessChangedEventArgs : EventArgs
{
public object newBrightness { get; set; }
public BrightnessChangedEventArgs(object b)
{
this.newBrightness = b;
}
}
private void WmiEventHandler(object sender, EventArrivedEventArgs e)
{
if (OperatingSystem.IsWindows())
{
if (BrightnessChanged != null)
{
BrightnessChanged(this, new BrightnessChangedEventArgs(e.NewEvent.Properties["Brightness"].Value));
}
}
}
private readonly ManagementEventWatcher _watcher;
public LightWatcher()
{
DEBUG || RELEASE
if (OperatingSystem.IsWindows())
{
try
{
var scope = @"root\wmi";
var query = "SELECT * FROM WmiMonitorBrightnessEvent";
_watcher = new ManagementEventWatcher(scope, query);
_watcher.EventArrived += new EventArrivedEventHandler(WmiEventHandler);
_watcher.Start();
}
catch (Exception e)
{
Console.WriteLine("Exception {0} Trace {1}", e.Message, e.StackTrace);
}
}
}
public void Dispose()
{
if (OperatingSystem.IsWindows())
{
if (_watcher != null)
{
_watcher.Stop();
}
_watcher.Dispose();
}
}
}
获取、设置类
C#
public static class LightWmiHelper
{
public static int GetBrightnessLevel()
{
if (OperatingSystem.IsWindows())
{
try
{
var s = new ManagementScope("root\\WMI");
var q = new SelectQuery("WmiMonitorBrightness");
var mos = new ManagementObjectSearcher(s, q);
var moc = mos.Get();
foreach (var managementBaseObject in moc)
{
foreach (var o in managementBaseObject.Properties)
{
if (o.Name == "CurrentBrightness")
return Convert.ToInt32(o.Value);
}
}
moc.Dispose();
mos.Dispose();
}
catch (ManagementException)
{
}
catch (Exception)
{
}
}
return 0;
}
public static void SetBrightnessLevel(int brightnessLevel)
{
if (OperatingSystem.IsWindows())
{
if (brightnessLevel < 0 ||
brightnessLevel > 100)
throw new ArgumentOutOfRangeException("brightnessLevel");
try
{
var s = new ManagementScope("root\\WMI");
var q = new SelectQuery("WmiMonitorBrightnessMethods");
var mos = new ManagementObjectSearcher(s, q);
var moc = mos.Get();
foreach (var managementBaseObject in moc)
{
var o = (ManagementObject)managementBaseObject;
o.InvokeMethod("WmiSetBrightness", new object[]
{
UInt32.MaxValue,
brightnessLevel
});
}
moc.Dispose();
mos.Dispose();
}
catch (ManagementException)
{
}
catch (Exception)
{
}
}
}
}