Дистанционное управление компьютером с КПК

12 сентября 2011 г.

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

Задача: управлять компьютером на расстоянии.

Что имеем: компьютер (объект управления), Wi-Fi роутер (обеспечивает работу с дистанционными устройствами) и телефон с возможностью подключения по Wi-Fi (всегда под рукой, как пульт).
Идея вырисовывается лучше:
Схема дистанционного управления компьютером с КПК
Телефон подключается по локальной сети (Wi-Fi) к компьютеру и управляет им. Таким образом, на компьютер нужно приложение, которое будет держать соединение и выполнять команды, а на телефон приложение, отправляющее команды.

Разобравшись с задачей, перейдем к проектированию. На РС будет висеть небольшое приложение в трее
Приложение в трее
А на телефоне некое подобие мыши
Скриншот на КПК
Т.к. на телефоне стоит Windows Mobile 6.5 и на компьютере Windows, было решено писать все на ЯП C# в Visual Studio 2008. Для реализации поставленной задачи будем использовать сокеты для поддержания соединения компьютер-телефон, библиотеку AutoItX3.dll для выполнения управления мышью. Из библиотеки нам понадобятся следующие методы:

[DllImport("AutoItX3.dll", EntryPoint = "AU3_MouseClick")]
public static extern int MouseClick(string button, int positionX, int positionY, int NumOfClics, int nSpeed);

[DllImport("AutoItX3.dll", EntryPoint = "AU3_MouseMove")]
public static extern int MouseMove(int positionX, int positionY, int NumOfClics, int nSpeed);

[DllImport("AutoItX3.dll", EntryPoint = "AU3_MouseWheel")]
public static extern int MouseWheel(string direction, int nSpeed);

[DllImport("AutoItX3.dll", EntryPoint = "AU3_MouseGetPosX")]
public static extern int MouseGetPosX();

[DllImport("AutoItX3.dll", EntryPoint = "AU3_MouseGetPosY")]
public static extern int MouseGetPosY();

В создание клиент-серверного приложения на сокетах, думаю, не стоит углубляться, т.к. ничего необычного использовано не было. Можно отметить, что подключение происходит по IP(вы уже могли это увидеть на картинках выше), а телефонное приложение отправляет также следующие команды: lmouse, 2lmouse, rmouse, smouse, upmouse, downmouse, leftmouse, rightmouse, upscrollmouse, downscrollmouse, которые принимает приложение на РС.

В итоге имеем реализацию поставленной задачи по дистанционному управлению компьютером. Клиент-серверная часть кода не запрещает подключение нескольких клиентов, поэтому есть возможность управлять сразу с нескольких телефонов. Для запуска необходим .NET Framework 3.5.

Исходники
Теги:
рубрика C#