如何通过代码(在cmd中)打开屏幕保护程序(Windows 7)?[关闭]
-
07-07-2019 - |
题
如何通过代码(在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 窗体启动系统屏幕保护程序的答案 仅启动屏幕保护程序,在恢复时不提供密码保护。
放在一起 这 cmd
和 vbs
剧本创意 代码来自 从 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 是所需屏幕保护程序本身的名称。
它工作完美。
现在我可以按快捷键来运行屏幕保护程序并锁定电脑。
真的非常感谢。
你可以尝试 用于启动随机屏幕保护程序的 Powershell 脚本.