using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using SmartScanner.OperateLog; using Microsoft.Win32; namespace SmartScanner { /// /// DownloadData.xaml 的交互逻辑 /// public partial class DownloadData : Window { public static bool ImageSave;//图像保存 public static string ImageSavingPath;//保存路径 public static int ImageCompressionRatio_main;//图像压缩比率 public static int ImageDeleteData_main;//图像定期删除 public static string ImageFormat_main;//图像保存格式 public static bool MemoryAlarm_main;//存储空间报警 public static int ImageMemoryAlarm_main;//存储空间报警 private bool isF = false; public static bool isOP = true; public DownloadData() { InitializeComponent(); isF = true; Init(); // 窗口关闭时保存设置 this.Closed += (s, e) => Properties.Settings.Default.Save(); } public void SetControlsEnabled(bool isEnabled) { // 禁用或启用所有可编辑的控件 //LoadConfig_RJ.IsEnabled = isEnabled; SelectFilePath.IsEnabled = isEnabled; ImageDeleteCheck.IsEnabled = isEnabled; Data_deleteImage.IsEnabled = isEnabled; ImageSaveCheck.IsEnabled = isEnabled; ImageFormat.IsEnabled = isEnabled; ImageCompressionRatio.IsEnabled = isEnabled; MemoryAlarmCheck.IsEnabled = isEnabled; MemoryAlarm.IsEnabled = isEnabled; SetDataSavingRoad.IsEnabled = isEnabled; // ... 其他需要控制的控件 } public void Init() { ImageSave = (bool)ImageSaveCheck.IsChecked; MemoryAlarm_main = (bool)MemoryAlarmCheck.IsChecked; ImageMemoryAlarm_main = (int)MemoryAlarm.Value; ImageSavingPath = SetDataSavingRoad.Text; ImageCompressionRatio_main = (int)ImageCompressionRatio.Value; ImageDeleteData_main = (int)Data_deleteImage.Value; switch (ImageFormat.SelectedIndex) { case 0: ImageFormat_main = ".BMP"; break; case 1: ImageFormat_main = ".JPG"; break; case 2: ImageFormat_main = ".PNG"; break; default: break; } if (ImageFormat.SelectedIndex == 0) { CompressionVisible.Visibility = Visibility.Collapsed; } else { CompressionVisible.Visibility = Visibility.Visible; } } private void SetDataSavingRoad_MouseDoubleClick(object sender, MouseButtonEventArgs e) { var folderDialog = new System.Windows.Forms.FolderBrowserDialog { Description = "选择图像存储路径", SelectedPath = Properties.Settings.Default.DataSavingRoad }; if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Properties.Settings.Default.DataSavingRoad = folderDialog.SelectedPath; SetDataSavingRoad.Text = folderDialog.SelectedPath; } // 记录日志 OperateLogService.LogOperation( "图像存储路径修改", $"路径修改为: {folderDialog.SelectedPath}", null); } private void SelectFilePath_Click(object sender, RoutedEventArgs e) { var folderDialog = new System.Windows.Forms.FolderBrowserDialog { Description = "选择图像存储路径", SelectedPath = Properties.Settings.Default.DataSavingRoad }; if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Properties.Settings.Default.DataSavingRoad = folderDialog.SelectedPath; SetDataSavingRoad.Text = folderDialog.SelectedPath; } // 记录日志 OperateLogService.LogOperation( "图像存储路径修改", $"路径修改为: {folderDialog.SelectedPath}", null); } private void ImageDeleteCheck_Unchecked(object sender, RoutedEventArgs e) { } private void ImageDeleteCheck_Checked(object sender, RoutedEventArgs e) { } private void ImageSaveCheck_Unchecked(object sender, RoutedEventArgs e) { ImageSave = false; // 记录日志 OperateLogService.LogOperation( "图像是否保存修改", $"修改为: 不保存", null); } private void ImageSaveCheck_Checked(object sender, RoutedEventArgs e) { ImageSave = true; // 记录日志 OperateLogService.LogOperation( "图像是否保存修改", $"修改为: 保存", null); } private void Confirm_Btn_Click(object sender, RoutedEventArgs e) { Properties.Settings.Default.Save(); MessageBox.Show("设置成功 注:定期清图功能需重启软件后生效", "成功", MessageBoxButton.OK, MessageBoxImage.Asterisk); } private void ImageCompressionRatio_LostFocus(object sender, RoutedEventArgs e) { if (ImageCompressionRatio.Value == null) { return; } ImageCompressionRatio_main = (int)ImageCompressionRatio.Value; // 记录日志 OperateLogService.LogOperation( "图像压缩比率修改", $"修改为: {ImageCompressionRatio_main}", null); } private void Data_deleteImage_LostFocus(object sender, RoutedEventArgs e) { if (Data_deleteImage.Value == null) { return; } ImageDeleteData_main = (int)Data_deleteImage.Value; // 记录日志 OperateLogService.LogOperation( "清图周期修改", $"修改为: {ImageDeleteData_main}", null); } private void ImageFormat_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isF) return; switch (ImageFormat.SelectedIndex) { case 0: ImageFormat_main = ".BMP"; break; case 1: ImageFormat_main = ".JPG"; break; case 2: ImageFormat_main = ".PNG"; break; default: break; } if (ImageFormat.SelectedIndex == 0) { CompressionVisible.Visibility = Visibility.Collapsed; } else { CompressionVisible.Visibility = Visibility.Visible; } // 记录日志 OperateLogService.LogOperation( "图片保存格式修改", $"修改为: {ImageFormat_main}", null); } private void ImageFormat_LostFocus(object sender, RoutedEventArgs e) { if (!isF) return; switch (ImageFormat.SelectedIndex) { case 0: ImageFormat_main = ".BMP"; break; case 1: ImageFormat_main = ".JPG"; break; case 2: ImageFormat_main = ".PNG"; break; default: break; } if (ImageFormat.SelectedIndex == 0) { CompressionVisible.Visibility = Visibility.Collapsed; } else { CompressionVisible.Visibility = Visibility.Visible; } // 记录日志 OperateLogService.LogOperation( "图片保存格式修改", $"修改为: {ImageFormat_main}", null); } private void MemoryAlarmCheck_Unchecked(object sender, RoutedEventArgs e) { MemoryAlarm_main = false; } private void MemoryAlarmCheck_Checked(object sender, RoutedEventArgs e) { MemoryAlarm_main = true; } private void MemoryAlarm_LostFocus(object sender, RoutedEventArgs e) { if (MemoryAlarm.Value == null) { return; } ImageMemoryAlarm_main = (int)MemoryAlarm.Value; } private (double usedPercentage, string driveName) GetDriveUsage() { // 获取系统盘 DownloadData downloadData = new DownloadData(); DriveInfo drive = new DriveInfo($"{downloadData.SetDataSavingRoad.Text}"); double totalSpace = drive.TotalSize; double freeSpace = drive.AvailableFreeSpace; double usedPercentage = 100 - (freeSpace / totalSpace * 100); return (usedPercentage, drive.Name); } public async void CheckStorage() { while (isOP) { if (MemoryAlarm_main) { var (usedPercentage, driveName) = GetDriveUsage(); int threshold = 100 - (int)MemoryAlarm.Value; Dispatcher.Invoke(() => { if (usedPercentage >= threshold) { // 报警:显示红色警告 MessageBox.Show($"{driveName} 盘已使用 {usedPercentage:F1}%!", "警告", MessageBoxButton.OK, MessageBoxImage.Warning); } else { Console.WriteLine($"{driveName} 盘已使用 {usedPercentage:F1}%!"); } }); await Task.Delay(10000); } else { await Task.Delay(10000); } } } } }