unit uHook;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, Dialogs, StdCtrls;
type tagKBDLLHOOKSTRUCT = packed record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: DWORD; end;
KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
const WH_KEYBOARD_LL = 13;
const LLKHF_ALTDOWN = $20;
function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
procedure hookstar;
procedure hookend;
var hhkLowLevelKybd: HHOOK;
implementation
function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; var fEatKeystroke: BOOL; p: PKBDLLHOOKSTRUCT; begin Result := 0; fEatKeystroke := FALSE; p := PKBDLLHOOKSTRUCT(lParam); if (nCode = HC_ACTION) then begin case wParam of WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP:fEatKeystroke:= // ((p.vkCode=VK_TAB) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or // ((p.vkCode=VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0))or // (p.vkCode=VK_Lwin) or // (p.vkCode=VK_Rwin) or // (p.vkCode=VK_apps) or // ((p.vkCode=VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0)) or ((p.vkCode=VK_F4) and ((p.flags and LLKHF_ALTDOWN) <> 0)) // or // ((p.vkCode=VK_SPACE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or // (((p.vkCode=VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN and p.flags) and (P.vkCode=VK_Delete))) end; end; if fEatKeystroke = True then Result := 1; if nCode <> 0 then Result := CallNextHookEx(0, nCode, wParam, lParam); end;
procedure HookStar; begin if hhkLowLevelKybd = 0 then hhkLowLevelKybd := SetWindowsHookExW(WH_KEYBOARD_LL, LowLevelKeyboardProc, Hinstance, 0); end;
procedure HookEnd; begin if (hhkLowLevelKybd <> 0) and UnhookWindowsHookEx(hhkLowLevelKybd) then hhkLowLevelKybd := 0; end;
initialization hookstar;
finalization hookend;
end.
http://blog.csdn.net/y281252548/article/details/52623199
|
请发表评论