La Web del Programador: Comunidad de Programadores
 
    Pregunta:  236 - APAGAR EL COMPUTADOR CON VISUAL BASIC
Autor:  Caon
Me gustaria saber si hay alguna forma de apagar el computador a traves de Visual Basic, sin hacer eso de Inicio=>apagar el sistema=>...

  Respuesta:  anonimo
Apagar el ordenador:

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long,
ByVal dwReserved As Long) As Long

Public Sub ApagarPc()
Dim lResp as integer
lResp = ExitWindowsEx(1, 0&)
End Sub
NOTAS: el valor pasado a la funcion API puede tener los siguientes 3 valores:
0 = Reinicia Windows con nuevo usuario
1 = Apaga el equipo
2 = Reinicia el sistema

  Respuesta:  Gabriel Arenovich
El código es el siguiente:

A nivel de módulo las siguientes declaraciones:

Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4

Yo he creado un formulario con cuatro botones, el código es el siguiente:
Private Sub cmdLogOff_Click()
´Arranca con otro usuario reiniciando los programas del menu de inicio
ret = ExitWindowsEx(EWX_LOGOFF, 0)
End Sub

Private Sub cmdReboot_Click()
´Reinicia el ordenador
ret = ExitWindowsEx(EWX_REBOOT, 0)
End Sub

Private Sub cmdRestart_Click()
´Cambia el usuario sin reiniciar programas
ret = ExitWindowsEx(EWX_FORCE, 0)
End Sub

Private Sub cmdShutDown_Click()
´Apaga el ordenador
ret = ExitWindowsEx(EWX_SHUTDOWN, 0)
End Sub

Nota: Este código lo único que hace es apagar o reiniciar el ordenado, sería conveniente antes de hacer esto crear una función que cierre todas las aplicaciones abiertas, ya que esto no se hace por si solo, y por ejemplo yo he hecho pruebas y como tengo el Explorer 4.0 con el Active Desktop cada vez que reinicio o apago el ordenado al volver me dice que hay que restaurar el Escritorio.
Si alguien más tiene cualquier duda o consulta que me manden un email e intentaré ayudar.