Delphi-познавательное: Перехват нажатий клавиш юзверем.

Модератор: Злобный

Ответить
Аватара пользователя
Atyla
Отец
Сообщения: 4194
Зарегистрирован: Вс сен 01, 2002 18:35
Откуда: С вытрезвителя.
Контактная информация:

Delphi-познавательное: Перехват нажатий клавиш юзверем.

Сообщение Atyla »

Я заметил, шо все юзверя покинули этот тему и мне как ответственном мордератору обидно. :cry:
Жаль, шо усе программеры разбежались. 8-(
И типа может, хоть кто-то появится, начинаю делиться своими сарсами, над которыми трудился.
Буду пытаться, каждый день че-нить запостить... 8-)))
Типа щас первый топик перехвата юзверем нажатий клавиш в пользовательском окне. На основе ентих сарсов в принципе, мона сделать милый троянчик, который глобально отлавливает шо юзер пресует на клаве... 8-)))
Шобы получить столь маленький код я промучался 2 дня, тупо вводя в всяких поисковиках: "+Keyboard +Hook +Delphi"... %)))
И в конце концов наткнулся на сарсы трояна перехвата клавиш и высылки их на е-мыло... ;-)
У меня было устройство, которое соединясь с клавой и работало через порт клавы, проще говоря устройство считывания кредитных карточек.
Итак сарсы:

Код: Выделить всё

 //Объявление констант и переменных
 Const WM_Received=WM_User+1; //Событие при котором нуна останавливать хук

 Var CountChars:Integer; //Количество выловленных символов
       Str:String; //Накопитель выловленых символов
       HookHandle: hHook; //Хранит значение предыдущего обработчика клавы, который был по  
                                      умолчанию

Код: Выделить всё

 //Объявление функции обработки нажатии юзверем клавы
 Function KeyboardProc(Code: integer; WParam: WParam; LParam: LParam): LResult; stdcall; //Обработчик событий от клавиатуры
  Type TWParamTranslation=Record
                           Byte12:Word;
                           Byte3:Byte;
                           Byte4:Byte;
                          End;

 Begin
  If TWParamTranslation(LParam).Byte4 and 128<>0 Then //Отлавливается сообщение, в котором 
                                                                                  //содержится символ
  Begin
   Inc(CountChars);
   Str:=Str+Chr(WParam);
  End;
  If Length(Str)>20 Then SendMessage(fMain.Handle,WM_Received,0,0); //Останавливаем перехват
                                      //клав в случае, када выловлено необходимое количество символов
 End;

Код: Выделить всё

 Procedure StartHook; //Начинает перехват событий от клавиатуры
 Begin
   CountChars:=0;
   Str:='';
   HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, Hinstance, 0);
 End;

Код: Выделить всё

Procedure StopHook; //Прекращает перехват событий от клавиатуры
 Begin
  UnhookWindowsHookEx(HookHandle);
 End;

Код: Выделить всё

 //Фрагмент метода WNDProc
Procedure tfMain.WNDProc;
Begin
 Inherited WNDProc;
  If Message.Msg=WM_InfoReceived Then StopHook; //Останавливает обработку....
End;
Типа усе, кому понадобится юзайте.... 8-)))
Ответить

Вернуться в «Программирование»