15468 发表于 2015-5-6 14:54:16

屏蔽Win、Ctrl_ESC、Alt_Tab、Alt_F4等键(Windows XP、Windows 2003 Server下测试通过)

  unit   uHook;interfaceusesWindows,   Messages,   SysUtils,   Variants,   Classes,   Controls,   Forms,   Dialogs,   StdCtrls;   typetagKBDLLHOOKSTRUCT   =   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;varhhkLowLevelKybd:HHOOK;implementationfunction   LowLevelKeyboardProc(nCode:   Integer;WParam:   WPARAM;LParam:   LPARAM):LRESULT;   stdcall;varfEatKeystroke:   BOOL;   p:   PKBDLLHOOKSTRUCT;   beginResult:=0;fEatKeystroke:=FALSE;p:=PKBDLLHOOKSTRUCT(lParam);if (nCode=HC_ACTION) thenbegincase wParam ofWM_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 thenResult:=1;if nCode0 thenResult := CallNextHookEx(0,nCode,wParam,lParam);end;procedure HookStar;beginif hhkLowLevelKybd=0 thenhhkLowLevelKybd:=SetWindowsHookExW(WH_KEYBOARD_LL,LowLevelKeyboardProc, Hinstance,0);end;procedure HookEnd;beginif (hhkLowLevelKybd0) and UnhookWindowsHookEx(hhkLowLevelKybd) thenhhkLowLevelKybd:=0;end;end.
页: [1]
查看完整版本: 屏蔽Win、Ctrl_ESC、Alt_Tab、Alt_F4等键(Windows XP、Windows 2003 Server下测试通过)