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

发布于 2024-08-05 01:21:28 字数 1459 浏览 6 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

鯉魚旗 2024-08-12 01:21:28

以下是否满足您的要求?

start logon.scr /s

只要 .scr 位于 PATH 上,上述命令就应该有效。

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

注意我想到了用 屏幕保护程序示例命令行选项

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

Does the following meet your requirements?

start logon.scr /s

As long as the .scr is on the PATH the above command should work.

EDIT: I don't know if Windows 7 comes with logon.scr, make sure you're testing it with a .scr that is actually installed in Windows 7.

Note that I got the idea of just invoking the .scr with /s from Screensaver Sample Command Line Options:

When Windows runs your screensaver, it
launches it with one of three command
line options:

  • /s – Start the screensaver in full-screen mode.
  • /c – Show the configuration settings dialog box.
  • /p #### – Display a preview of the screensaver using the specified
    window handle.

EDIT 2:

I did some additional searching and found that you could create lock.cmd:

@start /wait logon.scr /s & rundll32 user32.dll,LockWorkStation

Or 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"

Neither of these answers is perfect, both reveal a flicker of the desktop after the screen saver is disabled and just prior to the workstation being locked.

It may not be possible to reproduce the system behaviour of starting the screen saver and password protecting on resume. Even the answer to Launch System Screensaver from C# Windows Form only starts the screen saver, it does not password protect on resume.

寻梦旅人 2024-08-12 01:21:28

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();
    }
}

要构建它,< a href="http://smallestdotnet.com/" rel="nofollow noreferrer">安装.NET Framework,将上述代码复制粘贴到lock.cs中,然后运行:

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

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

Putting together the cmd and vbs script ideas with the code from the answer to Launch System Screensaver from C# Windows Form I came up with the following:

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();
    }
}

To build it, install the .NET Framework, copy and paste the above code into lock.cs, then run:

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

Put the created lock.exe in your path, after that, typing lock should engage the configured screen saver and lock your workstation.

魄砕の薆 2024-08-12 01:21:28
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 秒是为了让人们在使屏幕保护程序“永久”之前有时间。

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();
    }
}

This works - only downside is that u cant interact with pc for something like 7 sec, but i guess its 7's to give ppl time before making screensaver 'permanent'.

初懵 2024-08-12 01:21:28

我有 Windows 7。我将行:放在

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

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

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

它工作完美。

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

I have Windows 7. I placed the line:

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

in a batch (.bat) file, place it in a appropriate dir, and created a shortcut pointing to this, with the desired shortcut key.

In this line, \ExtraPath is the additional path under your win dir (usually this is \system32) where the screen savers are located, and ScreenSaverName.scr is the name of the desired screen saver itself.

It works perfectly.

Now I can press the shortcut keys to run the screen saver and lock the pc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文