2016-11-12 2 views
3

Добрый день,Как заблокировать CTRL + ALT + DEL, используя SetWindowHookEx api?

мне нужно заблокировать CTRL + ALT + DEL комбинации с использованием SetWindowsHookEx и сегодня я сделал код и не не работает до сих пор.

Этот код выполняет в 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

См. Также [Настройка устройства для всех пользователей (режим киоска)] (https://technet.microsoft.com/sv-se/itpro/windows/управление/SET-UP-а-устройство-для-кого в использовании). –

+1

Самый простой способ - удалить одну из этих 3 клавиш с клавиатуры. –

ответ

5

Windows, не позволяет перехватывать Ctrl + Alt + Del по соображениям безопасности. Более ранние версии (pre-Vista?) Использовались, чтобы позволить это, заменив GINA DLL, но это не разрешено годами.

Эта комбинация клавиш известна как secure attention sequence, которая гарантированно будет надежна как часть процесса входа в систему.

Если ваша цель - разрешить запуск вашего приложения, вы можете настроить его для работы в режиме киоска, если вы используете подходящую версию Windows, как показано в Set up a device for anyone to use (kiosk mode) в TechNet, которую любезно предоставили @LURD.

0

По дизайну невозможно уловить или заблокировать Ctrl + Alt + Del (Безопасная последовательность внимания). Существует, однако, коммерческая библиотека (отказ от ответственности: Я автор), SasLibEx.

SasLibEx: библиотека, которая может имитировать или блокировать Secure Внимания последовательности (Ctrl + Alt + Del), но это может даже разблокировать рабочую станцию ​​или сеанс без ввода или необходимости учетных данных пользователя (и многая больше вещей)

См. это screencast для демонстрации.

+0

Я увидел, что вы хорошо разбираетесь в 'WinSta и Secure Desktop', и я хочу, чтобы вы предоставили помощь (если возможно) с [этим моим другим вопросом здесь] (http://stackoverflow.com/questions/40098364/how-execute -люба-программное обеспечение в интерактивном-рабочем столе-Winsta0-из-окон-8-к-10? noredirect = 1 # comment67807295_40098364) – Saulo

0

Невозможно. Ctl-Alt-Del попадает в ядро ​​и никогда не попадает в пространство пользовательского режима, где работает ваше приложение. Мне пришлось делать это в киосках (используя Win XP и Vista), и я сделал это с помощью драйвера фильтра клавиатуры (который работает в ядре), который меняет коды сканирования при нажатии клавиши.

Смежные вопросы