2016-11-12 48 views
3

下午好,如何使用SetWindowHookEx api鎖定CTRL + ALT + DEL?

我需要使用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. 
+5

Windows不允許您截取該組合鍵。在較早的版本中,這是可能的,但最近的版本處理不能被阻止的較低級別的組合鍵。這是一個安全問題。相關鏈接:http://stackoverflow.com/q/17103682/62576 –

+0

另請參閱[爲任何人設置設備(kiosk模式)](https://technet.microsoft.com/sv-se/itpro/windows /管理/建立-A-設備換任何人使用的)。 –

+1

最簡單的方法是從鍵盤上移除這3個鍵中的一個。 –

回答

5

Windows不允許你攔截按Ctrl + Alt + Del鍵出於安全原因。早期版本(Vista之前版本)曾經允許通過替換GINA DLL來實現,但是它已經有多年沒有被允許。

這個組合被稱爲secure attention sequence,它被證明是值得信賴的,作爲登錄過程的一部分。

如果您的目標是隻允許您的應用程序運行,那麼您可以將其配置爲在Kiosk模式下運行,如果您運行的是適合的Windows版本,如TechNet的Set up a device for anyone to use (kiosk mode)(@LURD友好提供)中所示。

0

按設計,它是不可能陷阱或阻止Ctrl + Alt + Del(安全注意序列)。然而有商業庫可用(免責聲明:我是作者),SasLibEx

SasLibEx:可模擬或阻止安全注意 序列(按Ctrl + Alt + Del鍵),但它甚至可以解鎖 工作站或會話,而無需輸入或需要用戶的 憑證庫(和許多更多的東西)

查看此screencast的演示。

+0

我看到你對WinSta和Secure Desktop有很好的理解,並且我希望你給出一個幫助(如果可能的話)[這是我的另一個問題](http://stackoverflow.com/questions/40098364/how-execute -any-軟件在交互式桌面-winsta0-從 - 窗口8到10?noredirect = 1個#comment67807295_40098364) – Saulo

0

不可能。 Ctl-Alt-Del被困在內核中,並且永遠不會進入應用程序運行的用戶模式空間。 我必須在Kiosks系統(使用Win XP和Vista)上執行此操作,並且我使用鍵盤過濾器驅動程序(在內核中運行)執行此操作,當按下該鍵時,會掃描掃描代碼。

相關問題