Pull to refresh

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

Reading time 2 min
Views 45K

Пролог


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

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

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

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


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

Первое, с чем мне пришлось столкнуться – для отображения страниц в WebBrowser используется старая версия Internet Explorer, и для того, чтобы использовать, к примеру, 8 версию, необходимо добавить в раздел реестра HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_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(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_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(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_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();
  }
}

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

Результат


Окно авторизации:


Идет загрузка:


Управление скоростью:


Окно настроек:


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

Articles