¿Cómo activar Screensaver (Windows 7) por un código (en cmd)?¿Cómo activar Screensaver (Windows 7) por un código (en cmd)?
Respuesta
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 - único inconveniente es que u no puede interactuar con el PC de forma algo así como 7 segundos, pero supongo que es de 7 para dar PPL tiempo antes de tomar salvapantallas 'permanente'.
Puedes probar Powershell Script To Start A Random Screen Saver.
eso significaría descargar software adicional, no lo quiero. –
@oO .: Powershell ** ya está instalado ** en Windows 7. – surfasb
¿Los siguientes cumplen con sus requisitos?
start logon.scr /s
Mientras el .scr
está en el camino el comando anterior debería funcionar.
EDIT: No sé si Windows 7 viene con logon.scr
, asegúrese de que está probando con un .scr
que realmente se instala en Windows 7.
Tenga en cuenta que me dio la idea de invocar el .scr
con /s
de Screensaver Sample Command Line Options:
Cuando Windows se ejecuta el protector de pantalla, que lanza con una de las tres opciones de línea de comandos :
- /s - Comience el protector de pantalla en modo de pantalla completa.
- /c - Muestra el cuadro de diálogo de configuración de configuración.
- /p #### - Muestra una vista previa del protector de pantalla utilizando el identificador de ventana especificado .
EDIT 2:
que hice algunas búsquedas adicionales y encontró que se 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 perfecto, ambos revelan un parpadeo del escritorio El protector de pantalla está desactivado y justo antes de que la estación de trabajo esté bloqueada.
Es posible que no se pueda reproducir el comportamiento del sistema al iniciar el protector de pantalla y la protección con contraseña en la reanudación. Incluso the answer to Launch System Screensaver from C# Windows Form solo inicia el protector de pantalla, no protege con contraseña en la reanudación.
No recuerdo cómo funcionaba en las ventanas antiguas, pero en 7 solo muestra cómo se vería ese salvapantallas, pero en realidad no lo enciende (Lo que quiero decir es que cuando interactúas con el sistema, el protector simplemente desaparece cuando se debe mostrar la pantalla de inicio de sesión) –
@Grant, ¿te importaría copiar "Editar 3" en una respuesta separada? Me gustaría subirlo de categoría, pero el objetivo de la votación ascendente es que la respuesta correcta esté en la parte superior, y la gente no tiene que pasar por los intentos anteriores. :-) –
@system: la solución C# ahora es una respuesta separada. Dejé esta respuesta como está, en caso de que las soluciones 'cmd' o' vbs' sean "lo suficientemente buenas" para que otros hagan la misma pregunta. –
Juntar the cmd
and vbs
script ideas con el código de the answer to Launch System Screensaver from C# Windows Form 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 construirlo, install the .NET Framework, copia y pega el código anterior en lock.cs
, a continuación, ejecute:
%SystemRoot%\Microsoft.NET\Framework\v3.5\csc.exe lock.cs
Ponga el lock.exe
creado en su camino, después de eso, escribiendo lock
debe activar el protector de pantalla configurado y bloquear su estación de trabajo.
¡Demasiado dulce! Esto funciona perfectamente para mí en XP, 2003 y 2008, y no puedo imaginar nada que lo haga fallar en Vista o 7 (aunque no lo he probado allí). ¡GRACIAS! –
@oO Tome nota: Windows 7 se envía con .NET 3.5 SP1, por lo que puede omitir el paso de instalación, si prueba esto. –
@system PAUSE bien, lo hace - después de activar hay un blip (protector de pantalla, supongo) y luego se le redirige a la pantalla de inicio de sesión. hay una solución - lo publique como una respuesta –
Parece extraño, que en todas partes que he buscado no hay respuesta que refleje eso en el O/S. Lo que todos estos hacks simplemente hacen es ejecutar el protector de pantalla y luego, cuando se detiene (se interrumpe), el programa ejecuta la estación de trabajo/escritorio de bloqueo, después del hecho. El esfuerzo ininterrumpido para invocar un protector de pantalla con una protección de contraseña que cuando se detiene/interrumpe una contraseña es necesario para volver a la estación de trabajo es lo que estoy buscando. No parece ser una orden tan grande ¿verdad? Continuaré buscando cualquier tipo de solución de lenguaje de programación que pueda encontrar, pero evidentemente necesitaba ser invocado por otras aplicaciones a nivel de aplicación (incluidas las tecnologías de scripting), en lugar de enterrarlo dentro del O/S en el nivel O/S .
Tengo Windows 7. He colocado la línea:
@Start/wait% windir% \ ExtraPath \ ScreenSaverName.scr/s & rundll32 user32.dll, LockWorkStation
en un proceso por lotes (.bat), colóquelo en un directorio apropiado y cree un atajo que señale esto, con la tecla de atajo deseada. En esta línea, \ ExtraPath es la ruta adicional debajo de su directorio de Windows (generalmente este es \ system32) donde están ubicados los protectores de pantalla, y ScreenSaverName.scr es el nombre del protector de pantalla deseado.
Funciona perfectamente.
Ahora puedo presionar las teclas de método abreviado para ejecutar el protector de pantalla y bloquear la PC.
Gracias mucho.
- 1. ¿Cómo activar GCStress en Windows 7?
- 2. problema ssh en Windows 7 (gitbash vs. windows cmd)
- 3. Launch System Screensaver de C# Windows Form
- 4. ¿Por qué mi código no se segfault en Windows 7?
- 5. imprimir código de salida en cmd en windows os
- 6. R CMD en Windows 7 Error - "R" no se reconoce como un comando interno o externo,
- 7. Starfield Screensaver Ecuaciones
- 8. ¿Cómo puedo encontrar el idioma de Windows actual de cmd?
- 9. Ejecutar archivo php en Windows CMD
- 10. Servicio de detención/inicio en el código en Windows 7
- 11. ¿Por qué no puedo probar el código de retorno en Windows 7?
- 12. Windows Phone 7 TextBox.Height = auto en el código?
- 13. Cards.dll en Windows 7
- 14. Cómo hacer un enlace simbólico con cygwin en Windows 7
- 15. Silenciar/activar sonido, cambiar el volumen principal en Windows 7 x64 con C#
- 16. WebSocket en Windows 7
- 17. Cómo desinstalar Netbeans 6.9 en Windows 7?
- 18. Cómo habilitar SSL en IIS 7/Windows 7 64bit
- 19. Cómo puedo agregar python a cmd en Windows
- 20. ¿Cómo restar un segundo de DateTime en Windows Phone 7?
- 21. ¿Cambiar la página de código en CMD permanentemente?
- 22. ¿Cómo se puede activar un efecto de cristal (Windows Vista/7) en una aplicación de consola utilizando Delphi
- 23. No se puede obtener el enlace simbólico para trabajar (Windows 7) cmd
- 24. cmd: regedit de cmd
- 25. Ejecutando múltiples comandos desde un script cmd de Windows
- 26. ¿Cómo obtengo un control del botón Inicio en Windows 7?
- 27. Desarrolle Windows Phone 7 en Windows XP
- 28. Windows 7: no puede registrar DLL - Código de error: 0x80004005
- 29. ¿Cómo agregar a pythonpath en Windows 7?
- 30. Inicie un servicio de Windows e inicie el cmd
La solución de Grant Wagners inicia el protector de pantalla y luego bloquea la pantalla, pero el bloqueo hace que el protector de pantalla salga. Esta solución solo está iniciando el protector de pantalla sin bloquearlo explícitamente, por lo que tarda unos segundos antes de que esté bloqueado por Windows. Invertir el orden de la solución Grant Wagners (llamando a LockWorkStation antes de SendMessage) soluciona ambos problemas, la pantalla se bloquea inmediatamente y el protector de pantalla se inicia después de ella. – Istador