/// <summary> /// Метод получения ссылки из HTML-кода страницы /// </summary> /// <returns></returns> public static void GetUrlAndName() { /// Временная переменная для выделения ссылки int point; /// Временная переменная для записи ссылки //null;// = 0ew StringBuilder(); try { char[] temp = new char[256]; // выделяем ссылку из текста через поиск точек point = Vars.HTMLCode.IndexOf("link rel=\"preload\" href=\""); // ищем точку начала ссылки Vars.HTMLCode = Vars.HTMLCode.Remove(0, point + 25); //удаляем лишний код с учетом точки для поиска point = Vars.HTMLCode.IndexOf("\" as=\"image\""); // ищем точку конца ссылки Vars.HTMLCode.CopyTo(0, temp, 0, point); //for (int i = 0; i < point; i++) //выделяем ссылку из текста // temp.Append(Vars.HTMLCode[i]); Vars.Url = new string(temp); } catch (Exception e) { Vars.Debug($"Ошибка выделения ссылки: {e.Message}"); } // подгоняем ссылку на файл с нужным разрешением: //640 х 480 //800 х 600 //1024 х 768 //1920 х 1080 //1920 х 1200 Vars.Url = Vars.ReverseString(Vars.Url); // 1. переворачиваем строку point = Vars.Url.IndexOf("_"); // 2. ищем место, где пишется разрешение картинки в имени файла Vars.Url = Vars.Url.Remove(0, point); // 3. удаляем лишний код с учетом точки для поиска Vars.Url = Vars.ReverseString(Vars.Url); // 4. переворачиваем строку // 5. теперь добавляем к имени файла нужный вариант разрешения float scale = (float)Screen.PrimaryScreen.Bounds.Size.Width / Screen.PrimaryScreen.Bounds.Size.Height; scale = (float)((int)(scale * 10)) / 10; if (scale == 1.6f) // 16 : 10 { Vars.Url += "1920x1200.jpg"; } else // 16 : 9 (scale = 1.77) и остальные { Vars.Url += "1920x1080.jpg"; } // выделяем настоящее имя файла из ссылки Vars.OriginalName = Vars.Url; //MessageBox.Show(Vars.OriginalName); // чистим имя с начала строки Vars.OriginalName = Vars.OriginalName.Remove(0, 11); // и с конца Vars.OriginalName = Vars.OriginalName.Remove(Vars.OriginalName.IndexOf(".jpg") + 4, Vars.OriginalName.Length - (Vars.OriginalName.IndexOf(".jpg") + 4)); //MessageBox.Show(Vars.OriginalName); }
/// <summary> /// Устанавливает обои /// </summary> public static void Set() { // для конвертации обоев Image img = null; // конвертируем обои try { img = Image.FromFile(Vars.FullExePath + "\\images\\" + Vars.OriginalName); // добавляем полный путь к программе, иначе в Win 10 не находит файл } catch { // ставим новые обои if (Properties.Settings.Default.Debug == true) { Vars.Debug("Нужных обоев не оказалось. Возможно, файл был удален."); } Start.tray.BalloonTipText = "Нужный файл не был найден. Возможно, он был удален.\nЗавершение работы..."; Start.tray.ShowBalloonTip(3000); Thread.Sleep(3000); Application.Exit(); } // обрезаем ".jpg", добавляем ".bmp" и сохраняем в новом формате Vars.OriginalName = Vars.OriginalName.Remove(Vars.OriginalName.Length - 4) + ".bmp"; img.Save(Vars.FullExePath + "\\images\\" + Vars.OriginalName, ImageFormat.Bmp); // пишем в дебаг полный путь к программе if (Properties.Settings.Default.Debug == true) { Vars.Debug("Полный путь к exe'шнику: \n" + Vars.FullExePath + "\nРазрешение экрана: " + Screen.PrimaryScreen.Bounds.Width + " x " + Screen.PrimaryScreen.Bounds.Height); } // ставим новые обои if (Properties.Settings.Default.Debug == true) { Vars.Debug("Устанавливаю обои..."); } SystemParametersInfo(SPI_SETDESKWALLPAPER, 1, Vars.FullExePath + "\\images\\" + Vars.OriginalName, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE); // пишем имя последнего файла Properties.Settings.Default.Name = Vars.OriginalName.Remove(Vars.OriginalName.Length - 4) + ".jpg"; // удаляем .bmp-копии string[] bmp = Directory.GetFiles(Vars.FullExePath + "\\images\\", "*.bmp"); foreach (string f in bmp) { try { File.Delete(f); } catch (Exception e) { Vars.Debug($"Не удалось удалить bmp-файл: {e.Message}"); } } }
/// <summary> /// Получает код страницы /// </summary> /// <returns></returns> public static void GetHTML() { // получаем код страницы try { StringBuilder sb = new StringBuilder(); byte[] buf = new byte[8192]; HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.bing.com"); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream resStream = response.GetResponseStream(); int count = 0; do { count = resStream.Read(buf, 0, buf.Length); if (count != 0) { sb.Append(Encoding.Default.GetString(buf, 0, count)); } }while (count > 0); Vars.HTMLCode = sb.ToString(); } catch (Exception e) { Vars.Debug("Ошибка:\n" + e.Message); } }
/// <summary> /// Метод установки обоев /// </summary> public static void Work() { // проверяем разрешение экрана var size = Screen.PrimaryScreen.Bounds.Size; // исключаем старые маленькие разрешения и неподдерживаемое 5 : 4 if ((size.Width < 1366 && size.Height < 768) || (size.Width == 1280 && size.Height == 1024)) { MessageBox.Show("К сожалению, Ваше разрешение экрана не поддерживается!", "Wallpapers Everyday", MessageBoxButtons.OK, MessageBoxIcon.Stop); Application.Exit(); } // получаем полный путь к файлу Vars.FullExePath = Application.StartupPath.ToString(); // готовимся к записи логов if (Properties.Settings.Default.Debug == true) { Vars.DebugInit(); } // подсчитываем размер папки с обоями Vars.FolderSize = Vars.GetDirectorySize(Vars.FullExePath + "\\images"); // если инета нет if (CheckConnection() == false) { // но стоит галка на постоянном обновлении и нет "только загрузка" if ((Properties.Settings.Default.AlwaysRun) && (!Properties.Settings.Default.OnlyDown)) { // то проверяем, первый ли запуск. и если не первый (т.е. уже есть какой-то скачанный файл) if (Properties.Settings.Default.Name != "no") { if (Properties.Settings.Default.Debug == true) { Vars.Debug("Доступа к Интернету нет. Ставлю последние обои..."); } // то ставим последнюю обоину Vars.OriginalName = Properties.Settings.Default.Name; tray.BalloonTipText = "Отсутствует соединение с интернетом.\nСтавлю последние обои..."; tray.ShowBalloonTip(3000); Thread.Sleep(3000); WallSetter.Set(); tray.BalloonTipText = "Готово."; if (Vars.FolderSize > Properties.Settings.Default.MaxMB) { tray.BalloonTipText += " Размер папки с обоями превышает рекомендуемый!"; } tray.BalloonTipText += "\nЗавершение работы..."; // сохраняем настройки Properties.Settings.Default.Save(); if (!Properties.Settings.Default.NoNotify) { tray.ShowBalloonTip(3000); Thread.Sleep(3000); } tray.Visible = false; return; } else { // если запуск проги не первый tray.BalloonTipText = "Отсутствует соединение с интернетом и нет ни одного файла обоев!\nЗавершение работы..."; tray.ShowBalloonTip(3000); Thread.Sleep(3000); tray.Visible = false; return; } } else { tray.BalloonTipText = "Ошибка! Отсутствует соединение с интернетом!\nЗавершение работы..."; tray.ShowBalloonTip(3000); Thread.Sleep(3000); tray.Visible = false; return; } } // если папки для заставок нет, создаем ее if (!Directory.Exists(Vars.FullExePath + "\\images\\")) { Directory.CreateDirectory(Vars.FullExePath + "\\images"); } // если "только загрузка" - только загружаем tray.BalloonTipText = "Получение кода..."; if (!Properties.Settings.Default.NoNotify) { tray.ShowBalloonTip(3000); } if (Properties.Settings.Default.Debug == true) { Vars.Debug("Получение кода..."); } WallSetter.GetHTML(); if (Properties.Settings.Default.Debug == true) { Vars.Debug("Код получен:"); Vars.Debug(Vars.HTMLCode); } tray.BalloonTipText = "Выделение ссылки..."; if (!Properties.Settings.Default.NoNotify) { tray.ShowBalloonTip(3000); } if (Properties.Settings.Default.Debug == true) { Vars.Debug("Выделяю ссылку..."); } WallSetter.GetUrlAndName(); if (Properties.Settings.Default.Debug == true) { Vars.Debug("Ссылка выделена:"); Vars.Debug(Vars.Url); } tray.BalloonTipText = "Загрузка обоев..."; if (!Properties.Settings.Default.NoNotify) { tray.ShowBalloonTip(3000); } if (Properties.Settings.Default.Debug == true) { Vars.Debug("Скачиваю файл..."); } WallSetter.Download(); // если нет - еще и обои ставим tray.BalloonTipText = "Последний этап..."; if (!Properties.Settings.Default.NoNotify) { tray.ShowBalloonTip(3000); } if (Properties.Settings.Default.OnlyDown == false) { WallSetter.Set(); } if (Properties.Settings.Default.Debug == true) { Vars.Debug("Вес папки с обоями: " + Vars.FolderSize + " Mb\n"); } // сохраняем настройки, т.к. имя последней обоины было изменено Properties.Settings.Default.Save(); if (!Properties.Settings.Default.NoNotify) { tray.BalloonTipText = "Сохранение фонов экрана блокировки..."; tray.ShowBalloonTip(3000); Thread.Sleep(3000); } WallSetter.SaveWin10Interesting(Properties.Settings.Default.Win10IntrestingPath); if (!Properties.Settings.Default.NoNotify) { tray.BalloonTipText = "Готово."; if (Vars.FolderSize >= Properties.Settings.Default.MaxMB) { tray.BalloonTipText += " Размер папки с обоями превышает рекомендуемый!"; } tray.BalloonTipText += "\nЗавершение работы..."; tray.ShowBalloonTip(3000); Thread.Sleep(3000); } }
public static void Download() { // если такая обоина уже есть if (File.Exists(Vars.FullExePath + "\\images\\" + Vars.OriginalName)) { if (Properties.Settings.Default.Debug == true) { Vars.Debug("Новые обои отсутствуют."); } // то уведомляем Start.tray.BalloonTipText = "Новых обоев пока нет. Попробуйте позже."; if (Properties.Settings.Default.AlwaysRun == false) { Start.tray.BalloonTipText += "\nЗавершение работы..."; } Start.tray.ShowBalloonTip(3000); Thread.Sleep(3000); if (Properties.Settings.Default.Debug == true) { Vars.Debug("Новых обоев нет."); } if (Properties.Settings.Default.AlwaysRun == false) { Start.tray.Visible = false; Application.Exit(); } } else // если же нет { // качаем новую обоину try { HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("https://www.bing.com/" + Vars.Url); HttpWebResponse ws = (HttpWebResponse)wr.GetResponse(); Stream str = ws.GetResponseStream(); byte[] inBuf = new byte[102400]; int bytesReadTotal = 0; FileStream fstr = new FileStream(Vars.FullExePath + "\\images\\" + Vars.OriginalName, FileMode.Create, FileAccess.Write); while (true) { int n = str.Read(inBuf, 0, 102400); if ((n == 0) || (n == -1)) { break; } fstr.Write(inBuf, 0, n); bytesReadTotal += n; } str.Close(); fstr.Close(); if (Properties.Settings.Default.Debug == true) { Vars.Debug("Файл загружен: " + Vars.OriginalName); } } catch (Exception e) { // то уведомляем Start.tray.BalloonTipText = "Ошибка загрузки обоев! Попробуйте позже.\nЗавершение работы..."; Start.tray.ShowBalloonTip(3000); if (Properties.Settings.Default.Debug == true) { Vars.Debug($"Ошибка загрузки файла:\n{e.Message}\n"); } Thread.Sleep(3000); Start.tray.Visible = false; // и закрываем прогу Application.Exit(); } } }