Welcome to MSDN Blogs Sign in | Join | Help
Выключение ПК и перезагрузка системы с помощью TweetMyPC

В этой статье я опишу, как можно дистанционно выключать ПК, а также перезагружать систему или завершать сеанс работы с ней, используя Twitter API в программе на VB.net.

Введение

У меня дома очень медленное подключение к Интернету. Я решил написать приложение, позволяющее выключать мой домашний ПК дистанционно, находясь вне дома. Я оставлял компьютер включенным для загрузки нужных мне файлов и хотел иметь возможность выключать его удаленно. Я решил применить не клиент-серверную архитектуру, а Twitter API и передавать команды с помощью «My Timeline». Один из аргументов в пользу Twitter — возможность работы с мобильным телефоном. Искать подключенный к Интернету компьютер в этом случае нет необходимости.

Инфраструктура Yedda Twitter

Методы Twitter REST API (EN) предоставляют разработчикам базовые возможности работы с данными Twitter: обновление расписаний, обработка данных состояния и пользователя. Подключиться к Twitter и получить пользовательское расписание, используя .NET, очень просто. Однако я решил не изобретать колесо и использовать существующую библиотеку Twitter. Лучшая библиотека Twitter с открытым исходным текстом — это Yedda. Вы можете познакомиться с ней ближе и загрузить ее c домашней страницы (EN).

Конструирование интерфейса

Мне хотелось сделать интерфейс как можно более простым. Ниже показан снимок экрана интерфейса TweetMyPC, включающего лишь два текстовых поля, один флажок, метку и кнопку.

clip_image002

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

  • форма: frmTweetMyPc;
  • текстовые поля: txtUserName, txtPassword;
  • кнопка: btnSave;
  • флажок: chkStartAutomatic;
  • таймер: tmrTweet (интервал 10000);
  • метка: lblSatus.

Для хранения информации пользователя применяются несколько свойств My.settings (EN). Эти свойства показаны ниже.

clip_image004

Программа

Следующий код сворачивает форму при загрузке программы и запускает таймер с тем, чтобы каждую минуту проверять сообщения 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 (выход).

clip_image002[4]
Следующий код содержится в обработчике события 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 в http://www.dotnetcurry.com/ (EN), участвует в работе stackoverflow (EN), а также выступает на собраниях групп пользователей Microsoft (EN). Вы можете следить за ним в Twitter (EN).

Posted: Sunday, June 28, 2009 5:57 PM by Ujane

Comments

No Comments

Anonymous comments are disabled
Page view tracker