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

时间:2009-09-15 23:11:14

标签: windows command screensaver

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

5 个答案:

答案 0 :(得分:10)

以下是否符合您的要求?

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只启动屏幕保护程序,它也不会在恢复时保护密码。

答案 1 :(得分:5)

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

答案 2 :(得分:3)

我有Windows 7.我放了一行:

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

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

完美无缺。

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

非常感谢。

答案 3 :(得分:2)

答案 4 :(得分: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是在给屏幕保护程序“永久性”之前提供ppl时间。