181 lines
6.1 KiB
C#
181 lines
6.1 KiB
C#
using Microsoft.Win32;
|
|
using System;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using GetHrzLib.Models;
|
|
namespace GetHrzWPF
|
|
{
|
|
public partial class MainWindow : Window
|
|
{
|
|
private string _currentFilePath;
|
|
/// <summary>
|
|
/// 213
|
|
/// </summary>
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void OnOpenClickimg(object sender, RoutedEventArgs e)
|
|
{
|
|
var dlg = new OpenFileDialog
|
|
{
|
|
Title = "Выбери файл .img",
|
|
Filter = "IMG files (*.img)|*.img|All files (*.*)|*.*",
|
|
Multiselect = false,
|
|
CheckFileExists = true
|
|
};
|
|
|
|
if (dlg.ShowDialog(this) == true)
|
|
{
|
|
// InfoLabel.Content = dlg.FileName;
|
|
// LogBox.AppendText($"Открыт образ: {dlg.FileName}{Environment.NewLine}");
|
|
// LogBox.ScrollToEnd();
|
|
}
|
|
string filePath = dlg.FileName;
|
|
|
|
try
|
|
{
|
|
using var writer = new StringWriter();
|
|
BlockProcessor.Process(writer, filePath);
|
|
|
|
_currentFilePath = filePath;
|
|
|
|
InfoLabel.Content = filePath;
|
|
LogBox.Text = writer.ToString();
|
|
LogBox.ScrollToEnd();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogBox.Text = $"Ошибка: {ex.Message}";
|
|
}
|
|
}
|
|
|
|
private async void OnOpenClickdisk(object sender, RoutedEventArgs e)
|
|
{
|
|
// 1) Берём список USB через вашу библиотеку
|
|
var usbDrives = UsbDriveService.GetUsbDrivesSafe();
|
|
if (usbDrives.Count == 0)
|
|
{
|
|
MessageBox.Show(this, "Съёмные USB-диски не найдены.", "USB",
|
|
MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
// 2) Окно выбора диска (как вы уже делали)
|
|
var dlg = new SelectUsbWindow(usbDrives) { Owner = this };
|
|
if (dlg.ShowDialog() != true || dlg.SelectedDrive == null)
|
|
return;
|
|
|
|
// 3) Конвертируем "E:\" -> "\\.\E:" (RAW путь)
|
|
string devicePath = dlg.SelectedDrive.ToFullPath();
|
|
|
|
try
|
|
{
|
|
ProgressBar.Visibility = Visibility.Visible;
|
|
|
|
string result = await Task.Run(() =>
|
|
{
|
|
using (var writer = new StringWriter())
|
|
{
|
|
BlockProcessor.Process(writer, devicePath);
|
|
return writer.ToString();
|
|
}
|
|
});
|
|
|
|
_currentFilePath = devicePath;
|
|
InfoLabel.Content = "USB (raw): " + devicePath;
|
|
LogBox.Text = result;
|
|
LogBox.ScrollToEnd();
|
|
}
|
|
catch (UnauthorizedAccessException)
|
|
{
|
|
LogBox.Text =
|
|
"Ошибка: отказано в доступе к USB как RAW-устройству.\r\n" +
|
|
"Запустите приложение от имени администратора.\r\n" +
|
|
$"Путь: {devicePath}";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogBox.Text = $"Ошибка: {ex.Message}";
|
|
}
|
|
finally
|
|
{
|
|
ProgressBar.Visibility = Visibility.Collapsed;
|
|
}
|
|
|
|
}
|
|
|
|
private async void GetHrzButton_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(_currentFilePath))
|
|
{
|
|
MessageBox.Show(this, "Сначала выберите файл/диск для обработки.", "GetHrz",
|
|
MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
// Диалог сохранения
|
|
var sfd = new SaveFileDialog
|
|
{
|
|
Title = "Сохранить результат",
|
|
FileName = "Restore_hrz.hrz",
|
|
Filter = "HRZ files (*.hrz)|*.hrz|All files (*.*)|*.*",
|
|
AddExtension = true,
|
|
DefaultExt = ".hrz",
|
|
OverwritePrompt = true
|
|
};
|
|
|
|
if (sfd.ShowDialog(this) != true)
|
|
{
|
|
MessageBox.Show(this, "Сохранение отменено.", "GetHrz",
|
|
MessageBoxButton.OK, MessageBoxImage.Information);
|
|
return;
|
|
}
|
|
|
|
string savePath = sfd.FileName;
|
|
|
|
ProgressBar.Visibility = Visibility.Visible;
|
|
try
|
|
{
|
|
// Лог будем собирать в фоне
|
|
var sb = new StringBuilder();
|
|
|
|
await Task.Run(() =>
|
|
{
|
|
using (var writer = new StringWriter(sb))
|
|
{
|
|
BlockProcessor.ProcessGetHrz(writer, _currentFilePath, savePath);
|
|
}
|
|
});
|
|
|
|
// Мы уже вернулись в UI поток после await
|
|
LogBox.AppendText(sb.ToString());
|
|
LogBox.AppendText(Environment.NewLine);
|
|
LogBox.ScrollToEnd();
|
|
}
|
|
catch (UnauthorizedAccessException ex)
|
|
{
|
|
MessageBox.Show(this,
|
|
"Ошибка доступа.\n" + ex.Message,
|
|
"GetHrz",
|
|
MessageBoxButton.OK,
|
|
MessageBoxImage.Error);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(this,
|
|
"Ошибка при повторном чтении:\n" + ex.Message,
|
|
"GetHrz",
|
|
MessageBoxButton.OK,
|
|
MessageBoxImage.Error);
|
|
}
|
|
finally
|
|
{
|
|
ProgressBar.Visibility = Visibility.Collapsed;
|
|
}
|
|
}
|
|
}
|
|
} |