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