¿Cómo activar el protector de pantalla (Windows 7) mediante un código (en cmd)? [cerrado]
-
07-07-2019 - |
Pregunta
¿Cómo activar el protector de pantalla (Windows 7) mediante un código (en cmd)?
Solución 5
using System;
using System.Runtime.InteropServices;
public static class LockDesktop
{
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
private static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
private const int SC_SCREENSAVE = 0xF140;
private const int WM_SYSCOMMAND = 0x0112;
public static void SetScreenSaverRunning()
{
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
}
public static void Main()
{
LockDesktop.SetScreenSaverRunning();
}
}
Esto funciona; el único inconveniente es que no puedes interactuar con la PC durante algo así como 7 segundos, pero supongo que es 7 para dar tiempo a la PCP antes de hacer que el protector de pantalla sea "permanente".
Otros consejos
¿Cumple lo siguiente sus requisitos?
start logon.scr /s
Mientras el .scr
esté en la RUTA, el comando anterior debería funcionar.
EDITAR: no sé si Windows 7 viene con logon.scr
, asegúrese de probarlo con un .scr
que realmente está instalado en Windows 7.
Tenga en cuenta que tuve la idea de invocar .scr
con / s
de Opciones de la línea de comandos de muestra del protector de pantalla :
Cuando Windows ejecuta su protector de pantalla, lo lanza con uno de los tres comandos opciones de línea:
- / s & # 8211; Inicie el protector de pantalla en modo de pantalla completa.
- / c & # 8211; Mostrar el cuadro de diálogo de ajustes de configuración.
- / p #### & # 8211; Mostrar una vista previa del protector de pantalla utilizando el especificado manija de ventana.
EDITAR 2:
Hice algunas búsquedas adicionales y descubrí que podía crear lock.cmd
:
@start /wait logon.scr /s & rundll32 user32.dll,LockWorkStation
O lock.vbs
:
Set objShell = CreateObject("Wscript.Shell")
' The "True" argument will make the script wait for the screensaver to exit
returnVal = objShell.Run("logon.scr", 1, True)
' Then call the lock functionality
objShell.Run "rundll32.exe user32.dll,LockWorkStation"
Ninguna de estas respuestas es perfecta, ambas revelan un parpadeo del escritorio después de deshabilitar el protector de pantalla y justo antes de que la estación de trabajo se bloquee.
Es posible que no sea posible reproducir el comportamiento del sistema al iniciar el protector de pantalla y la protección con contraseña al reanudar. Incluso la respuesta a Launch System Screensaver from C # Windows Form solo inicia el protector de pantalla, no protege con contraseña al reanudar .
Reuniendo las ideas de script cmd
y vbs
con el código de la respuesta para Iniciar System Screensaver desde C # Windows Form se me ocurrió lo siguiente:
using System;
using System.Runtime.InteropServices;
public static class LockDesktop
{
[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
private static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.dll", EntryPoint = "LockWorkStation")]
private static extern IntPtr LockWorkStation();
private const int SC_SCREENSAVE = 0xF140;
private const int WM_SYSCOMMAND = 0x0112;
public static void SetScreenSaverRunning()
{
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
LockWorkStation();
}
public static void Main()
{
LockDesktop.SetScreenSaverRunning();
}
}
Para compilarlo, instale .NET Framework , copie y pegue el código anterior en el bloqueo . cs
, luego ejecute:
%SystemRoot%\Microsoft.NET\Framework\v3.5\csc.exe lock.cs
Coloque el lock.exe
creado en su ruta, después de eso, al escribir lock
debería activar el protector de pantalla configurado y bloquear su estación de trabajo.
Tengo Windows 7. Puse la línea:
@start / wait% windir% \ ExtraPath \ ScreenSaverName.scr / s & amp; rundll32 user32.dll, LockWorkStation
en un archivo por lotes (.bat), colóquelo en un directorio apropiado y cree un acceso directo que apunte a esto, con la tecla de acceso directo deseada. En esta línea, \ ExtraPath es la ruta adicional debajo de su directorio win (generalmente es \ system32) donde se encuentran los protectores de pantalla, y ScreenSaverName.scr es el nombre del protector de pantalla deseado.
Funciona perfectamente.
Ahora puedo presionar las teclas de acceso directo para ejecutar el protector de pantalla y bloquear la PC.
Muchas gracias de verdad.
Puede intentar Powershell Script para iniciar un protector de pantalla aleatorio .