How to turn screensaver on (windows 7) by a code (in cmd)? [closed] How to turn screensaver on (windows 7) by a code (in cmd)? [closed] windows windows

How to turn screensaver on (windows 7) by a code (in cmd)? [closed]


Does the following meet your requirements?

start logon.scr /s

As long as the .scr is on the PATH the above command should work.

EDIT: I don't know if Windows 7 comes with logon.scr, make sure you're testing it with a .scr that is actually installed in Windows 7.

Note that I got the idea of just invoking the .scr with /s from Screensaver Sample Command Line Options:

When Windows runs your screensaver, it launches it with one of three command line options:

  • /s – Start the screensaver in full-screen mode.
  • /c – Show the configuration settings dialog box.
  • /p #### – Display a preview of the screensaver using the specified window handle.

EDIT 2:

I did some additional searching and found that you could create lock.cmd:

@start /wait logon.scr /s & rundll32 user32.dll,LockWorkStation

Or lock.vbs:

Set objShell = CreateObject("Wscript.Shell")' The "True" argument will make the script wait for the screensaver to exitreturnVal = objShell.Run("logon.scr", 1, True)' Then call the lock functionalityobjShell.Run "rundll32.exe user32.dll,LockWorkStation"

Neither of these answers is perfect, both reveal a flicker of the desktop after the screen saver is disabled and just prior to the workstation being locked.

It may not be possible to reproduce the system behaviour of starting the screen saver and password protecting on resume. Even the answer to Launch System Screensaver from C# Windows Form only starts the screen saver, it does not password protect on resume.


Putting together the cmd and vbs script ideas with the code from the answer to Launch System Screensaver from C# Windows Form I came up with the following:

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();    }}

To build it, install the .NET Framework, copy and paste the above code into lock.cs, then run:

%SystemRoot%\Microsoft.NET\Framework\v3.5\csc.exe lock.cs

Put the created lock.exe in your path, after that, typing lock should engage the configured screen saver and lock your workstation.


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();    }}

This works - only downside is that u cant interact with pc for something like 7 sec, but i guess its 7's to give ppl time before making screensaver 'permanent'.