Выключение ПК и перезагрузка системы с помощью TweetMyPC
В этой статье я опишу, как можно дистанционно выключать ПК, а также перезагружать систему или завершать сеанс работы с ней, используя Twitter API в программе на VB.net.
- Готовая программа : CodePlex.com
- Исходный текст : CodePlex.com
- Сложность : для начинающих
- Необходимое время : 2 часа
- Цена: бесплатно
- Необходимое ПО : Visual Basic или Visual C# Express Editions
- Библиотеки : Yedda Twitter Library
Введение
У меня дома очень медленное подключение к Интернету. Я решил написать приложение, позволяющее выключать мой домашний ПК дистанционно, находясь вне дома. Я оставлял компьютер включенным для загрузки нужных мне файлов и хотел иметь возможность выключать его удаленно. Я решил применить не клиент-серверную архитектуру, а Twitter API и передавать команды с помощью «My Timeline». Один из аргументов в пользу Twitter — возможность работы с мобильным телефоном. Искать подключенный к Интернету компьютер в этом случае нет необходимости.
Инфраструктура Yedda Twitter
Методы Twitter REST API (EN) предоставляют разработчикам базовые возможности работы с данными Twitter: обновление расписаний, обработка данных состояния и пользователя. Подключиться к Twitter и получить пользовательское расписание, используя .NET, очень просто. Однако я решил не изобретать колесо и использовать существующую библиотеку Twitter. Лучшая библиотека Twitter с открытым исходным текстом — это Yedda. Вы можете познакомиться с ней ближе и загрузить ее c домашней страницы (EN).
Конструирование интерфейса
Мне хотелось сделать интерфейс как можно более простым. Ниже показан снимок экрана интерфейса TweetMyPC, включающего лишь два текстовых поля, один флажок, метку и кнопку.
На форме также есть такие элементы управления, как значок области уведомлений, полоса контекстного меню и таймер. Вот имена всех элементов управления:
- форма: frmTweetMyPc;
- текстовые поля: txtUserName, txtPassword;
- кнопка: btnSave;
- флажок: chkStartAutomatic;
- таймер: tmrTweet (интервал 10000);
- метка: lblSatus.
Для хранения информации пользователя применяются несколько свойств My.settings (EN). Эти свойства показаны ниже.
Программа
Следующий код сворачивает форму при загрузке программы и запускает таймер с тем, чтобы каждую минуту проверять сообщения Twitter.
1: Me.WindowState = FormWindowState.Minimized
2: Me.ShowInTaskbar = False
3: tmrTweet.Enabled = True
Следующий код, содержащийся в обработчике события Click кнопки, проверяет реквизиты Twitter (имя пользователя и пароль) и сохраняет их в My.Settings.
1: If txtUserName.Text.Trim = "" Then
2: lblSatus.Text = "Please enter Twitter Username"
3: txtUserName.Focus()
4: Exit Sub
5: End If
6: If txtPassword.Text.Trim = "" Then
7: lblSatus.Text = "Please enter Twitter Password"
8: txtPassword.Focus()
9: Exit Sub
10: End If
11:
12: lblSatus.Text = ""
13:
14:
15: 'Проверка допустимого имени пользователя и пароля и их сохранение
16: Dim objTwitter As New Yedda.Twitter
17: Dim Updates As XmlDocument
18:
19: Try 'Пытаемся зарегистрироваться
20: Updates = objTwitter.GetUserTimelineAsXML(txtUserName.Text.Trim, txtPassword.Text.Trim)
21: My.Settings.UserName = txtUserName.Text.Trim
22: My.Settings.Password = txtPassword.Text.Trim
23: Me.WindowState = FormWindowState.Minimized
24: Me.ShowInTaskbar = False
25: tmrTweet.Enabled = True
26: Catch ex As Exception
27: MsgBox("Failed to Login to Twitter with the values supplied. Please check your login details.")
28: txtUserName.Focus()
29: Exit Sub
30: End Try
Для проверки имени пользователя и пароля при регистрации в Twitter используется библиотека Yedda. Надпись lblSatus применяется для отображения сообщений об ошибках.
Чтобы данное приложение начинало работу при запуске Windows, обработчик события CheckChanged флажка содержит следующий код, добавляющий необходимые разделы реестра.
1: If chkStartAutomatic.Checked = True Then My.Settings.AutomaticStart = True
2: Dim regKey As RegistryKey
3: regKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
4: regKey.SetValue(Application.ProductName, Application.ExecutablePath)
5: regKey.Close()
6: Else
7: My.Settings.AutomaticStart = False
8: Dim regKey As RegistryKey
9: regKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
10: regKey.DeleteValue(Application.ProductName)
11: regKey.Close()
12: End If
Следующий код, содержащийся в обработчике таймера, каждую минуту проверяет расписание Twitter и в зависимости от текста твита выключает ПК, перезагружает его или завершает сеанс текущего пользователя.
1: If My.Settings.UserName.Trim = "" Then
2: Exit Sub
3: Else
4: 'Проверяем наличие нового твита
5: Dim objTwitter As New Yedda.Twitter
6: Dim Updates As XmlDocument
7: Dim node As XmlNode
8: Try 'пытаемся зарегистрироваться
9: Updates = objTwitter.GetUserTimelineAsXML(My.Settings.UserName.Trim, My.Settings.Password.Trim)
10: Catch ex As Exception
11: MsgBox("Error : Failed to Login to Twitter with the values supplied. Please check your login details.")
12: Exit Sub
13: End Try
14: Try
15: node = Updates.SelectSingleNode("/statuses/status/id")
16: If node.InnerText.Trim <> My.Settings.LastID.Trim Then
17: ' Сравниваем Tweet ID для обнаружения новых твитов
18: My.Settings.LastID = node.InnerText.Trim
19: node = Updates.SelectSingleNode("/statuses/status/text")
20: ProcessTweet(node.InnerText.Trim)
21: End If
22: Catch ex As Exception
23: Exit Sub
24: End Try
25: End If
Если есть новый твит, обрабатываем его.
1: Private Sub ProcessTweet(ByVal Tweet As String)
2: If Tweet = "Shutdown" Then
3: System.Diagnostics.Process.Start("shutdown", "-s -f -t 100") 'Выключение
4: ElseIf Tweet = "Logoff" Then
5: System.Diagnostics.Process.Start("shutdown", "-l -f -t 100") 'Завершение сеанса пользователя
6: ElseIf Tweet = "Restart" Then
7: System.Diagnostics.Process.Start("shutdown", "-r -f -t 100") ' Перезагрузка
8: End If
9: End Sub
В полосе контекстного меню есть два элемента: Edit Setting (изменение параметров) и Exit (выход).
Следующий код содержится в обработчике события Client элемента Edit Settings и в обработчике события двойного щелчка мыши для значка области уведомлений.
1: tmrTweet.Enabled = False
2: txtUserName.Text = My.Settings.UserName.Trim
3: txtPassword.Text = My.Settings.Password.Trim
4: If My.Settings.AutomaticStart = True Then chkStartAutomatic.Checked = True
5: Me.WindowState = FormWindowState.Normal
6: Me.ShowInTaskbar = True
TweetMyPC запускается при загрузке системы. Для изменения параметров щелкните дважды или правой кнопкой значок в области уведомлений.
Программа в действии
Завершение
Несмотря на свою простоту, TweetMyPC имеет большой потенциал. Подумайте о выключении телевизора или стиральной машины через Twitter. Это можно сделать с помощью немногочисленных аппаратных средств и простой .NET-программы. TweetMyPC — бесплатная программа с открытым исходным текстом. Вы можете загрузить ее исходный код и добавить к ней новые функции.
Об авторе
Шобан Кумар (Shoban Kumar) — ведущий программист в Allianz Cornhill India. Программирование — его страсть. Он пишет статьи по .NET в https://www.dotnetcurry.com/ (EN), участвует в работе stackoverflow (EN), а также выступает на собраниях групп пользователей Microsoft (EN). Вы можете следить за ним в Twitter (EN).