RDP远程关闭后导致RPA操作失效的解决方案

问题原因分析:

  • 因为通过 mstsc 启动远程桌面连接时,被连接的Windows会启动一个会话(Session)。此时你对远程桌面窗口里面的所有操作(鼠标,键盘)将会‘翻译’成TCP包传输过去,被连接的Windows接收到这些包之后,‘还原’命令并且在当前的活动会话上面执行。而当你断开连接时(点X关闭),会话变成断开状态,Windows会自动关闭会话(这里这样说是不准确的,事实上会话还是在的,只是状态变成断开的),也就导致了所有基于GUI的操作‘失效’了。

  • 当最小化远程桌面时,Windows 为了节约网络带宽传输,会暂时‘关闭会话’,导致你的模拟操作程序失效。

最初级的两个解决方案:

  1. 到远程电脑上,登录,然后关显示器,走人,记住不要远程登录它;

  2. 远程连接,永远不要关,也不能最小化。

当然也有更好的解决方案,可以实现远程桌面的窗口最小化或是关闭而不影响模拟键盘鼠标的脚本。

一、RDP窗口最小化失效的解决方案:

修改注册表项 (注:从机器A通过远程桌面连接机器B,则需要在机器A上修改注册表)

32位机器:

  1. 找到HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server ClientHKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client

  2. 创建一个 DWORD 类型的值,名字叫做RemoteDesktop_SuppressWhenMinimized,然后设置值为 2。

64位机器:

  1. 找到HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client,或HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Terminal Server Client

  2. 创建一个 DWORD 类型的值,名字叫做RemoteDesktop_SuppressWhenMinimized,然后设置值为 2。

二、断开RDP远程失效的解决方案:

通过 mstsc 进行远程登录时, 在远程机中新建文本文档,写入内容

@%windir%\System32\tscon.exe 0 /dest:console
@%windir%\System32\tscon.exe 1 /dest:console
@%windir%\System32\tscon.exe 2 /dest:console

将文本文档重新命名为Close_RDP.bat,双击文件CloseRDP.bat关闭远程机,在远控关闭后带有 SendKey 的脚本(RPA)可以正常运行。