去年年中写了个自动打新可转债的脚本,大家伙反响不错,隔三差五就能多几颗星星,还有不少人在评论跟issue里与我互动。半年过去,这段脚本大概又给我带来了几百块的收入,尽管证监会收紧了创业板权限,打新的人越来越多导致中签率逐渐走低,但蚊子腿肉再小也算肉嘛!
在云端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。
19 comments
断开后分辨率立马变了,这个怎么办?
感觉在我的使用场景下这并不是一个问题,您能详述分辨率变化给你带来的影响吗?
十分感谢楼主的分享,问题得到解决。使用‘另存为bat文件,每次断开RDP时不要关闭RDP客户端,而通过右键→以管理员身份运行来手动断开RDP。’这个方法.
楼主不应该将邮箱置为必填!!
填写邮箱可以及时收到博主的回复哈~
断开以后屏幕不休眠,但是分辨率会不会变呢?
讲道理是会变的,所以尽量采用句柄而不是分辨率的方式获取按钮
楼主,发现以管理员运行后断开,之后程序是正常运行,在用这台电脑去远程连接 就会连不上啊OωO
是我网不好
解决了就好哈哈
请问需要修改什么吗?bat运行无效果
确认使用管理员权限执行了嘛?
大佬,请教下,我是远程连着,不断开,执行脚本就提示:There is no active desktop required for moving mouse cursor!大概那方面的问题
连着不断开不会出现这种问题的,建议排查pywin32执行情况,或在本地测试
还有再请教您个问题,我使用您文中提供的脚本可以维持会话,执行完这个会话会维持多久, 只要不关机不断网,不远程登录是不是就一直能维护会话不断
是的
连着不行,原来是win10 server的一个系统,换成win2008就回到和您本文一样了,连着可以,断掉不行;还有我发现在该系统中安装一个虚拟机,将程序部署在虚拟机中,就算断掉也是可以的
当然,虚拟机可以绕过这个问题,但是对配置的要求也随之提升了
感谢楼主解决了,Server断开连接并且活跃的难题!!!
不客气