private void Button_Click_SaveTempFile(object sender, RoutedEventArgs e)
        {
            // Временный файл перемещается в директорию сохранения со штампом времени
            string SavePath = Environment.CurrentDirectory + "\\Saved";

            DateTime DateNow  = DateTime.Now;
            string   FullName = string.Concat("\\HexCode_" + DateNow.ToString("MM.dd.yyyy_HH.mm.ss") + ".txt");

            // Полный путь откуда идет запуск .exe - Environment.CurrentDirectory
            string FullPathOfTempFile = Environment.CurrentDirectory + "//TempHexFile.txt";

            if (File.Exists(FullPathOfTempFile) == true)
            {
                if (Directory.Exists(SavePath) != true)
                {
                    Directory.CreateDirectory(SavePath);
                    TextBoxConsole.AppendText("Папки «Saved» не существовало - она была создана.\n");
                }
                File.Move(Environment.CurrentDirectory + "\\TempHexFile.txt", SavePath + FullName);
                TextBoxConsole.AppendText("Файл с hex кодом сохранён по пути:\n");
                TextBoxConsole.AppendText(string.Concat(SavePath + FullName + "\n"));
            }
            else
            {
                MessageBox.Show(
                    this,
                    "Извлечение не проводилось или файл с извлечённым кодом повреждён",
                    "Ошибка сохранения кода", MessageBoxButton.OK,
                    MessageBoxImage.Warning);
            }
        }
        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            LHEProgressBar.Value          = LHEProgressBar.Maximum;
            StopOperationButton.IsEnabled = false;

            TextBoxConsole.AppendText("Извлечение hex кода ЗАВЕРШЕНО. ");

            DateTime DateOfEndGetHex = DateTime.Now;
            TimeSpan TimeGetHexCode  = DateOfEndGetHex - DateOfStartGetHex;

            TextBoxConsole.AppendText("На извлечение кода потребовалось: " + TimeGetHexCode.TotalSeconds + " секунд.\n");
        }
        private void Button_Click_DeleteTempData(object sender, RoutedEventArgs e)
        {
            // Полный путь откуда идет запуск .exe - Environment.CurrentDirectory
            string FullPathOfTempFile = Environment.CurrentDirectory + "//TempHexFile.txt";

            if (File.Exists(FullPathOfTempFile) == true)
            {
                File.Delete(FullPathOfTempFile);
                TextBoxConsole.AppendText("Был удалён 1 временный файл.\n");
            }
            else
            {
                TextBoxConsole.AppendText("Временных файлов не обнаружено.\n");
            }
        }
        private void Button_Click_LoadHex(object sender, RoutedEventArgs e)
        {
            // Полный путь откуда идет запуск .exe - Environment.CurrentDirectory
            string FullPathOfTempFile = Environment.CurrentDirectory + "//TempHexFile.txt";

            if (File.Exists(FullPathOfTempFile) == true)
            {
                FileInfo Test = new FileInfo(FullPathOfTempFile);
                TextBoxConsole.AppendText("Размер файла: " + Test.Length + " байт.\n");
                if (Test.Length > 3000000)
                {
                    string FullMesg = string.Concat("Обратите внимание: размер файла очень велик и равен" +
                                                    Test.Length +
                                                    " байт. Его закгрузка будет длиться приблизительно: " +
                                                    (Math.Round(Test.Length / 1000000.0) * 3.33) +
                                                    " секунд(-ы). Вы уверены, что хотите продолжить?");

                    MessageBoxResult result = MessageBox.Show(
                        this,
                        FullMesg,
                        "Операция загрузки кода в окно программы", MessageBoxButton.YesNo,
                        MessageBoxImage.Question);
                    if (result == MessageBoxResult.Yes)
                    {
                        HexCodeViewer.Text = File.ReadAllText(FullPathOfTempFile);
                    }
                }
                else
                {
                    HexCodeViewer.Text = File.ReadAllText(FullPathOfTempFile);
                }
            }
            else
            {
                MessageBox.Show(
                    this,
                    "Извлечение не проводилось или файл с извлечённым кодом повреждён",
                    "Ошибка загрузки кода в окно", MessageBoxButton.OK,
                    MessageBoxImage.Warning);
            }
        }
        private int CheckMD5()
        {
            // Проверка целостности .dll файла

            string MD5HashCode;

            using (var md5 = MD5.Create())
            {
                using (var stream = File.OpenRead("lhe_32.dll"))
                {
                    byte[] Ex = md5.ComputeHash(stream);

                    string Tmp;
                    MD5HashCode = "";

                    for (int i = 0; i < Ex.Length; i++)
                    {
                        Tmp         = Ex[i].ToString("X2");
                        MD5HashCode = string.Concat(MD5HashCode, Tmp);
                    }
                }
            }
            string ReallyMD5HashCode = "29CC1A1CA12FAE6B1F72BA7B01F19775";

            if (string.Compare(ReallyMD5HashCode, MD5HashCode) == 0)
            {
                TextBoxConsole.AppendText("Файл lhe_32.dll успешно прошёл проверку целостности.\n");
                return(0);
            }
            else
            {
                TextBoxConsole.AppendText("Файл lhe_32.dll повреждён.\n");
                return(1);
            }
            // Конец проверки
        }
        // Конец секции импорта

        private void Button_Click_GetHex(object sender, RoutedEventArgs e)
        {
            // Переменная для проверки целостности
            int result_md5 = -1;

            // Начало проверки существования .dll файла
            if (File.Exists("lhe_32.dll") == true)
            {
                TextBoxConsole.AppendText("Файл lhe_32.dll существует. ");
                TextBoxConsole.AppendText("Начата проверка...\n");
                result_md5 = CheckMD5();
            }
            else
            {
                TextBoxConsole.AppendText("Файла lhe_32.dll не существует.\n");
            }
            // Конец проверки


            // Вызов функции из .dll (если .dll нет, то будет вызван обработчик исключения

            try
            {
                if (FilePathIn == "")
                {
                    TextBoxConsole.AppendText("Путь до файла ПУСТ - проверьте путь.\n");
                }
                else
                {
                    if (result_md5 == 0)
                    {
                        PathToFile(FilePathIn, Environment.CurrentDirectory + "//TempHexFile.txt");

                        DateTime DateOfStartStat, DateOfEndStat;
                        DateOfStartStat = DateTime.Now;

                        int SizeFile = SizeOfFile();
                        TextBoxStatistics.AppendText("Размер файла: " + SizeFile + " байт.\n");

                        double NumOfAllLine = (SizeFile / 16.0);
                        TextBoxStatistics.AppendText("Всего строк: " + Math.Ceiling(NumOfAllLine) + ".\n");
                        double NumOfFullLine = (SizeFile / 16.0);
                        TextBoxStatistics.AppendText("Количество полных строк: " + Math.Floor(NumOfFullLine) + ".\n");

                        // Если байт 1700, а чтение 1600, то будет 1,0625: Ceiling = 2, Floor = 1
                        double StageForProgressBar = (SizeFile / 3200.0);
                        TextBoxStatistics.AppendText("Делений у прогресс бара: " + Math.Ceiling(StageForProgressBar) + ".\n");
                        LHEProgressBar.Minimum = 0;
                        LHEProgressBar.Maximum = Math.Ceiling(StageForProgressBar);

                        DateOfEndStat = DateTime.Now;
                        TimeSpan TimeInWork = DateOfEndStat - DateOfStartStat;

                        TextBoxConsole.AppendText("На анализ потрачено: " + (TimeInWork.TotalSeconds) + " секунд.\n");

                        MessageBoxResult result = MessageBox.Show(
                            this,
                            "Начать операцию извлечения кода?",
                            "Получение кода", MessageBoxButton.YesNo,
                            MessageBoxImage.Question);
                        if (result == MessageBoxResult.Yes)
                        {
                            TextBoxConsole.AppendText("Разрешение на операцию извлечения - дано.\n");

                            //******************************* ДОЛГАЯ ОПЕРАЦИЯ *******************************\\

                            StopOperationButton.IsEnabled = true;

                            DateOfStartGetHex = DateTime.Now;

                            backgroundWorker.RunWorkerAsync();

                            //******************************* ДОЛГАЯ ОПЕРАЦИЯ *******************************\\
                        }
                        else
                        {
                            TextBoxConsole.AppendText("Разрешение на операцию извлечения НЕ дано.\n");
                        }
                    }
                    else
                    {
                        TextBoxConsole.AppendText("Необходимо вновь получить lhe_32.dll - нарушена его целостность.");
                        MessageBox.Show(this, "Файл .dll повреждён", "Критическая ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            }
            catch (DllNotFoundException text)
            {
                MessageBox.Show(text.Message);
            }

            // Конец секции вызова и проверки
        }