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

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

以下是否符合您的要求?

start logon.scr /s 

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

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

请注意,我从屏保示例命令行选项中调用带/s.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窗体启动系统屏幕保护程序的答案只启动屏幕保护程序,它不会在简历上的密码保护。

将C#Windows窗体的启动系统屏幕保护程序的答案中的代码放在一起的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应该使用配置的屏幕保护程序并锁定你的工作站。

我有Windows 7.我放置的行:

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

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

它完美的作品。

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

非常感谢。

您可以尝试Powershell脚本启动一个随机屏幕保护程序 。

 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时间让屏幕保护程序“永久”之前的时间。

看起来很奇怪,无论我看到哪里都没有答案,这在O / S本身反映。 所有这些黑客只是做的,是运行屏幕保护程序,然后停止(中断)程序运行锁定工作站/桌面后,事实。 无缝的努力来调用一个屏幕保护程序的密码保护,当停止/中断密码需要回到工作站是我所追求的。 似乎没有这么高的顺序呢? 我将继续寻找我能找到的任何一种编程语言解决方案,但显然需要由应用程序级别的其他应用程序(包括脚本技术)调用,而不是在O / S级别的O / S中。