Visual Basic Simple
Controllare la combinazione CTRL+ALT+CANC
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Ricerca personalizzata

Difficoltà: 1 / 5

In alcuni programmi che svolgono operazioni critiche in cui è fondamentale non interrompere l'esecuzione, può essere necessario disabilitare la combinazione di tasti CTRL+ALT+CANC e riabilitarla in seguito.

Quest'operazione è semplicissima in Visual Basic e viene effettuata mediante l'utilizzo di una funzione API già vista in un altro HowTo. La funzione API da sfruttare è la SystemParametersInfo che comanda alcune funzioni interne del sistema.

Figura 1Passiamo subito allo sviluppo del progetto, e inseriamo sopra un form una CheckBoxdi nome ControllaCheck con il testo "Disabilita la finestra di CTRL+ALT+CANC". Il click e l'attivazione/disattivazione della CheckBox determina la possibilità di sfruttare la combinazione di tasti per terminare un programma.

Il codice di questo progetto si compone di pochissime righe:

  1. Option Explicit
  2. Private Declare Function SystemParametersInfo Lib "USER32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
  3. Private Const SPIF_SENDCHANGE = &H2
  4. Private Sub ControllaCheck_Click()
  5.     SystemParametersInfo 97, ControllaCheck.Value = vbChecked, ByVal 0&, SPIF_SENDCHANGE
  6. End Sub

Abbiamo infatti dichiarato solamente una funzione ed una costante API e richiamata la funzione all'interno dell'eventoClick sulla CheckBox ControllaCheck.

Alla riga 3 abbiamo la dichiarazione della funzione SystemParametersInfo che permette di modificare alcuni valori di sistema.
La funzione richiede una serie di valori per specificare il tipo di operazione da effettuare e un ultimo valore per specificare il modo in cui tali modifiche saranno notificate agli altri programmi.

Alla riga 4 abbiamo una costante API di nome SPIF_SENDCHANGE che verrà utilizzata dalla funzione SystemParametersInfo per specificare il tipo di notifica dei cambiamenti. Essa, appunto, indica una modifica semplice che non va ad alterare alcun file di sistema.

Nel momento in cui l'utente seleziona o deseleziona la CheckBox scatta il suo evento Click. Per cui, all'interno della routine collegata all'evento, inseriremo la chiamata alla funzione API che modifica il valore di sistema.

La funzione SystemParametersInfo richiede un primo parametro numerico (uAction) che indica il tipo di operazione da effettuare: il valore che controlla la combinazione di tasti CTRL+ALT+CANC è il numero 97 e non ha una costante API corrispondente.
Il secondo parametro richiesto dalla funzione indica il valore da assegnare (uParam) all'operazione scelta e nel nostro caso indicherà se attivare o disattivare la combinazione di tasti. Il terzo parametro indica delle informazioni aggiuntive da inviare al sistema (lpvParam) ma non sarà utilizzato in questa operazione.
L'ultimo parametro richiesto dalla funzione API determina la notifica delle modifiche da inviare agli altri programmi (fuWinIni). Abbiamo dichiarato una costante apposita per quest'operazione: SPIF_SENDCHANGE.

Riassumendo, alla funzione saranno passati i valori 97 (uAction), l'espressione booleana ControllaCheck = True (uParam), il valore ByVal 0& (lpvParam) poiché questo parametro non sarà necessario in quest'operazione ed infine la costante di notifica SPIF_SENDCHANGE (fuWinIni).

Possiamo adesso eseguire il progetto.
Nel momento in cui la CheckBox è disattivata, la pressione dei tasti CTRL+ALT+CANC richiamerà la finestra Termina applicazione di Windows.

Figura 2
Figura 2

Se invece la CheckBox è selezionata, ogni pressione della combinazione dei tre tasti sarà inutile, e non sarà possibile richiamare la finestra Termina applicazione in nessun modo.

Naturalmente si consiglia di non abusare di questa funzione poiché a volte la finestra Termina applicazione è l'unica soluzione per liberare il computer da un programma bloccato. È inoltre fondamentale ricordarsi di sbloccare la combinazione di tasti alla chiusura del programma. Infatti quest'operazione non sarà effettuata automaticamente all'uscita del programma che la comanda.

Nota bene!
Abbiamo ricevuto decine di segnalazioni che questo codice non funziona nei sistemi Windows NT/2000/XP. Si tratta di un comportamento normalissimo perché tali sistemi sono nati come sistemi operativi Server e non per la utenza domestica. In un sistema server la possibilità che un'applicazione di alto livello blocchi o alteri il comportamento di una macchina è assolutamente intollerabile. In poche parole è il sistema operativo a comandare, a differenza dei sistemi Windows 9x/ME.

Fibia FBI
19 Febbraio 2001
Nota del 24 Dicembre 2002

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli HowTo