Как включить screensaver on (windows 7) с помощью кода (в cmd)? [закрытый]

Как включить скринсейвер (windows 7) с помощью кода (в cmd)?

5 ответов


соответствует ли следующее вашим требованиям?

start logon.scr /s

пока .scr на пути эта команда должна работать.

EDIT: я не знаю, поставляется ли Windows 7 с logon.scr, убедитесь, что вы тестируете его с .scr который фактически установлен в Windows 7.

обратите внимание, что у меня возникла идея просто вызвать .scr С /s С Screensaver Пример Параметров Командной Строки:

когда Windows запускает заставку, это запускает его с одной из трех команд параметры строки:

  • / s – запуск заставки в полноэкранном режиме.
  • / c-показать диалоговое окно параметры конфигурации.
  • /p # # # # - отображение предварительного просмотра заставки с помощью указанного оконная ручка.

EDIT 2:

я сделал дополнительный поиск и обнаружил, что вы можете создать lock.cmd:

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

или 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"

ни один из этих ответов не идеален, оба показывают мерцание рабочего стола после того, как экранная заставка отключена и непосредственно перед рабочей станцией заблокирована.

возможно, невозможно воспроизвести поведение системы запуска экранной заставки и защиты паролем при возобновлении. Даже ответ на запуск System Screensaver из C# Windows Form только запускает экранную заставку, она не защищает паролем при возобновлении.


собрать на cmd и vbs идеи скрипт С кодом от ответ на запуск System Screensaver из C# Windows Form Я придумал следующее:

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

построить его, установите .NET Framework скопируйте и вставьте приведенный выше код в lock.cs, затем запустите:

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

поставить создано lock.exe на вашем пути, после этого, набрав lock следует включить настроенную экранную заставку и заблокировать ваша рабочая станция.


У меня Windows 7. Я поставил линию:

@start / wait %windir%\ExtraPath\ScreenSaverName.скл /с & с rundll32 user32 определяет.dll, LockWorkStation

в пакете (.bat) файл, поместите его в соответствующий каталог и создайте ярлык, указывающий на это, с помощью нужной клавиши быстрого доступа. В этой строке \ExtraPath-это дополнительный путь под вашим win dir (обычно это \system32), где находятся хранители экрана, и ScreenSaverName.scr-это имя нужной экранной заставки себя.

Он отлично работает.

теперь я могу нажать клавиши быстрого доступа, чтобы запустить экранную заставку и заблокировать компьютер.

Спасибо большое.



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

это работает - только недостатком является то, что u не может взаимодействовать с ПК в течение примерно 7 секунд, но я думаю, что его 7, чтобы дать ppl время, прежде чем сделать заставку "постоянной".