说明
用到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) { } } }}
支付宝微信扫一扫,打赏作者吧~
