使用脚本在锁定的PC上切换显示

时间:2014-09-01 18:47:01

标签: windows batch-file batch-processing remote-access

我有两台显示器连接到我的电脑(一台是我的电视),运行Windows 7,我想用脚本在它们之间切换。我知道“displayswitch.exe”及其参数(如/ clone,/ internal等)。但是,我需要脚本在PC被锁定时工作。

按下Windows + P可以正常工作,同时系统被锁定,这也会调用displaywitch。但是,当PC被锁定时,运行带有“displayswitch.exe / clone”的批处理脚本不起作用。

要执行脚本,我想在手机上使用Remote Launcher Application。远程启动器可以很好地使用脚本来锁定我的PC,因此它通常能够在锁定的机器上执行脚本。

还有其他方法,在系统锁定时切换我的显示器吗?

2 个答案:

答案 0 :(得分:1)

这不是一件简单的任务。

displayswitch内部执行的操作是调用SetDisplayConfig函数。必须从位于交互式控制台中的进程中调用此函数,否则它将返回ERROR_ACCESS_DENIED

有人可能认为他可以使用-i选项并指示当前活动的用户会话从psexec调用displayswitch;通常是powershell

(ps winlogon).si

返回所有交互式用户会话 但从psexec启动后,displayswitch.exe仍然无法正常工作。

我想是因为在任何情况下命令行应用程序都不需要“图形”基础结构来运行,并且可能在psexec中进行了一些内部优化以保存以创建适当的图形环境(至少它不需要在我的机器上工作,使用-x选项也没有运气)

您可以做的是编写一个非常简单的Windows窗体程序,它甚至不需要创建实际的窗体,它可以简单地调用SetDisplayConfig并消亡。但是,作为Windows窗体应用程序可以神奇地解决问题。

这样,您可以创建一个脚本来查找当前活动的交互式控制台ID,然后像这样使用psexec(假定1是交互式会话的ID)

psexec -accepteula -nobanner -i 1  C:\path-to-your-exe\your-exe.exe 

我的配置文件中加载了一个Powershell模块,我可以从ssh或任何远程连接中调用它,即使我的会话被锁定,甚至根本没有用户会话登录,它都可以切换我的显示。

显然,运行脚本的用户必须具有运行psexec -i所需的许可(我是机器管理员,所以它可以工作,但是我不知道需要哪个确切的许可,您可以创建一个功能正常的机器管理员,然后调用psexec并通过-u -p参数传递这些凭据)

答案 1 :(得分:0)

试试这个:

  • 在Windows调度程序中创建一个执行所需命令的作业(linke" displayswitch.exe / clone")
  • 设置具有执行此命令权限的用户并将密码保存在新作业中
  • 不要为作业设置触发器,但启用选项以手动启动它
  • 使用schtasks /Run /S system /U username /P password /TN taskname来触发作业

这应该执行所需的命令,无论你的Windows处于什么状态,只要它正在运行并具有网络连接。