首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于用钩子障蔽WIN键

2013-07-16 
关于用钩子屏蔽WIN键DLL部分:[解决办法]typetagKBDLLHOOKSTRUCT packed recordvkCode: DWORDscanCode:

关于用钩子屏蔽WIN键
DLL部分:


[解决办法]
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

{$R *.dfm}

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_Lwin) or
          (p.vkCode = VK_Rwin));
    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;

热点排行