using System; using System.IO; using System.Windows; using SHJX.Service.View.View; using SHJX.Service.Common.ReadXML; using SHJX.Service.Common.Extend; using System.Runtime.InteropServices; using SHJX.Service.Common.UserDelegate; using SHJX.Service.Common.ExtendElement; using SHJX.Service.ModelView; using SHJX.Service.Common.Logging; using Microsoft.Extensions.Logging; namespace SHJX.Service.View { /// /// MainForm.xaml 的交互逻辑 /// public partial class MainForm : Window { private static readonly ILogger logger = LogFactory.BuildLogger(typeof(MainForm)); private readonly ReadConfigUtil _config; private readonly MainViewModel _viewModel; public readonly MainViewModel Maincontroller; private SettingForm _settingForm; private AboutForm _about; private ManualForm _manual; private TemplateWindow _template; private ModifyResult _modifyResult; /// /// 配置文件读取 /// public MainForm() { WindowsSleep(true); InitializeComponent(); ResizeMode = ResizeMode.CanMinimize; } private int cameraNum = 0; public MainForm(ReadConfigUtil config) { try { WindowsSleep(true); _viewModel = new MainViewModel(config, out int camera); cameraNum = camera; DataContext = _viewModel; Maincontroller= _viewModel; Messager.Register("ScreenShot", ScreenShot); Messager.Register("ShowWindow", ShowWindow); Messager.Register("SystemMinSize", SystemMinSize); InitializeComponent(); _config = config; ResizeMode = ResizeMode.CanMinimize; } catch (Exception ex) { logger.LogError(ex.Message); } } private void WaterMachineOpenClick(object sender, EventArgs e) { try { UMessageBox.Info("请确认:\r\r 1: 【冷凝水机】\r 2:【空气压缩机】\r\r两者均已开启!!!\r否则对设备造成严重损害!").Equals(MessageBoxResult.Yes); this.beiginTask.IsEnabled = true; } catch (Exception ex) { logger.LogError(ex.Message); } } private void WaterMachineCloseClick(object sender, EventArgs e) { try { this.beiginTask.IsEnabled = false; } catch (Exception ex) { logger.LogError(ex.Message); } } #region 窗体休眠 //定义API函数 [DllImport("kernel32.dll")] private static extern uint SetThreadExecutionState(uint esFlags); private const uint ES_SYSTEM_REQUIRED = 0x00000001; private const uint ES_DISPLAY_REQUIRED = 0x00000002; private const uint ES_CONTINUOUS = 0x80000000; public static void WindowsSleep(bool sleepOrNot) { if (sleepOrNot) { SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED);//阻止休眠时调用 } else { //恢复休眠时调用 SetThreadExecutionState(ES_CONTINUOUS); } } #endregion #region 窗体最大化 private void Window_SizeChanged(object sender, SizeChangedEventArgs e) { if (this.ActualHeight > SystemParameters.WorkArea.Height || this.ActualWidth > SystemParameters.WorkArea.Width) { WindowState = WindowState.Normal; btnMaximize_Click(null, null); } } /// /// 最大化 /// private void btnMaximize_Click(object sender, RoutedEventArgs e) { this.Left = 0; //设置位置 this.Top = 0; Rect rc = SystemParameters.WorkArea; //获取工作区大小 this.Width = rc.Width; this.Height = rc.Height; } #endregion private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { WindowsSleep(false); } private void ScreenCapture_Click(object sender, RoutedEventArgs e) { Dispatcher.Invoke(new Action(() => ScreenShot(null))); } public void ScreenShot(object obj) { var bit = this.ScreenConvertToBitmap(); DirectoryInfo d = new DirectoryInfo(Path.Combine(Directory.GetCurrentDirectory(), $"cache\\{DateTime.Now:yyyy-MM-dd}")); if (!d.Exists) d.Create(); var photoName = $"软件截图{DateTime.Now:yyyyMMddHHmmssfff}.png"; bit.Save(Path.Combine(d.FullName, photoName)); UMessageBox.SuccessTip("截图保存成功!"); } private void SystemMinSize(object obj) { WindowState = WindowState.Minimized; } public void ShowWindow(object name) { switch (name.ToString()) { case "manual": _manual = new ManualForm(_config); _manual.ShowDialog(); break; case "setting": _settingForm = new SettingForm(Maincontroller, _config); _settingForm.ShowDialog(); break; case "about": _about = new AboutForm(_config); _about.ShowDialog(); break; case "template": _template = new TemplateWindow(_config); _template.ShowDialog(); break; } } private void cameraNumCombobox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { //if (!cameraNumCombobox.IsLoaded) // return; //if (e.RemovedItems.Count >0) //{ // if (cameraNum.ToString() == cameraNumCombobox.Text.ToString()) // { // } // else // { // cameraNumCombobox.Text = cameraNum.ToString(); // UMessageBox.Error("只检测到" + cameraNum + "个相机,请检查相机的连接和相机参数配置是否有问题"); // } //} } private void cameraNumCombobox_DropDownClosed(object sender, EventArgs e) { if (cameraNum.ToString() == cameraNumCombobox.Text.ToString()||cameraNumCombobox.Text == "0") { } else { cameraNumCombobox.Text = cameraNum.ToString(); UMessageBox.Error("只检测到" + cameraNum + "个相机," + "请检查相机的连接和相机参数配置是否有问题"); } } private void Label_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) { _modifyResult = new ModifyResult(); _modifyResult.ShowDialog(); } } }