Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.18;
Скачать: CL | DM;

Вниз

Снова про hook   Найти похожие ветки 

 
Doctor Deejay ©   (2002-05-18 12:58) [0]

Все-таки я так и не разобрался как сделать, чтобы отлавливалось
только нажатие клавиши, а kf_up игнорировалось.
В новом примере, который мне посоветовали скачать,
ловушка вызывается методом:

Function KeyboardHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT;stdcall;
Begin
If Code IN [HC_ACTION, HC_NOREMOVE] Then
Begin
SendMessage(ShareInf^.AppWndHandle, WM_USER, ParamW, Code);
End;
Result := CallNextHookEx(ShareInf^.OldHookHandle, Code, ParamW, ParamL)
End;


В приложении вызывается:

Procedure TMainForm.WMUser(var Message: TMessage);
Begin
Memo1.Lines.Add("Code: "+IntToStr(Message.WParam)+"; Char: "+Chr(Message.wParam));
End;


В результате всего этого в мемо появляется сообщение как при нажатии на клавишу
та и при ее отпускании. Так же отлавливается удержание на клавиши с повторение
символа несколько раз.

ЧТО СДЕЛАТЬ, ЧТОБЫ ФИКСИРОВАЛО ТОЛЬКО ОДИН РАЗ??????
Признаю, что ламер, но с ловушками никогда не работал.


 
gate A20   (2002-05-18 13:43) [1]

попробуй такую функцию KeyboardHook:
Function KeyboardHook(Code: Integer; ParamW: WPARAM; ParamL: LPARAM): LRESULT;stdcall;
Begin
If (Code IN [HC_ACTION, HC_NOREMOVE])and((ParamL and $80000000)=$80000000) Then
Begin
SendMessage(ShareInf^.AppWndHandle, WM_USER, ParamW, Code);
End;
Result := CallNextHookEx(ShareInf^.OldHookHandle, Code, ParamW, ParamL)
End;

Ддело в том, что (см. МСДН) при постановке хука типа WH_KEYBOARD ты перехватываешь не только сообщение WM_KEY_DOWN, но и WM_KEY_UP. Я как-то тоже попал в такую ситуацию, и долго дкмал - что считать нажатием кнопки - её нажатие или её отпускание? А если на кнопку положен кирпич, то всё ещё сложнее - фактически, нажатий-то много! (Пардон, не нажатий, а действий, которые этим кирпичом обусловлены - там много буковок напечаталось или ещё чего).



Страницы: 1 вся ветка

Текущий архив: 2002.07.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
1-58078
Dinara
2002-07-08 11:54
2002.07.18
Как увно указать платформу под приложение?


14-58285
DeMoN-777
2002-06-21 16:54
2002.07.18
Как проще ?


6-58249
Hub
2002-05-06 01:06
2002.07.18
Как узнать адрес broadcast?


1-58203
546634
2002-07-06 15:25
2002.07.18
Помогите записать данные в реестр!


7-58336
Ильясов Вадим
2002-04-27 17:11
2002.07.18
Температура процессора, системы.