我的电脑上连接了2台显示器(一台是电视),运行着Windows 7,我想用一个脚本在它们之间切换。我知道 "displaywitch.exe "及其参数(如克隆、内部等)。然而,我需要脚本在电脑锁定时工作。
当系统锁定时,按Windows+P可以正常工作,这也会调用displaywitch。然而,在电脑被锁定时,使用 "displaywitch.exe clone "运行批处理脚本无法工作。
要执行该脚本,我想使用 远程启动应用程序 在我的手机上。远程启动器在我的电脑被锁定时,用脚本关机就能正常工作,所以一般来说,它能够在锁定的机器上执行脚本。
有没有其他的方法,可以在系统锁定的情况下在我的显示器之间切换?
试试这个。
schtasks /Run /S system /U username /P password /TN taskname
以触发工作只要你的windows正在运行并有网络连接,无论你的windows处于哪种状态,都应该执行所需的命令。
这不是一个简单的任务。
displayswitch内部要做的是调用 SetDisplayConfig 这个函数必须从一个生活在交互式控制台的进程中调用,否则将返回ERROR_ACCESS_DENIED。
有人可能会认为,他可以使用-i选项从psexec中调用displaywitch,并指明当前活动的用户会话;通常是powershell
(ps winlogon).si
返回所有交互式用户会话,但从psexec启动时,displaywitch.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 所需的授权(我的是机器管理员,所以它可以工作,但我不知道到底需要哪种授权,你可以创建一个功能性的机器管理员,然后通过-u -p 参数调用 psexec。