/// <summary> /// Инициализация кастомных RichTextBox с данными декодирования. /// </summary> /// <remarks> /// Отличается от обычного тем, что по умолчанию он недоступен для редактирования (Enabled = false), /// но выглядит как доступный. Используется во вкладках меню "Прием" и "Декодирование". /// </remarks> /// <param name="rtbMko">RichTextBox для заголовков МКО.</param> /// <param name="rtbMkoData">RichTextBox для данных МКО.</param> /// <param name="rtbDateTimeTitle">RichTextBox для заголовков даты и времени из МКО.</param> /// <param name="rtbDateTime">RichTextBox для даты и времени из МКО.</param> /// <param name="rtbServiceTitle">RichTextBox для заголовков служебной информации.</param> /// <param name="rtbServiceData">RichTextBox для данных служебной информации.</param> public static void DecodeRichTextBoxInit(DisabledRichTextBox rtbMko, DisabledRichTextBox rtbMkoData, DisabledRichTextBox rtbDateTimeTitle, DisabledRichTextBox rtbDateTime, DisabledRichTextBox rtbServiceTitle, DisabledRichTextBox rtbServiceData) { RobotoFont.AllocFont(rtbMko, 11); RobotoFont.AllocFont(rtbMkoData, 11); RobotoFont.AllocFont(rtbDateTimeTitle, 11); RobotoFont.AllocFont(rtbDateTime, 11); RobotoFont.AllocFont(rtbServiceTitle, 11); RobotoFont.AllocFont(rtbServiceData, 11); var MkoTitle = "Время конца формирования ТД (БШВ)\n\n" + "Первый год в текущем четырехлетии\n\n" + "Номер текущих суток четырехлетия\n\n" + "Оцифрованная бортовая шкала времени (БШВ)\n\n" + "Время конца формирования ППО (БШВ)\n\n" + "Параметры кватерниона L0\n\n" + "Параметры кватерниона L1\n\n" + "Параметры кватерниона L2\n\n" + "Параметры кватерниона L3\n\n" + "Время конца формирования ПЦДМ (БШВ)\n\n" + "Положение КА по оси X в формате IEEE-754 двойной\n\n" + "Положение КА по оси Y в формате IEEE-754 двойной\n\n" + "Положение КА по оси Z в формате IEEE-754 двойной"; rtbMko.Text = MkoTitle; rtbMko.BorderStyle = BorderStyle.None; var mkoData = "\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0\n\n\t0"; rtbMkoData.Text = mkoData; rtbMkoData.BorderStyle = BorderStyle.None; var dateTimeTitle = "\nМКО Дата:\n\nМКО Время:"; rtbDateTimeTitle.Text = dateTimeTitle; rtbDateTimeTitle.BorderStyle = BorderStyle.None; var dateTime = "\n0.0.0\n\n0:0:0"; rtbDateTime.Text = dateTime; rtbDateTime.BorderStyle = BorderStyle.None; var serviceTitle = "Время включения прибора ФЦП\n\n" + "Текущее бортовое время КА\n\n" + "Задержка начала сканирования строки по отношению к секундной метке\n\n" + "Порядковый номер комплекта прибора ЭА240 (МСУ - МР)\n\n" + "Маркер признака передачи блока аналоговой или цифровой телеметрии прибора\n\n" + "Блок служебной телеметрии прибора\n\n" + "Резерв\n\n" + "Интегралы уровней яркости внутренних калибровочных сигналов прибора"; rtbServiceTitle.Text = serviceTitle; rtbServiceTitle.BorderStyle = BorderStyle.None; var serviceData = "\t\t\t0\n\n\t\t\t0\n\n\t\t\t0\n\n\n\t\t\t0\n\n\t\t\t0\n\n\n\t\t\t0\n\n\t\t\t0\n\n\t\t\t0"; rtbServiceData.Text = serviceData; rtbServiceData.BorderStyle = BorderStyle.None; }
/// <summary> /// Обновление данных декодирования на GUI. /// </summary> /// <param name="linesService">Значения служебной информации полученной полосы.</param> /// <param name="linesTd">Значения ТД полученной полосы.</param> /// <param name="linesOshv">Значения ОШВ полученной полосы.</param> /// <param name="linesBshv">Значения БШВ полученной полосы.</param> /// <param name="linesPcdm">Значения ПЦДМ полученной полосы.</param> /// <param name="linesDate">Значения Даты и времени полученной полосы.</param> /// <param name="rtbDateTime">RichTextBox для даты и времени из МКО.</param> /// <param name="rtbMkoData">RichTextBox для данных МКО.</param> /// <param name="rtbServiceData">RichTextBox для данных служебной информации.</param> /// <param name="channels">Набор FlowLayoutPanel для одиночных каналов.</param> /// <param name="allChannels">Набор FlowLayoutPanel для каналов на вкладке "Все каналы".</param> /// <param name="channelsPanels">Набор контейнеров на которых находятся FlowLayoutPanel для одиночных каналов.</param> /// <param name="allChannelsPanels">Набор контейнеров на которых находятся FlowLayoutPanel для каналов на вкладке "Все каналы".</param> /// <param name="listImagesForSave">Список хранящий изображения по каждому каналу.</param> /// <param name="imagesLines">Полученные полосы изображений по каждому каналу.</param> public static void UpdateGuiDecodeData(string linesService, string linesTd, string linesOshv, string linesBshv, string linesPcdm, DateTime linesDate, DisabledRichTextBox rtbDateTime, DisabledRichTextBox rtbMkoData, DisabledRichTextBox rtbServiceData, FlowLayoutPanel[] channels, FlowLayoutPanel[] allChannels, Panel[] channelsPanels, Panel[] allChannelsPanels, List <Bitmap>[] listImagesForSave, DirectBitmap[] imagesLines) { var td = linesTd.Split(' '); var oshv = linesOshv.Split(' '); var bshv = linesBshv.Split(' '); var pcdm = linesPcdm.Split(' '); var service = linesService.Split(' '); // Собираем данные в richTextBox. Стремновато, но так быстрее. Если использовать 15 лейблов, то время декодирования увеличится где то на 20%. var mkoData = $"{td[0]} {td[1]}\n\n{td[2]}\n\n{td[3]}\n\n{oshv[0]} {oshv[1]}\n\n{bshv[0]} {bshv[1]}\n\n{bshv[2]} {bshv[3]}\n\n{bshv[4]} {bshv[5]}\n\n{bshv[6]} {bshv[7]}\n\n{bshv[8]} {bshv[9]}\n\n{pcdm[0]} {pcdm[1]}\n\n{pcdm[2]} {pcdm[3]} {pcdm[4]} {pcdm[5]}\n\n{pcdm[6]} {pcdm[7]} {pcdm[8]} {pcdm[9]}\n\n{pcdm[10]} {pcdm[11]} {pcdm[12]} {pcdm[13]}"; var date = $"{linesDate.Day}.{linesDate.Month}.{linesDate.Year}"; var time = $"{linesDate.Hour:D2}:{linesDate.Minute:D2}:{linesDate.Second:D2}"; var dateTime = $"\n{date}\n\n{time}"; // Служебная информация - расшифровка "Время включения прибора ФЦП". var fcpDaysFromHex = Convert.ToInt32($"{service[0]}{service[1]}", 16); // Кол-во суток. var fcpMsFromHex = Convert.ToInt32($"{service[2]}{service[3]}{service[4]}{service[5]}", 16); // Миллисекунды. var fcpUsFromHex = Convert.ToInt32($"{service[6]}{service[7]}", 16); // Микросекунды. var fcpDateTime = Constants.referenceDate + TimeSpan.FromDays(fcpDaysFromHex - 1) + TimeSpan.FromMilliseconds(fcpMsFromHex); var decodeFcpDateTime = $"{fcpDateTime.Day}.{fcpDateTime.Month}.{fcpDateTime.Year} {fcpDateTime.Hour:D2}:{fcpDateTime.Minute:D2}:{fcpDateTime.Second:D2}.{fcpUsFromHex}"; // Служебная информация - расшифровка "Текущее бортовое время КА". var onBoardHoursFromHex = Convert.ToInt32($"{service[8]}", 16); var onBoardMinutesFromHex = Convert.ToInt32($"{service[9]}", 16); var onBoardSecondsFromHex = Convert.ToInt32($"{service[10]}", 16); var onBoardTime = $"{onBoardHoursFromHex:D2}:{onBoardMinutesFromHex:D2}:{onBoardSecondsFromHex:D2}"; // Служебная информация - расшифровка "Задержка начала сканирования строки по отношению к секундной метке". var scanDelayFromHex = Convert.ToInt32($"{service[11]}", 16); // Служебная информация - расшифровка "Порядковый номер комплекта прибора ЭА240 (МСУ - МР)". var msuSerialTypeNumber = $"{service[12]}".ToCharArray(); var msuSerialNumber = Convert.ToInt32($"{msuSerialTypeNumber[0]}", 16); var msuSerialResult = string.Empty; if (msuSerialTypeNumber.Length > 1) // Костыль. Возникала ошибка при декодировании файла с NRZ. В нем в массив попадает только 1 элемент. { var msuSerialType = msuSerialTypeNumber[1] == 'F' ? "Резервный" : "Основной"; msuSerialResult = $"Номер прибора: {msuSerialNumber}. Полукомплект: {msuSerialType}"; } else { msuSerialResult = $"Номер прибора: {msuSerialNumber}"; } // Вывод служебной информации. var serviceData = $"\t{service[0]} {service[1]} {service[2]} {service[3]} {service[4]} {service[5]} {service[6]} {service[7]} ({decodeFcpDateTime})\n\n\t{service[8]} {service[9]} {service[10]} ({onBoardTime})\n\n\t{service[11]} ({scanDelayFromHex} мс)\n\n\n\t{service[12]} ({msuSerialResult})\n\n\t{service[13]}\n\n\n\t{service[14]} {service[15]} {service[16]} {service[17]} {service[18]} {service[19]} {service[20]} {service[21]} {service[22]} {service[23]} {service[24]} {service[25]} {service[26]} {service[27]} {service[28]} {service[29]} {service[30]} {service[31]} {service[32]} {service[33]}\n\n\t{service[34]}\n\n\t{service[35]} {service[36]} {service[37]} {service[38]} {service[39]} {service[40]} {service[41]} {service[42]} {service[43]} {service[44]} {service[45]} {service[46]} {service[47]} {service[48]} {service[49]}"; rtbDateTime.Text = dateTime; rtbMkoData.Text = mkoData; rtbServiceData.Text = serviceData; CreateNewFlps(channels, allChannels, channelsPanels, allChannelsPanels); AddImages(channels, allChannels, listImagesForSave, imagesLines); }
private void Form1_Load(object sender, EventArgs e) { #region INITIALISATIONS Directory.CreateDirectory("logs"); if (!File.Exists(AndroidActionsFile)) { File.Create(AndroidActionsFile); } if (!File.Exists(GenGineActionsFile)) { File.Create(GenGineActionsFile); } LogsRichTb = new DisabledRichTextBox { //Dock = DockStyle.Fill, ReadOnly = true, BackColor = Color.Black, BorderStyle = BorderStyle.None, ForeColor = Color.Orange, Parent = LogsPanel, Bounds = new Rectangle(10, 0, LogsPanel.Width - 11, LogsPanel.Height) }; UcInitialize(); Synch_Environment(homeUc); titlePanel.MouseMove += TitlePanel_MouseMove; titlePanel.MouseDown += TitlePanel_MouseDown; titlePanel.MouseUp += TitlePanel_MouseUp; //chestEspTip.SetToolTip(chestEspBtn, "Ch3sts h@ck"); //Speed_Cd_Tip.SetToolTip(Speed_Cd_btn, "Sp3ed & Cd h@cks"); //OneHitKillTip.SetToolTip(OneHitKillBtn, "One hit Kill h@ck"); //GodModTip.SetToolTip(GodModBtn, "g0d Mode h@ck"); //InfinitStaminaTip.SetToolTip(InfinitStamina, "Endless Stam!na h@ck"); GenGineTip.SetToolTip(GenGineBtn, "GenGine (mini CE)"); AndroidVersionTip.SetToolTip(AndroidVersionBtn, "Hack Android Version"); ClearLogsTip.SetToolTip(ClearLogsBtn, "Clear Logs"); SaveLogsTip.SetToolTip(SaveLogsBtn, "Save Logs"); SeekHelpTip.SetToolTip(SeekHelpBtn, "Seek for help"); stateColor.BackColor = onHoldColor; WriteLogs("[ + ] Waiting for GenshinImpact ...", onHoldColor); #endregion #region THREADS try { #if !DEBUG HttpWebRequest request = (HttpWebRequest)WebRequest.Create(news_link); request.AutomaticDecompression = DecompressionMethods.GZip; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { news = reader.ReadToEnd(); string[] _news = news.Split('\n'); if (_news.Length >= 1) { if (_news[0].Contains("-")) { if (_news[0].Split('-')[1].Trim() != version) { ProcessStartInfo pin = new ProcessStartInfo { CreateNoWindow = true, UseShellExecute = false, FileName = "cmd.exe", WindowStyle = ProcessWindowStyle.Hidden, Arguments = $"/C start {GenPact_download}" }; MessageBox.Show(NewVersionMessage); Process.Start(pin); Environment.Exit(0); } else { if (news.StartsWith(ForcedPopUpKeyword)) { MessageBox.Show(news); } else if (news.StartsWith(PopUpKeyword) && !File.Exists("GenPact.dmp")) { MessageBox.Show(news); File.Create("GenPact.dmp"); } } } else { Environment.Exit(0); } } else { Environment.Exit(0); } } new Thread(new ThreadStart(() => { while (true) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(news_link); req.AutomaticDecompression = DecompressionMethods.GZip; using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { string __ = reader.ReadToEnd(); string[] _news = __.Split('\n'); if (_news.Length >= 1) { if (_news[0].Contains("-")) { if (_news[0].Split('-')[1].Trim() != version) { ProcessStartInfo pin = new ProcessStartInfo { CreateNoWindow = true, UseShellExecute = false, FileName = "cmd.exe", WindowStyle = ProcessWindowStyle.Hidden, Arguments = $"/C start {GenPact_download}" }; BeginInvoke(new Action(() => { Hide(); })); MessageBox.Show(NewVersionMessage); Process.Start(pin); Environment.Exit(0); } else { if (__.StartsWith(ForcedPopUpKeyword)) { news = __; MessageBox.Show(news); } } } else { Environment.Exit(0); } } else { Environment.Exit(0); } } Thread.Sleep(60000); } })).Start(); #endif new Thread(new ThreadStart(() => { if (GenPactMem.jsControls == null) { GenPactMem.jsControls = GenPactMem.ReadJs(); } while (true) { for (int i = 32; i < 127; i++) { int kState = GenPactMem.GetAsyncKeyState(i); if (kState == -32768) { string ch = Convert.ToString((char)i); if (GenPactMem.jsControls.ContainsKey(ch)) { try { //MessageBox.Show($"Clicked -> {ch}"); string feature = (string)GenPactMem.jsControls[ch].ToObject(typeof(string)); if (!string.IsNullOrEmpty(feature)) { foreach (Control c in featuresUc.Controls) { if (c.Tag != null && c is PictureBox) { if (c.Tag.ToString().Contains(feature)) { featuresUc.BeginInvoke(new Action(() => { featuresUc.pictureBox8_Click(c as PictureBox, null); })); } } } } } catch (Exception) { throw; } } } } Thread.Sleep(50); } })).Start(); new Thread(new ThreadStart(() => { while (true) { if (Watcher.HasExited) { LaunchWtahcer(); WriteLogs("[ ! ] - Relaunched Watcher !", append: true); } Settings.Default.GameProcess = CheckGenShinProcess(); BeginInvoke(new Action(() => { if (genshin_was_not_running) { if (Settings.Default.GameProcess != null) { stateColor.BackColor = successColor; WriteLogs("[ + ] Found Genshin Impact .", successColor); ContentPanel.Enabled = true; MenuPanel.Enabled = true; genshin_was_not_running = false; } } else { if (Settings.Default.GameProcess == null) { stateColor.BackColor = onHoldColor; WriteLogs("[ + ] Waiting for GenshinImpact ...", onHoldColor); ContentPanel.Enabled = false; MenuPanel.Enabled = false; genshin_was_not_running = true; miliseconds2wait = 500; } } })); Thread.Sleep(miliseconds2wait); } })).Start(); } catch (ThreadAbortException) { Environment.Exit(0); } catch (Exception ex) { MessageBox.Show("\n[ ! ] " + ex.Message); Environment.Exit(0); } #endregion }