2016-11-12 6 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

참고 [[모든 사람이 키오스크 모드 사용을위한 장치 설정] (https://technet.microsoft.com/sv-se/itpro/windows)/관리/설정 - 장치 - 사람 - 위해 - 사용하기 위해). –

+1

가장 쉬운 방법은 키보드에서 3 개의 키 중 하나를 제거하는 것입니다. –

답변

5

Windows는 보안상의 이유로 Ctrl + Alt + Del을을 차단하는 것을 허용하지 않습니다. 이전 버전 (Vista 이전 버전)은 GINA DLL을 대체하여 허용했지만 몇 년 동안은 허용되지 않았습니다.

해당 키 조합은 secure attention sequence으로 알려져 있으며 로그인 프로세스의 일부로 신뢰할 수 있습니다.

@LURD가 친절하게 제공 한 TechNet의 Set up a device for anyone to use (kiosk mode)에 나와있는 것처럼 적절한 버전의 Windows를 실행하는 경우 키오스크 모드로 작동하도록 응용 프로그램을 구성 할 수 있습니다.

0

Ctrl + Alt + Del (보안주의 시퀀스)를 트래핑하거나 차단할 수 없습니다. 그러나 상업용 라이브러리 (면책 조항 : 저자), SasLibEx이 있습니다.

SasLibEx하십시오 시뮬레이션 또는 보안주의 시퀀스 (Ctrl + Alt + Del을)를 차단하지만, 심지어 입력하거나 사용자의 자격 증명을 필요로하지 않고 워크 스테이션 또는 세션 잠금을 해제 할 수 있습니다 라이브러리 (많은 기타)

데모는 screencast을 참조하십시오.

+0

나는 당신이'WinSta and Secure Desktop'에 대해 잘 이해하고있는 것을 보았으며, 가능하다면 당신이 [여기 다른 나의 질문] (http://stackoverflow.com/questions/40098364/how-execute 대화 형 데스크톱 소프트웨어 -winsta0-windows-8-to-10? noredirect = 1 # comment67807295_40098364) – Saulo

0

불가능합니다. Ctl-Alt-Del은 커널에 갇히게되어 앱이 실행중인 사용자 모드 공간으로 이동하지 않습니다. Windows XP 및 Vista를 사용하여 키오스크 시스템에서이 작업을 수행해야했으며 키를 누를 때 스캔 코드를 바꿔주는 키보드 필터 드라이버 (커널에서 실행 됨)를 사용했습니다.