Disabilitare CRTL-ALT-DEL e CTRL-ESC e ALT-TAB

Alcune volte è necessario prevenire l'uso della combinazione di tasti CTRL+ALT+DEL, per evitare che venga chiuso il programma dalla lista dei task o prevenire l'uso di  ALT+TAB per spostarsi tra i task.
La tecnica seguente usa l'API SystemParametersInfo per imbrogliare Windows, in modo che pensi che in quel momento sia attivo uno screen saver. Come effetto collaterale vengono disabilitati, CTRL+ALT+DEL, ALT+TAB e CTRL+ESC.

L'SDK Win32 dichiara:

"SPI_SCREENSAVERRUNNING Windows 95: Usato internamente; le applicazioni non dovrebbero utilizzare questo flag. Windows NT: Non supportato."

Nota: non è consigliato disabilitare CTRL+ALT+DEL, perchè la finestra di Chiusura dei Programmi è stata creata per abilitare gli utenti a chiudere le applicazioni che non si comportano in modo corretto (blocco del programma). Se un programma si "blocca" mentre CTRL+ALT+DEL è disabilitato, non si ha più la possibilità di chiuderlo se non resettando la macchina, cosa che potrebbe causare perdita di dati.

Inserire in un modulo BAS il seguente codice:

Option Explicit

Public Declare Function SystemParametersInfo Lib "User32" _
Alias "SystemParametersInfoA" (ByVal uAction As Long, _
ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Const SPI_SCREENSAVERRUNNING = 97&

Public Sub VisioneTask(disabilita As Boolean)
'
Se disabilita=True, viene disabilitato CRTL-ALT-DEL
'e CTRL-ESC e ALT-TAB
'Se disabilita=False, CRTL-ALT-DEL e CTRL-ESC e ALT-TAB
'vengono riattivati.

Dim lngRet As Long
Dim blnOld As Boolean
lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING, disabilita, blnOld, 0&)
End Sub


Nel Form inserire due CommandButton e l'esempio seguente:

Option Explicit

Private Sub Form_Load()
Command1.Caption = "Disabilita"
Command2.Caption = "Abilita"
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Abilita CTRL+ALT+DEL and ALT+TAB prima di chiudere il
'programma

VisioneTask False
End Sub

Private Sub Command1_Click()
VisioneTask True
End Sub

Private Sub Command2_Click()
VisioneTask False
End Sub

Avviare il programma (F5) e vedere i risultati.

Testato su: Windows 98, Windows Me