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

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

  •  07-07-2019
  •  | 
  •  

Вопрос

Как включить заставку (windows 7) по коду (в cmd)?

Это было полезно?

Решение 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();
    }
}

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

Другие советы

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

start logon.scr /s

Пока .scr находится в PATH, приведенная выше команда должна работать.

РЕДАКТИРОВАТЬ:Я не знаю, поставляется ли Windows 7 logon.scr, убедитесь, что вы тестируете его с помощью .scr который фактически установлен в Windows 7.

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

Когда Windows запускает заставку, она запускает его одной из трех команд Опции линии:

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

РЕДАКТИРОВАТЬ 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"

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

Возможно, не удастся воспроизвести поведение системы при запуске заставки и защите паролем при возобновлении работы.Даже ответ на запуск системной заставки из формы C# Windows запускает только заставку, при возобновлении работы пароль не защищает.

Объединение идей сценариев cmd и vbs с кодом из ответа на Запуск системной заставки из 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 , скопируйте и вставьте приведенный выше код в замок . cs , затем запустите:

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

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

У меня Windows 7. Я разместил строку:

@start / wait% windir% \ ExtraPath \ ScreenSaverName.scr / s & amp; rundll32 user32.dll, LockWorkStation

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

Работает отлично.

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

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

scroll top