如何关闭远程桌面后仍处于可交互状态

标签(空格分隔): windows 服务器 远程桌面 模拟鼠标
[转载自]

  1. http://blog.chenxu.me/post/detail?id=68b1ced9-65b4-4f71-8325-582c70cd996b
  2. http://blog.csdn.net/sogouauto/article/details/43269045
  3. http://ju.outofmemory.cn/entry/181730

  默认情况下,当用户没有在 Windows 上执行任何输入(没有鼠标键盘等的输入)并保持一定时间后,Windows 会自动切换到锁屏模式(或屏保模式),甚至待机。
  一般情况下,这样不会有任何问题,而且也是推荐的设置(出于安全和节能的角度)。但是,如果这台电脑被用于进行一些自动化的测试,尤其是涉及到 UI 的交互操作时(比如,测试过程中用脚本操控鼠标来模拟点击一个按钮),这将会是个很大的问题:鼠标键盘失效了!UI 自动化做不下去了!
  解决这个办法的方案很简单:设置 Windows 的电源模式,让 Windows 不要自动锁屏和待机,同时去掉屏保。

问题进阶

  UI 自动化测试期间,执行测试的电脑几乎不能继续被他人使用(因为鼠标、键盘等输入设备此时需要响应自动化测试脚本)。为了不影响电脑使用,一般会搭一个虚拟机,然后远程连接到虚拟机里,在虚拟机里执行 UI 自动化测试。
  但是,万一你不小心把某个远程桌面“最小化”了...Oops,你的自动化测试就挂了。既然连最小化都会失败,相信你已经猜到直接关闭远程桌面的后果了。
  为什么最小化或关闭远程连接的桌面会导致自动化测试失败呢?

概念介绍

  要解释清楚这个原因,首先必须要了解3个在Windows 操作系统中的经常用到,却很陌生的对象:Session、Windows Station 和 Desktop。

Session

  用户会话,每个登录操作系统的用户都会分配一个唯一的登录会话,用于标识该用户。操作系统(Vista 及以上)保留0号会话给一些系统服务及用户态的驱动使用,第1个登录系统的用户使用的 Session ID 为1,该用户执行的所有应用程序都在 Session 1 下执行。
  我们可以打开任务管理器,切换到进程列表,然后在菜单->视图->选择列中,勾选 Session ID 列。

  如果有其它的用户登录到系统,就会看到 Session ID 大于1的情况,比如远程桌面。

Windows Station

  Station 可以理解为工作站,它被认为是桌面和进程的安全边界。因此,每一个 session 都会包含多个 station,而每一个 Station 又包含1个或多个 Desktop。
  但是,多个 Station 中,只有名字叫 Winsta0 的 Station 才是交互式的 station,也就是说只有它才能有 UI 并接受用户输入。所以每个 Session 都有一个叫 Winsta0 的用户进行交互。

Desktop

  这里的 Desktop 并不是我们进入系统后所看到的那个蓝底的桌面(,我们看到的这个桌面,实际上只是一个窗口)。而是逻辑上的一个显示对象,它包含可显示的 GUI 对象(比如窗口、菜单、钩子等)。一般情况下,WinSta0 包含至少三个Desktop:登录(WinLogon)、屏保(ScreenSaver)和默认(Default,能看到所有应用程序的地方)。
  同一时刻只能有一个Desktop处于激活状态(而能激活的 Desktop 只能属于 Winsta0)。用户还没登录的时候,登录桌面处于激活状态。登录之后,默认的Desktop处于激活状态。当达到系统电源设置的某个点的时候,系统切换到屏保,此时屏保Desktop处于激活状态。当用户按下 Ctrl + Alt + Delete 时,切换到登录Desktop,此时登录Desktop处于激活状态。
  激活状态的Desktop才能接收用户输入,钩子才能获取其中的某个窗口消息。
  如果你已经体验过 Win10,那应该就会知道 Win10 提供了很方便的创建多个Desktop的方式。

关于上述三个对象更多的解释,请大家查看下面的参考链接。

Desktop
Window Stations
Why do UI macros fail when I disconnect or minimize the Remote Desktop/Terminal Services session?
Running Tests via Remote Desktop - Overview
Keep an Active Session Running on the Execution Server

原 因

  了解了上述三个对象后,就可以比较容易的解释出现问题的原因了。

最小化
  最小化会让远程桌面的会话切换到无图形界面的模式,这自然就无法继续接收鼠标、键盘的指令了。

关闭远程桌面
  关闭远程桌面会让系统切换到登录Desktop的界面,而在该Desktop上并没有我们打开的其它窗口,因此会导致 UI 自动化测试失败。

解决办法

最小化 (注意,正在测试...并未成功,有另一篇文章提到修改方法应为 从机器A通过远程桌面连接机器B,则需要在机器A上修改注册表)

通过设置注册表的值可以阻止切换到无图形界面。

32位系统
  找到 HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client,创建一个 DWORD 类型的值,名字叫做 RemoteDesktop_SuppressWhenMinimized,然后设置值为 2。

64位系统
  找到 HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client,然后和 32 位一样创建一个DWORD 类型的值,名字叫做 RemoteDesktop_SuppressWhenMinimized,并设置值为 2。

  上面的改动会应用于整个机器,如果只想应用于当前的用户,把 LOCAL 替换成 USER。

关闭远程桌面

方案一:
  在远程桌面(被连接到的电脑)中先执行 query session 来查看当前登录到的 session,(远程桌面的 sessionName 都以 rdp-tcp 开头)。

  然后用管理员用户打开命令行工具,并执行 "tscon rdp-tcp#0 /dest:console",其中 rdp-tcp#0 为该该命令会关闭远程桌面的连接,然后把连接返回给远程的那台电脑(绕开登录过程)。这里的 console 只是一个 session 的名字,而这个名字的意思并非是 C# 中 “控制台” 的意思,而是指带有输入输出设备的机器,一般直接登录电脑的会话就是 console。
  假设电脑A执行 mstsc 连接到电脑B(,连接成功后,电脑B黑屏),此时在电脑B上执行上述命令后(替换对应的session名字),电脑A中的远程连接窗口会被关闭,并提示远程连接会话已经终止。电脑B(假设运行在另一台物理机上)会恢复到已经登录的状态,如果需要重新让电脑B恢复锁屏状态,可以在电脑B上执行如下命令:

rundll32.exe user32.dll,LockWorkStation

方案二:
  假设用于跑 UI 自动化的机器是虚拟机A,现在再使用另一台虚拟机B作为中转。本机先连接到虚拟机B,然后再从虚拟机B连接到虚拟机A,最后断开虚拟机B。

方案三:(引自 UI自动化中关闭远程桌面连接,鼠标键盘失效的解决方案)

  远程桌面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’,双击文件‘Close_RDP.bat’关闭远程链接。

方案四:(引自 [UI测试]远程桌面连接的困扰)

  并没有找到例子,有时间我会写上例子。
  使用C#开源远程桌面连接软件Multi RDP Client .NET,当远程连接上后,最小化的情况下,鼠标键盘模拟仍然是生效的。另外由于是开源软件,所以我们可以在源码基础上,扩展自己的功能,比如说在自动化测试过程中,接收请求,自动远程连接相应机器,来满足自动化测试的需求。另外,使用第三方远程连接软件,我们可以将软件的数据保存到远程的数据库中,这样,我们只需要有软件,不需要知道机器密码就可以使用执行机器了。

转载于:https://www.cnblogs.com/bangejingting/p/6846480.html

