2016-11-12 12 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つのキーの1つを削除することです。 –

答えて

5

Windowsはセキュリティ上の理由からはCtrl + Alt + Delキーを傍受することはできません。それ以前のバージョン(Vista以前)は、GINA DLLを置き換えることができましたが、何年も許可されていません。

そのキーの組み合わせは、secure attention sequenceとして知られており、ログインプロセスの一部として信頼できることが保証されています。

アプリケーションの実行のみを許可することを目的としている場合は、適切なバージョンのWindowsを実行している場合はキオスクモードで動作するように設定することができます(@LURDが親切に提供しているSet up a device for anyone to use (kiosk mode)、TechNet)。

0

トラップまたはブロックすることは不可能です。Ctrl + Alt + Del(セキュアアテンションシーケンス)。しかし商業ライブラリがあります(免責事項:私は著者です)。SasLibExです。

SasLibEx:シミュレートまたはセキュアアテンション シーケンス(はCtrl + Alt + Delキー)をブロックしますが、それも入力したり、ユーザーの 資格情報を必要とせず ワークステーションまたはセッションのロックを解除することができライブラリ(と多くのその他のもの)

デモはscreencastを参照してください。

+0

私はあなたが 'WinStaとSecure Desktop'についてうまく理解していることを知っていました。そして、私はあなたが[こちらの私の別の質問](もしあれば)を助けたいと思っています。(http://stackoverflow.com/questions/40098364/how-execute -any-software-in-interactive-desktop-winsta0-windows-8-to-10?noredirect = 1#comment67807295_40098364) – Saulo

0

不可能です。 Ctl-Alt-Delはカーネルに閉じ込められ、アプリケーションが実行されているユーザモードの空間に決して行きません。 私はキオスクシステム(Win XPとVistaを使用)でこれをやらなければならず、キーを押したときにスキャンコードを取り替えるキーボードフィルタドライバ(カーネルで動作)で行った。

関連する問題