需求:编写Python脚本后台运行mstsc(RDP)并显示远程桌面
解决方案:后台启动RDP并自动加载远程桌面
我明白你想要的是完全后台启动RDP客户端,不展示启动过程的界面,最终直接显示远程桌面窗口的效果——pywinauto依赖键鼠模拟确实不是最优解,咱们可以利用Windows自带的命令行工具结合Python来实现,完全不需要模拟用户操作。
核心思路是:
- 先用
cmdkey工具预先存储RDP登录凭据,避免mstsc弹出登录窗口 - 用Python的
subprocess模块后台启动mstsc,指定远程主机参数,同时隐藏启动时的控制台/界面闪烁
下面是完整的Python脚本:
import subprocess import sys def start_background_rdp(remote_host, username, password): # 步骤1:用cmdkey存储RDP凭据,避免登录弹窗 cmdkey_command = f'cmdkey /add:{remote_host} /user:{username} /pass:{password}' try: # 执行cmdkey命令,隐藏控制台窗口 subprocess.run( cmdkey_command, shell=True, check=True, creationflags=subprocess.CREATE_NO_WINDOW ) print("凭据已成功存储") except subprocess.CalledProcessError as e: # 如果凭据已存在,cmdkey会返回错误码1,但不影响后续启动,这里可以忽略或提示 print(f"凭据可能已存在或存储失败: {e}") # 步骤2:后台启动mstsc,指定远程主机,最终显示远程桌面窗口 mstsc_command = f'mstsc /v:{remote_host}' # 可选:添加窗口大小参数,比如 /w:1920 /h:1080 或者 /f 全屏 # mstsc_command = f'mstsc /v:{remote_host} /f' try: # 启动mstsc,设置CREATE_NO_WINDOW避免控制台窗口,同时让mstsc正常显示主窗口 subprocess.Popen( mstsc_command, shell=True, creationflags=subprocess.CREATE_NO_WINDOW ) print("RDP已在后台启动,即将显示远程桌面") except Exception as e: print(f"启动RDP失败: {e}") sys.exit(1) if __name__ == "__main__": # 配置你的远程连接信息 REMOTE_HOST = "your-remote-pc-name-or-ip" USERNAME = "remote-username" PASSWORD = "remote-password" start_background_rdp(REMOTE_HOST, USERNAME, PASSWORD)
关键细节说明:
cmdkey工具:这是Windows自带的凭据管理工具,运行后会把RDP登录信息存储到系统凭据管理器中,后续mstsc连接时会自动读取,不会弹出登录窗口。subprocess.CREATE_NO_WINDOW:这个参数会让Python在执行命令时不显示控制台窗口,确保启动过程完全后台进行。- mstsc参数:
/v:指定远程主机地址,你可以根据需求添加其他参数,比如/f全屏模式,/w和/h指定窗口宽高,这些参数不会影响后台启动的特性。
注意事项:
- 脚本不需要管理员权限,普通用户权限就可以存储和使用RDP凭据。
- 如何清理存储的凭据?可以手动打开「凭据管理器」删除,或者执行命令:
cmdkey /delete:your-remote-pc-name-or-ip - 如果你的系统禁用了
cmdkey或者有组策略限制,可能需要调整系统设置,但大部分Windows环境都支持这个工具。
内容的提问来源于stack exchange,提问作者Tushar Sonkar
相关产品推荐
相关产品推荐

