Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. unit Hook;
  2.  
  3. interface
  4.  
  5. uses
  6. System.SysUtils,
  7. System.Classes,
  8. Windows,
  9. Messages;
  10. type
  11. tagKBDLLHOOKSTRUCT = packed record
  12. vkCode: DWORD;
  13. scanCode: DWORD;
  14. flags: DWORD;
  15. time: DWORD;
  16. dwExtraInfo: Integer;
  17. end;
  18. KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
  19. PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
  20.  
  21. const
  22. LLKHF_UP = $0080;
  23. var
  24. CurrentHook: HHook;
  25. DestHandle: THandle;
  26. Msg: cardinal;
  27.  
  28. function KeyboardProc(Code, wParam, lParam: Integer): Integer; stdcall;
  29. procedure SetHook(aDestHandle: THandle; aMsg: cardinal); stdcall;
  30. procedure UnHook; stdcall;
  31.  
  32. implementation
  33.  
  34. function KeyboardProc(Code, wParam, lParam: Integer): Integer; stdcall;
  35. var
  36. zKeyState: TKeyBoardState;
  37. zChr: Char;
  38. zCount: Integer;
  39. zHookInfo : PKBDLLHOOKSTRUCT;
  40. begin
  41. Result := CallNextHookEx(CurrentHook, Code, wParam, lParam);
  42. if Code <> HC_ACTION then Exit;
  43. zHookInfo := Pointer(lParam);
  44. if (zHookInfo^.flags And LLKHF_UP) <> 0 then
  45. begin
  46. GetKeyboardState(zKeyState);
  47. zCount := ToAscii(zHookInfo.vkCode, zHookInfo.scanCode, zKeyState, @zChr, 0);
  48. if zCount = 1 then
  49. if DestHandle <> 0 then SendMessage(DestHandle, Msg, Ord(zChr), 0);
  50. end;
  51. end;
  52.  
  53. procedure SetHook(aDestHandle: THandle; aMsg: cardinal); stdcall;
  54. begin
  55. DestHandle := aDestHandle;
  56. Msg := aMsg;
  57. CurrentHook := SetWindowsHookEx(WH_KEYBOARD_LL, @KeyboardProc, HInstance, 0);
  58. end;
  59.  
  60. procedure UnHook; stdcall;
  61. begin
  62. UnhookWindowshookEx(CurrentHook);
  63. end;
  64.  
  65. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement