Si, con la ExitWindowsEx.
Ti riporto il testo di una guida:
Declare Function ExitWindowsEx Lib "user32.dll" (ByVal uFlags As Long,
ByVal dwReserved As Long) As Long

La Funzione ExitWindowsEx ARRESTA O RIAVVIA IL COMPUTER DELL'UTENTE.
Se avviene un errore, la funzione restituisce 0 altrimenti 1.

Scegliere uno o più dei seguenti flags per definire come avviene il
riavvio o l'arresto del sistema :

EWX_FORCE = 4
Forza la chiusura di una applicazione, ...senza chiedere il permesso all'utente,
(non mostra la dialog box dove confermarne la chiusura).
Quando questo flag è settato, Windows non trasmette il messaggio
WM_QUERYENDSESSION e WM_ENDSESSION all'applicazione in corso, e ciò potrebbe causare
la perdita di dati.
Pertanto questo flag, andrebbe utilizzato solo in condizioni di emergenza

EWX_LOGOFF = 0
Taglia fuori l'utente e gli chiude tutti i processi in corso.

EWX_POWEROFF = 8
Chiude il sistema , è se questo è supportato dalle caratteristiche POWER-OFF
spegne il computer.

EWX_REBOOT = 2
Riavvia il sistema.

EWX_SHUTDOWN = 1
Chiude il sistema nel momento in cui è sicuro che i processi in corso
siano terminati.

dwReserved
Riservato per versioni future di Windows. Settarlo sempre a zero.
Ciao