Windows服务器 断开远程桌面RDP后保持桌面活跃的方法

在云端Windows服务器上使用脚本时,没有正确配置可能导致pywinauto提示“There is no active desktop required for moving cursors”,错误原因很简单:没有外界显示器的云端在断开原生远程桌面RDP后,桌面就会自动休眠,导致所有与窗口自动化相关的工具没有办法获取到窗口句柄,当然也包括pywinauto。解决办法无非有这几种:

  • 安装模拟显示器驱动,假装接入了显示器,诱骗系统不进入桌面休眠状态。不过找了一圈,好用的诱骗驱动都挂在淘宝上卖起来了,离谱离谱!
  • 使用VNC Server或TeamViewer等其他远控方式。这是我本来的方案,稳定工作了半年,但某次我使用远程桌面连接并断开过后,·VNC的方法就不再管用了,实在让人摸不着头脑唔。再说了,VNC Server是收费软件,大费周折找盗版好像也不算很好的解决方法。

好在翻了一圈后有了新的解决方法(来自SmartBear):如果通过%windir%\System32\tscon.exe RDP-Tcp#*NNN* /dest:console手动断开RDP的话,原桌面也不会休眠,其中NNN是当前远程桌面的session。

可用下面一段脚本自动完成:

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
  %windir%\System32\tscon.exe %%s /dest:console
)

另存为bat文件,每次断开RDP时不要关闭RDP客户端,而通过右键→以管理员身份运行来手动断开RDP。

2
0