如何通过代码(在cmd中)打开屏幕保护程序(Windows 7)?

有帮助吗?

解决方案 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 秒是为了在让屏幕保护程序“永久”之前给人们一些时间。

其他提示

以下是否满足您的要求?

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 窗体启动系统屏幕保护程序的答案 仅启动屏幕保护程序,在恢复时不提供密码保护。

放在一起 cmdvbs 剧本创意 代码来自 从 C# Windows 窗体启动系统屏幕保护程序的答案 我想出了以下几点:

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框架, ,将上面的代码复制并粘贴到 lock.cs, ,然后运行:

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

将创建的 lock.exe 在你的路径中,之后输入 lock 应启用配置的屏幕保护程序并锁定您的工作站。

我有 Windows 7。我放置了以下行:

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

在批处理 (.bat) 文件中,将其放置在适当的目录中,并使用所需的快捷键创建指向该文件的快捷方式。在此行中,\ExtraPath 是屏幕保护程序所在的 win 目录(通常是 \system32)下的附加路径,ScreenSaverName.scr 是所需屏幕保护程序本身的名称。

它工作完美。

现在我可以按快捷键来运行屏幕保护程序并锁定电脑。

真的非常感谢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top