En este artículo se describe cómo bloquear una estación de trabajo desde la línea de comandos, y como apagar una una estación de trabajo desde la línea de comandos y desde un programa
El trexto que se muestra a continuacion esta copiado de [http://support.microsoft.com/kb/315268/es]
Para bloquear una estación de trabajo mediante programación, puede utilizar la función LockWorkStation de Win32. Llame a esta función desde la línea de comandos utilizando la interfaz Rundll32. Use el comando siguiente:
rundll32 user32.dll,LockWorkStation
Tenga en cuenta que este comando distingue entre mayúsculas y minúsculas y que tiene en cuenta los espacios en blanco. Esta llamada se introdujo en Windows 2000 y no se admite en versiones anteriores de Windows.
Para abrir una ventana de línea de comandos, haga clic en Inicio, Ejecutar, escriba cmd en el cuadro Abrir y, a continuación, haga clic en Aceptar.
Una de las formas de hacerlo es utilizar el programa shutdown.exe que viene con nuestro sistema operativo. Podemos realizar varias tareas con esta aplicación dependiendo los parámetros que le pasemos, las más destacadas son las siguientes:
Nota: Si deseas saber más sobre shutdown(SHUTDOWN.EXE) te recomiendo que abras una ventana de consola y ejecutes el comando y te mostrara la lista de las opciones de apagado. Aquí solo te muestro unas de las más importantes.
Uso: shutdown [/i | /l | /s | /r | /g | /a | /p | /h | /e] [/f] [/m \\equipo][/t xxx][/d [p|u:]xx:yy [/c "comentario"]] Sin argumentos Muestra la ayuda. Es lo mismo que escribir /?. /? Muestra la ayuda. Es lo mismo que no especificar ninguna opción. /i Muestra la interfaz gráfica de usuario (GUI). Debe ser la primera opción. /l Cierra la sesión. No se puede utilizar con las opciones /m o /d. /s Apaga el equipo. /r Apaga y reinicia el equipo. /g Cierra y reinicia el equipo. Después de reiniciar el sistema, reinicie las aplicaciones registradas. /a Anula el apagado del sistema. Sólo se puede usar durante el período de tiempo de espera. /p Apaga el equipo local sin tiempo de espera ni advertencia. Se puede usar con las opciones /d y /f. /h Hiberna el equipo local. Se puede usar con la opción /f. /e Documenta la razón del cierre inesperado de un equipo. /m \\equipo Especifica el equipo de destino. /t xxx Establece el período de tiempo de espera antes del cierre en xxx segundos. El intervalo válido es de 0 a 315360000 (10 años); el valor prede terminado es 30. Si el período de tiempo de espera es superior a 0, el parámetro es implícito. /c "comentario" Comentario acerca de la razón del reinicio o apagado. Se permiten 512 caracteres como máximo. /f Fuerza el cierre de las aplicaciones sin advertir previamente a los usuarios. El parámetro /f es implícito cuando se especifica un valor mayor que 0 para el parámetro /t. /d [p|u:]xx:yy Proporciona la razón del reinicio o cierre. p indica que el reinicio o el cierre está planificado. u indica que la razón está definida por el usuario. Si no se especifica p ni u, el reinicio o el apagado no estarán planeados. xx es el número de razón principal (entero positivo inferior a 256). yy es el número de razón secundario (entero positivo inferior a 65536).
Para abrir una ventana de línea de comandos haga clic en [Inicio>Accesorios> símbolo del sistema>. En la consola que se abre escribir [shutdown.exe /s /t5] y pulsamos enter
Lo que hacemos es ejecutar el programa "shutdown.exe" indicándole con el parámetro "/s" para que se apague el equipo y con el parámetro "/t5" que se apague al cabo de cinco segundos, podemos modificar el número de segundos por el que nos interese.
A continuación tienes un código copiado, pegado, traducido y mínimamente adaptado que figura en la siguiente web [http://www.elguille.info/colabora/2007/phanthom2k_ApagadoPC.htm] En el que se muestra como se puede usar el programa shutdown.exe desde un programa .NET. El problema que tiene el código de la página de "El Guille", es que solo funciona cuando trabajas como administrador del sistema, y como todo el mundo sabe hay que trabajar siempre con una cuenta de usuario, por lo que no resuelve del todo el problema
Public Sub Shut_Down() Try ' Process.Start("shutdown", "/s /t 0") Dim proceso As Process = New Process proceso.StartInfo.UseShellExecute = False proceso.StartInfo.RedirectStandardOutput = True proceso.StartInfo.FileName = "shutdown.exe" proceso.StartInfo.Arguments = "/s /t5" proceso.Start() Catch ex As System.Exception Throw End Try End Sub
El código que se muestra a continuación se puede copiar de
http://es.w3support.net/index.php?db=so&id=102567 o de
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/ab7c4522-80e5-4e80-a790-978f6134fb45/
Y éste si que funciona sin problemas y apaga el ordenador desde una cuenta de usuario
Private Sub Shut_Down() '' Recuerda que tienes que añadir una referencia al ensamblado System.Management 'Imports System.Management Dim mboShutdown As ManagementBaseObject = Nothing Dim mcWin32 As ManagementClass = New ManagementClass("Win32_OperatingSystem") mcWin32.Get() ' You can't shutdown without security privileges mcWin32.Scope.Options.EnablePrivileges = True Dim mboShutdownParams As ManagementBaseObject = mcWin32.GetMethodParameters("Win32Shutdown") ' Flag=0 cierra la sesion del usuario ' Flag 1 apaga el ordenador ' flag 2 reinicio ' flag 3 nada ' "Reserved") = "0" Avisa que hay aplicaciones sin cerrar ' "Reserved") = "1" cierra todo en automatico, no pregunta nada mboShutdownParams("Flags") = "1" mboShutdownParams("Reserved") = "1" For Each manObj As ManagementObject In mcWin32.GetInstances mboShutdown = manObj.InvokeMethod("Win32Shutdown", mboShutdownParams, Nothing) Next End Sub