¿Cómo salgo automáticamente de un programa cuando bloqueo la pantalla en Windows 7?

¿Cómo salgo automáticamente de un programa cuando bloqueo la pantalla en Windows 7?

¿Existe alguna forma de salir automáticamente de un programa en Windows 7 cada vez que bloqueo la pantalla?

Respuesta1

Según la sugerencia de gragraty,no uses el archivo por lotes que puseal final de esta respuesta. Esto es porquerundll32.exe no escoincide con la convención de llamada de la LockWorkStationfunción API de Win32 (consulteesta entrada de blog de MSDNpara detalles). Dicho esto, existe una alternativa mejor, que no implica demasiado trabajo.

Puedes usar elLenguaje de scripting AutoIty elDllCallfunción para llamar a una función API de Win32 sin dañar la pila de llamadas. También puedes utilizar elProcessCloseen lugar de TASKKILL. Para tu referencia,aquí está elLockWorkStationreferencia del MSDN.

Coloque las siguientes dos líneas en un archivo y guárdelo como exitandlock.au3(o algo similar). Luego puedes ejecutarlo con AutoIt (o incluso compilarlo en un .exe si lo deseas).

ProcessClose("yourapp.exe")
DllCall("user32.dll", "BOOL", "LockWorkStation")

Eso debería proporcionarle lo que desea, sin dañar la pila de llamadas. Luego puede vincular ese archivo a una tecla de acceso rápido y usarlo para bloquear su estación de trabajo. Alternativamente, puede compilarlo en un archivo .exe y configurarlo para que se ejecute como una tarea programada después de que su computadora esté inactiva.

Por último, es posible que también desee utilizar elWinClosefuncionar como una alternativa a ProcessClose.


Como dije por favorno uses este método. Lo mantengo aquí sólo para que esté completo, ya que es una de las formas más utilizadas en Internet. Puedes usar un archivo por lotes simple para hacer esto usando el TASKKILLcomando:

@ECHO OFF
TASKKILL /IM yourapp.exe
Rundll32.exe User32.dll,LockWorkStation

Luego, simplemente ejecute el archivo por lotes cuando desee bloquear su estación de trabajo. Alternativamente, también puede asignar una tecla de acceso rápido para ejecutar el archivo por lotes y luego simplemente presionar esa combinación de teclas cuando desee bloquearlo. Para obtener más detalles sobre el TASKKILLcomando, consulteeste artículo de Microsoft.

Respuesta2

Paso 1: escriba un script que finalice el programa

Cree un archivo llamado terminate.vbscon este contenido:

set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
strprocessname = wscript.arguments.item(0)
strquery = "select * from win32_process where name='" & strprocessname & "'"
set colitems = objwmiservice.execquery(strquery,,48)
for each objitem in colitems
    objitem.terminate
next

Pruebe este script abriendo un símbolo del sistema y ejecutando cscript.exe "C:\path\to\terminate.vbs" notepad.exe. Reemplace notepad.execon el nombre del proceso que desea finalizar.

Paso 2: programe el script para que se ejecute cuando bloquee la pantalla

AbiertoProgramador de tareas(puedes buscarlo en el menú Inicio), haz clic derechoBiblioteca del programador de tareasy seleccioneCrear tarea.... Sobre elGeneralpestaña, asigne a su tarea un nombre y una descripción. Tu puedes cambiarConfigurar para:aWindows 7, servidor Windows 2008 R2si quieres, pero eso no es necesario.

Crear tarea - pestaña General

Sobre elDesencadenantespestaña, cree un nuevo activador y establezcaComience la tarea:aEn el bloqueo de la estación de trabajo. El resto de las configuraciones predeterminadas están bien.

Crear tarea: nuevo activador

Sobre elComportamientopestaña, cree una nueva acción queiniciar un programa.Programa/guión:debiera sercscript.exe. Ingrese la ruta terminate.vbsy el nombre del proceso que desea finalizar en elAgregue argumentos (opcional):caja. mis argumentos son"C:\Users\Public\Documents\terminate.vbs" notepad.exe

Crear tarea - Nueva acción

Puedes comprobar elCondicionesyAjustespestañas para ver más opciones, pero ninguna de ellas es necesaria aquí. Guarde la tarea y listo. Cuando bloqueas la pantalla, el proceso debería finalizar.

Tenga en cuenta que si bloquea la pantalla y luego la desbloquea rápidamente, es posible que vea una ventana de símbolo del sistema o que el proceso que desea finalizar aún esté en proceso de finalización. Esto depende de cuánto tiempo tarde el proceso en finalizar correctamente.

Respuesta3

Puedes escribir un programa usando WTSRegisterSessionNotification()para esperarWTS_SESSION_LOCKeventos y hacer las cosas necesarias.

Se puede encontrar un ejemplo en:https://superuser.com/a/264973/1686

información relacionada