Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.008 c
14-58326
любитель
2002-06-18 16:38
2002.07.18
Предлагаю на этих выходных Питерцам собраться 21-23 июня.


3-57963
Oleon
2002-06-24 11:39
2002.07.18
Помогите, пожалуйста, укорить работу.


3-57992
koty
2002-06-27 01:51
2002.07.18
OLAP-Данные.


1-58115
Gonza
2002-07-07 21:49
2002.07.18
Запуск проги???


3-58005
Tutov Roman
2002-06-26 14:49
2002.07.18
При ччитывания поля таблицы возникает ошибка . Почему ?




   Наверх