хук
От: crazz  
Дата: 25.12.05 10:46
Оценка:
Установил хук:
HookHandle := SetWindowsHookEx(wh_Keyboard, @Key_Hook,  hInstance, 0);


При нажатии клавиш вызывается функция
function Key_Hook(Code: integer; wParam: word;
  lParam: Longint): Longint; stdcall; export;

  if (Code >= 0) then
  begin
   case wParam of
      VK_SHIFT: messageboxa(0,'VK_SHIFT','',0);
      ord('A'): messageboxa(0,'A','',0);
   end;
.........


Таким образом я могу отловить нажатие клавиш Shift или "A". А как мне отловить одновременное нажатие этих клавишь (Shift+A)?
И как тут отловить события WM_KEYDOWN, WM_KEYUP?
Re: хук
От: Аноним  
Дата: 25.12.05 15:27
Оценка:
Здравствуйте, crazz, Вы писали:

C>Таким образом я могу отловить нажатие клавиш Shift или "A". А как мне отловить одновременное нажатие этих клавишь (Shift+A)?



Вариант 1. запоминать состояние каждой интересующей клавиши и ждать нужной комбинации.
Вариант 2. использовать функцию GetAsyncKeyState

C>И как тут отловить события WM_KEYDOWN, WM_KEYUP?


смотреть на старший бит lParam. 0 — нажатие, 1 — отпускание.
Re[2]: хук
От: crazz  
Дата: 25.12.05 16:17
Оценка:
C>>И как тут отловить события WM_KEYDOWN, WM_KEYUP?

А>смотреть на старший бит lParam. 0 — нажатие, 1 — отпускание.


За GetAsyncKeyState пасиба.

А вот про старший бит чето не совсем понял
lparam: word. Т.е. старший бит в двоичном представлении 1000000000000000, что в десятичном 32768.
Вычисляю старший бит (lparam and 32768):
if (wparam =vk_f10) then
       messageboxa(0,'key f10',pchar(inttostr(((lparam and 32768)))),0);


Почемуто оба раза кажет что старший бит равен нулю.
Re[3]: хук
От: crazz  
Дата: 25.12.05 16:24
Оценка:
Тфу, лоханулся — lparam:longint,
теперь все робит, пасиба!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.