10

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

4

5 回答 5

10

以下是否符合您的要求?

start logon.scr /s

只要.scr在 PATH 上,上述命令就可以工作。

编辑:我不知道 Windows 7 是否附带logon.scr,请确保您使用的.scr是实际安装在 Windows 7 中的测试它。

请注意,我得到了从Screensaver Sample Command Line Options.scr调用with的想法:/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 窗体启动系统屏幕保护程序的答案也只会启动屏幕保护程序,它不会在恢复时进行密码保护。

于 2009-09-16T15:05:58.033 回答
7

将脚本想法来自 C# Windows Form 的 Launch System Screensaver 答案的代码放在一起cmdvbs我想出了以下内容:

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应该使用配置的屏幕保护程序并锁定您的工作站。

于 2009-09-17T16:52:38.950 回答
3

我有 Windows 7。我放置了这条线:

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

在批处理(.bat)文件中,将其放在适当的目录中,并使用所需的快捷键创建指向该目录的快捷方式。

在这一行中,\ExtraPath是屏幕保护程序所在的 win 目录(通常是\system32)下的附加路径,ScreenSaverName.scr 是所需屏幕保护程序本身的名称。

它完美地工作。

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

于 2010-11-18T16:26:48.830 回答
3
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();
    }
}

这行得通 - 唯一的缺点是你不能与 pc 交互 7 秒,但我想它的 7 让人们在制作屏幕保护程序“永久”之前有时间。

于 2009-09-18T00:10:59.423 回答
2

您可以尝试Powershell Script To Start A Random Screen Saver

于 2009-09-15T23:24:26.753 回答