如何关闭远程桌面后仍处于可交互状态相关推荐

  1. 最小化及关闭远程桌面后键盘与鼠标仍处于可交互状态

    默认情况下,当用户没有在 Windows 上执行任何输入(没有鼠标键盘等的输入)并保持一定时间后,Windows 会自动切换到锁屏模式(或屏保模式),甚至待机.        一般情况下,这样不会有任 ...

  2. 服务器关闭远程桌面连接后,鼠标、键盘、剪切板等失效解决方法

    目录 根本原因 解决方法 退出远程桌面程序 exe文件下载 根本原因 关闭远程桌面会让系统切换到登录Desktop的界面,而在登录Desktop的界面上没有我们打开的其他窗口,因此会导致鼠标.键盘.剪 ...

  3. 计算机关闭远程桌面,windows 远程桌面关闭 运行程序退出

    远程桌面到2003,运行一个程序,然后关闭远程桌面,一段时间后所运行的程序也被关闭了. ( 最近在弄服务器,远程桌面一关,项目服务也跟着一起关了.) 解决: 开始-->运行-->gpedi ...

  4. java 程序通过快捷键退出_知道怎么用快捷键关闭远程桌面吗?

    关闭远程桌面快捷键可以用alt+F4来一键关闭,顺便把其他在远程上使用的快捷键也普及一下. Alt+Page Up 从左到右切换程序. Alt+Page Down 从右到左切换程序. Alt+Inse ...

  5. 计算机关闭远程桌面,小编教你win10关闭远程桌面连接的详尽处理门径

    win10系统从发布到现在已经更新了数不清的版本了,每次更新都会解决一些问题,但还是难免会有win10关闭远程桌面连接的问题.要是你是一名才接触win10系统的用户,可能处理win10关闭远程桌面连接 ...

  6. deepin开启远程桌面后鼠标右键不能复制

    deepin开启远程桌面后鼠标右键不能复制 ssh xshell 连接在vim中无法用 ctrl+insert 或者鼠标右键 进行复制黏贴vi ~/.vimrc 或者 vi /etc/vim/vimr ...

  7. dev项目属性按钮是灰色_如何当按钮处于各种交互状态时具有不同样式的按钮?...

    Axure RP 9 for Mac是一款交互式原型设计神器,使用axure rp9以最佳的方式展示您的作品,优化现代浏览器并为现代工作流程设计.同时确保您的解决方案正确完整地构建.在本篇文章中,我们 ...

  8. 计算机关闭远程桌面 共享功能,win7旗舰版系统优化禁止用远程桌面共享的解决方法...

    ‍ ‍windows7系统优化的时候,禁用远程桌面共享功能,一旦被禁用了用户就不能设置它或使用它来远程控制其计算机,遇上这种问题要怎么处理,那么接下来就一起看看win7旗舰版系统优化禁止用远程桌面共享 ...

  9. 1药网发布Q4财报:仍处于持续亏损状态,还要推动子公司上市

    3月18日,纳斯达克上市公司1药网(NASDAQ:YI)发布了截至截至2020年12月31日2020年度第四季度及全年业绩.财报显示,1药网仍处于亏损状态. 具体来看,1药网2020年第四季度的收入为 ...

最新文章

  1. 合并两个有序数组(重新开始)
  2. wxWidgets:wxWeakRef< T >类模板的用法
  3. awk按分隔符的不同取出不同的列
  4. 面试官系统精讲Java源码及大厂真题 - 28 Future、ExecutorService 源码解析
  5. 计算机视觉论文-2021-06-29
  6. 售价超16万,全球仅限8台!iPhone 13 Pro冬奥会定制版上架,18K黄金打造
  7. ArcGIS Pro快速汉化方法-汉化GP
  8. 基于kubeflow+LSTM完成时间序列数据预测
  9. Teigha 40010 保存设置Wipeout时的边界显示问题
  10. 硬件模拟大师_用机器人做咖啡,“智咖大师”这样升级新零售
  11. EasyBoot教程一:制作WIN7原版多重启动盘方法
  12. DJFocus是个什么东东
  13. Python基础视频教程
  14. 2023二建建筑施工备考第二天Day04
  15. [刷题]leetcode\704_二分查找
  16. Ubuntu16.04安装ROS Kinetic详细步骤
  17. FISCO-BCOS应用实战:区块链实战应用开发分享
  18. abs 三种功能及代码详解 matlab函数
  19. Scheduling restart of crashed service
  20. 英语作文计算机80词九年级,10篇初中优秀英语作文80词左右

热门文章

  1. Python线程同步机制
  2. 软件_crontab任务配置失败原因总结和技巧
  3. vnpy学习10_常见坑
  4. 不写代码不用Excel,销售总监的数据分析,10分钟你就可以学会
  5. C语言需要什么程序翻译,c语言怎么翻译? 程序怎么运行?
  6. python初级第三库(人工智能,web解析,人机交互)
  7. html+input改变图标,JS Input里添加小图标的两种方法
  8. mysql innodb 间隙锁_Mysql innodb 间隙锁
  9. python狗屁不通文章生成器_狗屁不通文章生成器,GitHub火爆的万字啰嗦文章瞬间生成...
  10. string中内容的访问