Visual Basic Simple
Spegnere il computer
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

Questa volta svilupperemo un programmino semplice semplice per effettuare la chiusura della sessione e, quindi, lo spegnimento del sistema ove il computer lo permetta.

A tale scopo esiste una funzione API dedicata alla chiusura di Windows. La funzione in oggetto si chiama ExitWindowsEx e richiede due parametri, di cui uno fisso. Il parametro da passare alla funzione indica l'operazione da svolgere: la chiusura di Windows, il riavvio del computer, lo spegnimento.

Figura 1Inseriamo sopra un form un semplice pulsante di nome Spegni. Il click sopra d'esso provocherà la chiusura di Windows e lo spegnimento del computer.
Prima di vedere questa funzione scriviamo le dichiarazioni API:

  1. Private Const EWX_SHUTDOWN = 1
  2. Private Const EWX_REBOOT = 2
  3. Private Const EWX_FORCE = 4
  4. Private Declare Function ExitWindowsEx Lib "User32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Nelle prime tre righe abbiamo dichiarato tre costanti API che serviranno da parametro da passare alla funzione API dichiarata subito dopo.
La prima costante (EWX_SHUTDOWN) indica l'arresto del sistema (ShutDown); la seconda (EWX_REBOOT) indica il riavvio del computer; la terza (EWX_FORCE), invece, indica la chiusura forzata di Windows.
Nella quarta riga dichiariamo la funzione ExitWindowsEx.

  1. Private Sub Spegni_Click()
  2.     Dim Chiusura As VbMsgBoxResult
  3.     Chiusura = MsgBox("Vuoi veramente spegnere il computer?", vbExclamation + vbYesNo + vbDefaultButton2, "Spegnimento in corso...")
  4.     If Chiusura = vbYes Then
  5.         ExitWindowsEx EWX_FORCE, 0&
  6.         ExitWindowsEx EWX_SHUTDOWN, 0&
  7.     End If
  8. End Sub

Abbiamo voluto evitare l'immediata chiusura del computer in caso di click sopra il pulsante, per evitare l'involontaria chiusura del computer.
A tal scopo abbiamo dichiarato alla riga 7 una variabile di nome Chiusura di tipo VBMsgBoxResult, un tipo ENUM già pronto per le finestre di dialogo MessageBox.

Figura 2Alla riga 8 presentiamo la finestra di dialogo di conferma visibile qui a lato. Il pulsante premuto viene memorizzato nella variabile Chiusura.
Nota l'utilizzo della costante vbDefaultButton2 che imposta il secondo pulsante (NO) come pulsante di default. Questo evita ulteriormente chiusure del computer involontarie.

Alla riga 9 abbiamo il controllo del pulsante premuto nella finestra di dialogo. Se l'utente ha cliccato sul pulsante SI vengono eseguite le funzioni alle righe 10 e 11; in caso contrario non avviene null'altro.

Appunto alle righe 10 e 11 ci sono le due funzioni che effettuano lo spegnimento del computer. La prima riga effettua la chiusura di Windows, mentre la seconda effettua lo Shutdown vero e proprio.

La funzione API ExitWindowsEx richiede un secondo parametro di nome dwReserved. Come tutte le funzioni API, questo parametro verrà utilizzato dalla funzione per scopi propri. A tal scopo è necessario impostare questo parametro sempre a 0&.

È bene controllare sempre, mediante una finestra di dialogo, l'utilizzo di funzioni come questa.

Fibia FBI
18 Dicembre 2000

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