Главная страница
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.019 c
1-58196
Дмитрий Иванов
2002-07-04 20:33
2002.07.18
StringGrid


14-58320
Unown
2002-06-02 11:00
2002.07.18
Как создать?


4-58359
a_Lan
2002-05-14 13:59
2002.07.18
Как средствами WinApi создать кнопку без пунктирной каймы???


1-58226
Alex
2002-07-07 18:56
2002.07.18
DLL


1-58120
inc(665)
2002-07-08 21:37
2002.07.18
reboot&poweroff :)