¿Cómo activar el protector de pantalla (Windows 7) mediante un código (en cmd)? [cerrado]

StackOverflow https://stackoverflow.com/questions/1430108

  •  07-07-2019
  •  | 
  •  

Pregunta

¿Cómo activar el protector de pantalla (Windows 7) mediante un código (en cmd)?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top