using System; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; using System.Windows.Threading; using Correlator.Util; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using LiveCharts; using LiveCharts.Defaults; namespace Correlator.ViewModel { public class AuditionViewModel : ViewModelBase { public RelayCommand MuteCommand { get; set; } public IChartValues ColumnValues { get; set; } = new ChartValues<ObservablePoint>(); /// <summary> /// 传感器A信号强度0-5 /// </summary> private int _sensorASignalIntensity; public int SensorASignalIntensity { get => _sensorASignalIntensity; private set { _sensorASignalIntensity = value; RaisePropertyChanged(() => SensorASignalIntensity); } } /// <summary> /// 传感器B信号强度0-5 /// </summary> private int _sensorBSignalIntensity; public int SensorBSignalIntensity { get => _sensorBSignalIntensity; private set { _sensorBSignalIntensity = value; RaisePropertyChanged(() => SensorBSignalIntensity); } } /// <summary> /// 传感器A按钮 /// </summary> private bool _sensorAIsEnable; public bool SensorAIsEnable { get => _sensorAIsEnable; set { _sensorAIsEnable = value; RaisePropertyChanged(() => SensorAIsEnable); } } /// <summary> /// 传感器B按钮 /// </summary> private bool _sensorBIsEnable; public bool SensorBIsEnable { get => _sensorBIsEnable; set { _sensorBIsEnable = value; RaisePropertyChanged(() => SensorBIsEnable); } } private bool _muteIsChecked = true; public bool MuteIsChecked { get => _muteIsChecked; set { _muteIsChecked = value; RaisePropertyChanged(() => MuteIsChecked); } } #region user32.dll private const byte VkVolumeMute = 0xAD; private const byte VkVolumeDown = 0xAE; private const byte VkVolumeUp = 0xAF; private const uint KeyEventExtendedKey = 0x0001; private const uint KeyEventKeyUp = 0x0002; //函数名不能改,否则会报找不到函数错误,dll里面定好了的 [DllImport("user32.dll")] private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo); [DllImport("user32.dll")] private static extern byte MapVirtualKey(uint uCode, uint uMapType); #endregion private readonly DispatcherTimer _statusTimer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) }; public AuditionViewModel() { //静音 MuteCommand = new RelayCommand(() => { if (_muteIsChecked) { //静音 keybd_event(VkVolumeMute, MapVirtualKey(VkVolumeMute, 0), KeyEventExtendedKey, 0); keybd_event(VkVolumeMute, MapVirtualKey(VkVolumeMute, 0), KeyEventExtendedKey | KeyEventKeyUp, 0); } else { //非静音 keybd_event(VkVolumeMute, MapVirtualKey(VkVolumeMute, 0), KeyEventExtendedKey, 0); keybd_event(VkVolumeMute, MapVirtualKey(VkVolumeMute, 0), KeyEventExtendedKey | KeyEventKeyUp, 0); } }); var random = new Random(); for (var i = 0; i < 100; i++) { var p = new ObservablePoint { X = i, Y = random.Next(-60, 60) }; ColumnValues.Add(p); } //动态显示折线图 Task.Factory.StartNew(RandomTempValue); //每秒查询信号状态 _statusTimer.Tick += delegate { SensorASignalIntensity = 5; SensorAIsEnable = FlowStatus.RedSensorIsEnable; SensorBSignalIntensity = 5; SensorBIsEnable = FlowStatus.BlueSensorIsEnable; }; _statusTimer.Start(); } private void RandomTempValue() { var random = new Random(); var i = 100; while (true) { Thread.Sleep(100); i++; var y = random.Next(-60, 60); ColumnValues.Add(new ObservablePoint(i, y)); //设置最多显示150个点 if (ColumnValues.Count > 100) { ColumnValues.RemoveAt(0); } } } } }