远程登陆最小化或关闭 模拟键盘操作失效

问题原因分析:

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

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

最初级的两个解决方案:

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

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

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

1.窗口最小化失效的解决方案:

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

32位机器:

HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized或

HKEY_LOCAL_MACHINESoftwareMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized设置数据类型DWord,值为2

64位机器路径不同:

HKEY_CURRENT_USERSoftwareWow6432NodeMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized或HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized设置数据类型DWord,值为2

2.关机失效的解决方案:

远程桌面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’,双击文件‘EnableCloseRDP.bat’关闭虚拟机,在虚拟机关闭后带有SendKey的脚本可以正常运行。

原文地址:https://www.cnblogs.com/dnjslt/p/10047912.html

时间: 2024-10-07 01:15:40

远程登陆最小化或关闭 模拟键盘操作失效的相关文章

Outlook 最小化不关闭图解

  Outlook 最小化不关闭图解 设置Outlook 最小化而不是真正的关闭 (1)      找到右下角通知区域右键 (2)找到Outlook 图标右键,去掉:最小化时隐藏 设置Outlook 最小化而不是关闭,完成

自定义窗体的最大化,最小化,关闭功能

namespace 自定义窗体的最大化_最小化和关闭按钮 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary> /// <param name="disp

C# 模拟键盘操作--SendKey(),SendKeys()

模拟键盘输入就是使用以下2个语法实现的.SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键输入 先了解一下2个语法的用法吧! 稍后贴出代码看看大家能不能看懂哦/... (1)每个按键由一个或多个字符表示.为了指定单一键盘字符,必须按字符本身的键.例如,为了表示字母 A,可以用 "A" 作为 string.为了表示多个字符,就必须在字符后面直接加上另一个字符.例如,要表示 A.B

C# 模拟键盘操作SendKey(),SendKeys()

模拟键盘输入就是使用以下2个语法实现的. SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键输入 先了解一下2个语法的用法吧! 稍后贴出代码看看大家能不能看懂哦/... (1)每个按键由一个或多个字符表示.为了指定单一键盘字符,必须按字符本身的键.例如,为了表示字母 A,可以用 "A" 作为 string.为了表示多个字符,就必须在字符后面直接加上另一个字符.例如,要表示 A.B

【java+selenium3】模拟键盘操作 (十二)

一.键盘操作 用代码来模拟键盘的Enter或一系列的组合键,前面使用sendkeys()方法模拟键盘的输入,除此之外还可以模拟键盘组合键输入如下: 整理一些比较常用的键盘操作如下: sendKeys(Keys.BACK_SPACE);  //删除键--BackspacesendKeys(Keys.SPACE);   //空格键 SpacesendKeys(Keys.TAB);   //制表键 TabsendKeys(Keys.ESCAPE);   //回退键 ESCsendKeys(Keys.E

NSIS隐藏窗体标题栏自带的button(最大化,最小化,关闭X)

这个问题实在八月份逛csdn论坛的时候偶然遇到的,当时比較好奇楼主为啥要隐藏关闭button.就顺口问了下,结果楼主已经弃楼.未给出原因,猜着可能是为了做自己定义页面美化,无法改变按纽外观之类的,后来琢磨了下,认为改动窗体风格比較简单.这里使用的是GetWindowLong与 SetWindowLong两个API. Function onGUIInit System::Call 'user32::GetWindowLong(i$hwndparent,i -16)i.r0' intop $1 0x

NSIS隐藏窗口标题栏自带的按钮(最大化,最小化,关闭X)

这个问题实在八月份逛csdn论坛的时候偶然遇到的,当时比较好奇楼主为啥要隐藏关闭按钮,就顺口问了下,结果楼主已经弃楼,未给出原因,猜着可能是为了做自定义页面美化,无法改变按纽外观之类的,后来琢磨了下,觉得修改窗口风格比较简单,这里使用的是GetWindowLong与 SetWindowLong两个API. Function onGUIInit System::Call 'user32::GetWindowLong(i $hwndparent,i -16)i.r0' intop $1 0x8000

java+selenium+new——模拟键盘操作——复制、粘贴——action类

package rjcs; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; public class a { public static voi

Winform 拦截最小化、最大化、关闭事件【整理】

1 const int WM_SYSCOMMAND = 0x112; 2 //窗体关闭消息 3 const int SC_CLOSE = 0xf060; 4 //窗体最小化消息 5 const int SC_MINIMIZE = 0xf020; 6 //窗体最大化消息 7 const int SC_MAXIMIZE = 0xf030; 8 //窗体还原消息 9 const int SC_NOMAL = 0xf120; 10 //窗体还原消息 11 const int SC_RESTORE = 6