Экономим затраты на интернет от Yota

в 11:59, , рубрики: LTE, WebBrowser, wpf, Yota, лайфхак, Софт, метки: , , , , ,

Пролог

Пару месяцев назад в моем городе запустил свою LTE сеть оператор беспроводной связи Yota. Немного поколебавшись, я решил, что стоит попробовать – в надежде, что с LTE Yota дела обстоят лучше, чем с 3G от операторов большой тройки. И, должен сказать, что пока ничуть не разочаровался в своем решении.

И дело не только в том, что скорость выше, а покрытие города ничуть не хуже. Используя интернет от Yota я трачу меньше денег, чем раньше. Ведь есть в личном кабинете такой замечательный регулятор скорости, который можно поставить на минимум, и увеличивать скорость только тогда, когда это действительно необходимо.

Да, делать это через браузер не очень удобно. Таким образом мы перешли к сути поста.

Автоматизация

Итак, было принято решение написать клиент для управления скоростью модема. В качестве языка программирования использовался C#. Каюсь, пошел самой простой дорогой – использовал компонент WebBrowser. Первая версия была на Windows Forms, но недавно я переписал проект на WPF. Сама программа и проект в Visual Studio – в конце поста. А сейчас я бы хотел остановить внимание на некоторых аспектах.

Первое, с чем мне пришлось столкнуться – для отображения страниц в WebBrowser используется старая версия Internet Explorer, и для того, чтобы использовать, к примеру, 8 версию, необходимо добавить в раздел реестра HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION ключ с именем, соответствующим названию программы, содержащий значение DWORD 8000. Я выделил для этого маленький класс:

using Microsoft.Win32;
using System;

class BrowserEmulation
{
  private BrowserEmulation() { }

  /// <summary>
  /// Активация эмуляции новой версии
  /// </summary>
  /// <param name="appName">Название файла приложения</param>
  public static void Enable(string appName = null)
  {
    if (appName == null) appName = AppDomain.CurrentDomain.FriendlyName;
    RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION", true);
    if (regKey != null)
    {
      try
      {
        regKey.GetValue(appName).ToString();
      }
      catch
      {
        regKey.SetValue(appName, 8000, RegistryValueKind.DWord);
      }
    }
  }

  /// <summary>
  /// Дезактивация эмуляции новой версии
  /// </summary>
  /// <param name="appName">Название файла приложения</param>
  public static void Disable(string appName = null)
  {
    if (appName == null) appName = AppDomain.CurrentDomain.FriendlyName;
    RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION", true);
    if (regKey != null)
    {
      try
      {
        regKey.DeleteValue(appName);
      }
      catch { }
    }
  }
}

Как добавлять программу в автозагрузку написано практически на любом заборе, так что описывать это смысла не имеет.

По поводу рестарта WPF приложения, для этого у меня есть совсем крошечный класс:

using System.Windows.Forms;

class Restart
{
  private Restart() { }

  public static void Go()
  {
    Application.Restart();
    System.Windows.Application.Current.Shutdown();
  }
}

Стоит признать, что, в общем-то, ничего интересного в коде программы нет.

Результат

Окно авторизации:
Экономим затраты на интернет от Yota

Идет загрузка:
Экономим затраты на интернет от Yota

Управление скоростью:
Экономим затраты на интернет от Yota

Окно настроек:
Экономим затраты на интернет от Yota

Вы можете загрузить: Всегда последняя версия программы или Проект Visual Studio 2012

Автор: ratswolf

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js