目录
根本原因
关闭远程桌面会让系统切换到登录Desktop的界面,而在登录Desktop的界面上没有我们打开的其他窗口,因此会导致鼠标、键盘、剪切板等失效,相当于被锁屏了,像pyautogui等图像匹配相关功能此时都会失效。
解决方法
在cmd运行代码:@%windir%\System32\tscon.exe 0 /dest:console,该命令会关闭远程桌面的连接,然后把连接返回给远程的那台电脑(绕开登录过程),其中0为远程连接时被分配的Session ID,一般Session ID不会大于10,除非有很多账户在你这台服务器上。cmd运行这段代码后就会出现如图:
关闭或确定即可,之后服务器的鼠标、键盘、剪切板等会正常工作。
但是每次执行cmd都很麻烦,不如让python来执行这段cmd命令,之后打包成exe,一键运行即可,这样就方便了许多。
退出远程桌面程序
python核心代码如下(我这里设置的是关闭0到9的Session ID):
然后再扩展一下:
import subprocess
import threading
import time
from tkinter import Tk, StringVar, Entry, Label, Button, DISABLED
class CloseRDP:
def __init__(self):
"""初始化一个界面"""
self.window = Tk()
self.window.title('退出远程桌面')
self.window.geometry('300x150')
self.window.resizable(False, False) # 规定窗口不可缩放
self.second = 0
self.text = StringVar()
self.text.set('2')
label1 = Label(self.window, text="定时:", font=('宋体', 25))
self.entry = Entry(self.window, width=10, textvariable=self.text, font=('宋体', 20), fg='blue', justify='center')
label2 = Label(self.window, text="秒", font=('宋体', 25))
self.button = Button(self.window, width=13, height=3, text='开始', font=('黑体', 15), command=self.run)
label1.grid(row=0, column=0)
self.entry.grid(row=0, column=1)
label2.grid(row=0, column=2)
self.button.grid(row=1, column=1)
self.window.mainloop()
def run(self):
get_input = self.entry.get()
if get_input and get_input.isdigit(): # 数据检测
self.button["text"] = "关闭软件取消"
self.button['state'] = DISABLED
self.entry.configure(state="readonly")
t = threading.Thread(target=self.count_down, args=(get_input,))
t.setDaemon(True) # 守护线程,退出界面后回收线程
t.start()
def count_down(self, get_input): # 定时函数
self.second = int(get_input)
while self.second:
time.sleep(1)
self.second -= 1
self.window.after(0, self.update)
self.main()
def main(self): # 退出远程桌面
for i in range(10):
cmd = r'@%windir%\System32\tscon.exe {} /dest:console'.format(str(i))
subprocess.Popen(cmd, shell=True)
self.window.destroy() # 退出界面
def update(self):
self.text.set(str(self.second)) # 更新倒计时
if __name__ == '__main__':
CloseRDP()
附带了自定义定时退出功能,退出远程桌面后它也会自动关闭,效果图:
exe文件下载
最后打包成exe,大功告成!注意windows可能会禁止它下载或运行,点击信任即可!