Когда то очень давно мне в руки попал Хакер за
апрель 2003 года. В нем была статья про то, как через IrDA и при
помощи пульта дистанционного управления управлять Виндой. Я тогда помню накупил деталей, спаял ИК-приемник, но ничего у меня не вышло :). Недавно захотел довести начатое до конца, но уже на основе Bluetooth. Для этого нам понадобится тело с «синим зубом» и BT-адаптер для компа.

Так как самому реализовывать в дельфи работу с bluetooth было долго и муторно, я решил взять уже готовую библиотеку: Bluetooth Framework Library, которую написал наш соотечественник (правда она без исходников). С библиотекой идет несколько демок, показывающих основные возможности.
Нам же сегодня потребуется KeypadControl. Отрываем \source и устанавливаем библиотеку, потом копируем все содержимое этой папки, открываем \demo_doc\demo\KeypadControl, вставляем и запускаем KeypadControl.dpr. Перед нами открылась главная форма этой демки. Она может обрабатывать нажатия кнопок на теле и по нажатию кнопок на форме эмулировать их нажатие на теле. Я предлагаю создать для тела простой мидлет, в котором будет крутиться цикл до тех пор, пока не нажата клавиша «0». Его можно скачать тут
http://www.mobileservicesoft.narod.ru/blank.rar. Теперь необходимо придумать, за что будет отвечать каждая кнопка на теле. У меня siemens cx75 и для него я реализовал так: 

джойстик — перемещает курсор (причем перемещаем, пока кнопка нажата, в таймере) 
нажать его — левая кнопка мыши 
левая софт кнопка — двойное нажатие левой кнопки мыши 
правая софт кнопка — правая клавиша мыши 
зеленая трубка — reboot 
красная трубка — shutdown 
1 — enter 
2 — стрелка вверх 
3 — закрыть активное окно 
4 — стрелка влево 
5 — стрелка вниз 
6 — стрелка вправо 
7 — отрыть лоток CD 
8 — закрыть лоток CD 
9 — свернуть активное окно 

Для реализации задуманного нужно удалить все кнопки с форы кроме Connect и соответственно все обработчики нажатий на эти кнопки. Добавить таймер и все. ShowMessage(‘DOWN: ‘ + Key) — тоже надо везде удалить.

Давайте посмотрим, как все это работает. Запускаем
приложение, появляется окно, на нем одна кнопка Connect, после ее нажатия вылезет несколько окон — там все
просто. Теперь соединение установлено. Нажатие кнопки на теле генерирует событие BFKeypadControlClientKeyDown(Sender: TObject; Key: String), где key — это код нажатой кнопки. Теперь нужно поместить простой case и все, хотя все лучше видно на исходнике:

key1:=key[1]; //это нужно, чтобы в обработке таймера знать какая кнопка была нажата 
a1:=0; 
a2:=0; 
case key[1] of 
'<' : a1:=-10; //
курсор влево 
'>' : a1:=10; //
курсор вправо 
'^' : a2:=-10; //
курсор вверх 
'V' : a2:=10; //
курсор вниз 
'F' : begin //
нажимаем левую кнопку мыши 
GetCursorPos(p); 
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, P.x, P.y, 0, 0); 
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, P.x, P.y, 0, 0); 
end; 
'[' : begin //
нажимаем левую кнопку мыши дважды 
GetCursorPos(p); 
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, P.x, P.y, 0, 0); 
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, P.x, P.y, 0, 0); 
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, P.x, P.y, 0, 0); 
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, P.x, P.y, 0, 0); 
end; 
']' : begin //
нажимаем правую кнопку мыши 
GetCursorPos(p); 
mouse_event(MOUSEEVENTF_RIGHTDOWN, P.x, P.y, 0, 0); 
mouse_event(MOUSEEVENTF_RIGHTUP, P.x, P.y, 0, 0); 
end; 
'S' : WinExec(PChar('shutdown -t 0 -r'),SW_SHOWNORMAL); //
reboot 
'C' : WinExec(PChar('shutdown -t 0 -s'),SW_SHOWNORMAL); //
shutdown 
'1' : begin //
эмулируем нажатие кнопки enter 
keybd_event(VK_RETURN,0,0,0); 
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); 
end; 
'2' : begin //
эмулируем нажатие стрелки вверх 
keybd_event(vk_up,0,0,0); 
keybd_event(vk_up,0,KEYEVENTF_KEYUP,0); 
end; 
'3' : SendMessage(GetForegroundWindow, WM_CLOSE,0,0); //
закрываем активное окно 
'4' : begin //
эмулируем нажатие стрелки влево 
keybd_event(VK_LEFT,0,0,0); 
keybd_event(VK_LEFT,0,KEYEVENTF_KEYUP,0); 
end; 
'5' : begin //
эмулируем нажатие стрелки вниз 
keybd_event(VK_DOWN,0,0,0); 
keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0); 
end; 
'6' : begin //
эмулируем нажатие стрелки вправо 
keybd_event(VK_RIGHT,0,0,0); 
keybd_event(VK_RIGHT,0,KEYEVENTF_KEYUP,0); 
end; 
'7' : mciSendString('Set cdaudio door open wait', 0, 0, 0); //
отрываем лоток CD 
'8' : mciSendString('Set cdaudio door closed wait', 0, 0, 0);//
закрываем лоток CD 
'9' : ShowWindow(GetWindowLong(GetForegroundWindow,GWL_HWNDPARENT),SW_MINIMIZE); 
//
сворачиваем активное окно 
end; 
if (GetCursorPos(p)=true)and 
((key1='<')or(key1='>')or(key1='^')or(key1='V')) then 
begin 
Timer1.Enabled:=true; //
запускаем таймер 
SetCursorPos(p.X+a1,p.Y+a2); //
перемещаем курсор 
end; 

В обработке таймера прописываем перемещение курсора. Как только кнопку джойстика отпустили происходит BFKeypadControlClientKeyUp, где и нужно
прописать Timer1.Enabled:=false. 

Прога может работать при соединении тела с ПК через IrDA, Bluetooth и COM порт. Скачать исходник проги можно тут
http://mobileservicesoft.narod.ru/rem.rar, а саму библиотеку на
www.btframefork.com.

Оставить мнение

Check Also

Безопасность превыше всего. 9 простых трюков, которые сделают жизнь линуксоида секьюрнее

Жизнь обычных людей складывается из мелочей. Жизнь линуксоида складывается из множества ма…