Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Глобальный хук и WM_KEYUP


Автор: Centurion 11.2.2013, 07:36
Здравствуйте! Пожалуйста помогите разобраться в коде данной функции, не могу его переделать чтоб хук реагировал только при отпускании (KeyUP) клавиши:

Код

function KeyHookFunc(Code, VirtualKey, KeyStroke: integer): LRESULT; stdcall;
var
  msgl: PEVENTMSG;
begin
  Result:=0;
  if Code=HC_NOREMOVE then Exit;
  Result:=CallNextHookEx(hK,Code,VirtualKey,KeyStroke);
  if Code<0 then Exit;
  if (Code=HC_ACTION) then
  begin
    msgl := Pointer(KeyStroke);     // Без этих двух строчек функция работает
    if msgl.message = WM_KEYUP then // идеальною, но надо чтоб хук реагировал только
    begin                           // на отпускание клавиш. П О М О Г И Т Е !
      if((KeyStroke and (1 shl 30))<>0) then
      if not IsWindow(hA) then
      begin
        hM:=OpenFileMapping(FILE_MAP_WRITE,False,'MyHookMap');
        Hr:=MapViewOfFile(hM,FILE_MAP_WRITE,0,0,0);
        if Hr<>nil then
          hA:=Hr.AppHnd;
      end;
      if ((KeyStroke and (1 shl 30))<>0) then
      begin
        SendMessage(hA, WM_USER+2008, VirtualKey ,  KeyStroke {GetFocus});
      end;
    end;
  end;
end;

Автор: Centurion 11.2.2013, 09:38
Всем спасибо! Разобрался! условие 
Код

    if (KeyStroke and $80000000 <> 0) then

было разгадкой!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)