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

от автора

Пролог

Пару месяцев назад в моем городе запустил свою 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

ссылка на оригинал статьи http://habrahabr.ru/post/166285/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *