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

Posted

技术标签:

【中文标题】如何通过代码(在cmd中)打开屏幕保护程序(Windows 7)? [关闭]【英文标题】:How to turn screensaver on (windows 7) by a code (in cmd)? [closed] 【发布时间】:2010-11-28 15:25:59 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我有 Windows 7。我放置了一行:

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

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

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

效果很好。

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

【讨论】:

【参考方案2】:
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 可以让人们在制作屏幕保护程序“永久”之前有时间。

【讨论】:

Grant Wagners 解决方案启动屏幕保护程序,然后锁定屏幕,但锁定会导致屏幕保护程序退出。此解决方案只是启动屏幕保护程序而没有明确锁定它,因此它需要几秒钟才能被 Windows 锁定。颠倒 Grant Wagners 解决方案的顺序(在 SendMessage 之前调用 LockWorkStation)解决了这两个问题,屏幕立即锁定,屏幕保护程序在它之后启动。【参考方案3】:

以下是否符合您的要求?

start logon.scr /s

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

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

请注意,我的想法是从Screensaver Sample Command Line Options 调用.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"

这些答案都不是完美的,在屏幕保护程序被禁用后和工作站被锁定之前都会显示桌面闪烁。

可能无法重现恢复时启动屏幕保护程序和密码保护的系统行为。即使the answer to Launch System Screensaver from C# Windows Form 只是启动屏幕保护程序,它在恢复时没有密码保护。

【讨论】:

我不记得它在旧 Windows 中是如何工作的,但在 7 中它只是显示屏幕保护程序的外观,但实际上并没有打开它(我的意思是当你与系统交互时当应该显示登录屏幕时,保护程序就会消失) @Grant,您介意将“编辑 3”复制到单独的答案中吗?我想投票,但投票的目的是让正确的答案在最上面,人们不必筛选早期的尝试。 :-) @system:C# 解决方案现在是一个单独的答案。我保留了这个答案,以防cmdvbs 解决方案对于其他提出相同问题的人来说“足够好”。【参考方案4】:

将the cmd and vbs script ideas 与the answer to Launch System Screensaver from 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();
    

要构建它,install the .NET Framework,将上面的代码复制并粘贴到lock.cs,然后运行:

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

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

【讨论】:

太甜了!这在 XP、2003 和 2008 上非常适合我,我无法想象有什么会使其在 Vista 或 7 上失败(尽管我还没有在那里尝试过)。谢谢! @oO 注意:Windows 7 附带 .NET 3.5 SP1,因此您可以跳过安装步骤,如果您尝试这样做。 @system PAUSE 很好,确实如此 - 激活后有一个 blip(我猜是屏幕保护程序),然后你被重定向到登录屏幕。有一个修复它 - 我发布是作为一个答案【参考方案5】:

你可以试试Powershell Script To Start A Random Screen Saver。

【讨论】:

那意味着下载额外的软件——我不想要那个。 @oO.:Windows 7 上已经安装了 Powershell

以上是关于如何通过代码(在cmd中)打开屏幕保护程序(Windows 7)? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

怎么在win10系统下打开cmd?

如何运行cmd

win7系统下如何调出虚拟键盘

如何在当前文件夹打开cmd(基于win10)

如何在cmd里启动notepad++

如何打开DOS控制台