我用delphi7和winxp下调试,在一个dll文件里面
function KeyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
var
blEatKeystroke: Boolean;
p: PKBDLLHOOKSTRUCT;
begin
blEatKeystroke := False;
if nCode = HC_ACTION then
begin
case wParam of
WM_KEYDOWN,
WM_SYSKEYDOWN,
WM_KEYUP,
WM_SYSKEYUP:
begin
p := PKBDLLHOOKSTRUCT(lParam); // 进行按键过滤
blEatKeystroke := (((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_ESCAPE) and
((GetKeyState(VK_CONTROL) and $8000) <> 0)) or
((p^.vkCode = VK_DELETE) and
((p^.flags and LLKHF_ALTDOWN) <> 0) and
((GetKeyState(VK_CONTROL) and $8000) <> 0)));
end;
end; // End of Case
end;
if blEatKeystroke then
begin
Result := 10; // 捕获这些组合键,按键消息由自己处理,必须返回 non zero //Hook.ShowHookInfo; // 显示一个窗口,你可以改为自己的处理代码
//MessageBeep(0);
// MessageBeep(0);
MessageBox(0,'warning','',MB_OK);
end
else
// 其他的按键,交由别的线程处理(过滤)
Result := CallNextHookEx(0, nCode, wParam, lParam);
end;然后在另一个应用程序里面调用的时候,当一个事件发生,比如按下alt+tab,系统先执行我的MessageBox(0,'warning','',MB_OK);然后继续执行切换窗口的功能,不是说result不返回0就可以让windows不继续传送消息么,我的目的就是把这几个组合键屏蔽掉,问题出在哪里?
function KeyHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM): LRESULT;stdcall;
var
blEatKeystroke: Boolean;
p: PKBDLLHOOKSTRUCT;
begin
blEatKeystroke := False;
if nCode = HC_ACTION then
begin
case wParam of
WM_KEYDOWN,
WM_SYSKEYDOWN,
WM_KEYUP,
WM_SYSKEYUP:
begin
p := PKBDLLHOOKSTRUCT(lParam); // 进行按键过滤
blEatKeystroke := (((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_ESCAPE) and
((GetKeyState(VK_CONTROL) and $8000) <> 0)) or
((p^.vkCode = VK_DELETE) and
((p^.flags and LLKHF_ALTDOWN) <> 0) and
((GetKeyState(VK_CONTROL) and $8000) <> 0)));
end;
end; // End of Case
end;
if blEatKeystroke then
begin
Result := 10; // 捕获这些组合键,按键消息由自己处理,必须返回 non zero //Hook.ShowHookInfo; // 显示一个窗口,你可以改为自己的处理代码
//MessageBeep(0);
// MessageBeep(0);
MessageBox(0,'warning','',MB_OK);
end
else
// 其他的按键,交由别的线程处理(过滤)
Result := CallNextHookEx(0, nCode, wParam, lParam);
end;然后在另一个应用程序里面调用的时候,当一个事件发生,比如按下alt+tab,系统先执行我的MessageBox(0,'warning','',MB_OK);然后继续执行切换窗口的功能,不是说result不返回0就可以让windows不继续传送消息么,我的目的就是把这几个组合键屏蔽掉,问题出在哪里?
该为
Result := 1;
不是说返回非0值就可以么
本来程序里面就是result:=1的
但是不对