DLL部分:
{$R *.res}
var
hook:HHOOK;
////////////////////
function KeyHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT;stdcall;
begin
if ((wParam=vk_lwin) or (wparam=vk_rwin)) then //如果按下'a'键
result:=1
else
Result := CallNextHookEx(hook, nCode, wParam, lParam);
end;
////////////////////
function sethook:boolean;stdcall
begin
SetWindowsHookEx(WH_KEYBOARD,@KeyHook,HInstance,0);
Result := hook <> 0
end;
////////////////////
function delhook:boolean;stdcall
begin
Result := UnhookWindowsHookEx(hook);
end;
////////////////////
exports
sethook,delhook,keyhook;
我在主程序调用DLL,测试了一下 依然不能屏蔽win键 怎么回事?会不会和我是笔记本电脑有关?
{$R *.res}
var
hook:HHOOK;
////////////////////
function KeyHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT;stdcall;
begin
if ((wParam=vk_lwin) or (wparam=vk_rwin)) then //如果按下'a'键
result:=1
else
Result := CallNextHookEx(hook, nCode, wParam, lParam);
end;
////////////////////
function sethook:boolean;stdcall
begin
SetWindowsHookEx(WH_KEYBOARD,@KeyHook,HInstance,0);
Result := hook <> 0
end;
////////////////////
function delhook:boolean;stdcall
begin
Result := UnhookWindowsHookEx(hook);
end;
////////////////////
exports
sethook,delhook,keyhook;
我在主程序调用DLL,测试了一下 依然不能屏蔽win键 怎么回事?会不会和我是笔记本电脑有关?
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;