【发布时间】:2016-11-12 19:56:17
【问题描述】:
下午好,
我需要使用SetWindowsHookEx 锁定CTRL+ALT+DEL 组合,今天我完成了一个代码,直到现在才起作用。
这段代码在一个注入到其他进程的dll(这个dll是我的软件)中执行。
那么,我如何调整下面的代码来工作?
const
WH_KEYBOARD_LL = 13;
LLKHF_ALTDOWN = $20;
type
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: Longint ;
end;
var
hhkLowLevelKybd : HHOOK;
FoldProc : LongInt;
hSASWnd : HWND;
hThread : Cardinal;
{$R *.dfm}
Function LowLevelKeyboardProc(nCode : Integer; wParam : Longint; var LParam: KBDLLHOOKSTRUCT) : Longint; stdcall;
var
fEatKeystroke : Boolean;
dwThreadId : Cardinal;
begin
If (nCode = HC_ACTION) Then
begin
If (wParam = WM_KEYDOWN) Or
(wParam = WM_SYSKEYDOWN) Or
(wParam = WM_KEYUP) Or
(wParam = WM_SYSKEYUP) Then
begin
fEatKeystroke :=
(((GetKeyState(VK_CONTROL) And $8000) <> 0) And
((LParam.flags And LLKHF_ALTDOWN ) <> 0) And
(LParam.vkCode = VK_DELETE));
End;
If fEatKeystroke Then
Result := -1
Else
Result := CallNextHookEx(0, nCode, wParam, LongInt(@LParam));
End;
end;
////////// FormCreate event here ///////////
hhkLowLevelKybd := 0;
hhkLowLevelKybd := SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc,
HInstance, 0);
end.
【问题讨论】:
-
Windows 不允许您拦截该组合键。在早期版本中这是可能的,但最近的版本在无法阻止的较低级别处理该组合键。这是一个安全问题。相关:stackoverflow.com/q/17103682/62576
-
最简单的方法是从键盘上移除这 3 个键中的一个。
-
@Jerry Dodge,好的:D
-
这是安全注意序列。一旦你读了它,你就会明白为什么你不能钩它。