【C#】UI自動(dòng)化中關(guān)閉遠(yuǎn)程桌面連接,鼠標(biāo)鍵盤失效的解決方案
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
問題原因分析:
因?yàn)橥ㄟ^mstsc啟動(dòng)遠(yuǎn)程桌面連接時(shí),被連接的Windows會(huì)啟動(dòng)一個(gè)會(huì)話(Session)。此時(shí)你對遠(yuǎn)程桌面窗口里面的所有操作(鼠標(biāo),鍵盤)將會(huì)‘翻譯’成TCP包傳輸過去,被連接的Windows接收到這些包之后,‘還原’命令并且在當(dāng)前的活動(dòng)會(huì)話上面執(zhí)行。而當(dāng)你斷開連接時(shí)(點(diǎn)X關(guān)閉),會(huì)話變成斷開狀態(tài),Windows會(huì)自動(dòng)關(guān)閉會(huì)話(這里這樣說是不準(zhǔn)確的,事實(shí)上會(huì)話還是在的,只是狀態(tài)變成斷開的),也就導(dǎo)致了所有基于GUI的操作‘失效’了。
當(dāng)最小化遠(yuǎn)程桌面時(shí),Windows為了節(jié)約網(wǎng)絡(luò)帶寬傳輸,會(huì)暫時(shí)“關(guān)閉會(huì)話”,導(dǎo)致你的模擬操作程序失效。
最初級(jí)的兩個(gè)解決方案:
1. 到遠(yuǎn)程電腦上,登錄,然后關(guān)顯示器,走人,記住不要遠(yuǎn)程登錄它;
2. 遠(yuǎn)程連接,永遠(yuǎn)不要關(guān),也不能最小化。
當(dāng)然我也有更好的解決方案,我的解決方案可以實(shí)現(xiàn)遠(yuǎn)程桌面的窗口最小化或是關(guān)閉而不影響模擬鍵盤鼠標(biāo)的腳本。
方案一:
在遠(yuǎn)程桌面(被連接到的電腦)中先執(zhí)行 query session 來查看當(dāng)前登錄到的 session,(遠(yuǎn)程桌面的 sessionName 都以 rdp-tcp 開頭):
然后用管理員用戶打開命令行工具,并執(zhí)行 "tscon rdp-tcp#0 /dest:console",其中 rdp-tcp#0 為該該命令會(huì)關(guān)閉遠(yuǎn)程桌面的連接,然后把連接返回給遠(yuǎn)程的那臺(tái)電腦(繞開登錄過程)。這里的 console 只是一個(gè) session 的名字,而這個(gè)名字的意思并非是 C# 中 “控制臺(tái)” 的意思,而是指帶有輸入輸出設(shè)備的機(jī)器,一般直接登錄電腦的會(huì)話就是 console。
假設(shè)電腦A執(zhí)行 mstsc 連接到電腦B(連接成功后,電腦B黑屏),此時(shí)在電腦B上執(zhí)行上述命令后(替換對應(yīng)的session名字),電腦A中的遠(yuǎn)程連接窗口會(huì)被關(guān)閉,并提示遠(yuǎn)程連接會(huì)話已經(jīng)終止。電腦B(假設(shè)運(yùn)行在另一臺(tái)物理機(jī)上)會(huì)恢復(fù)到已經(jīng)登錄的狀態(tài),如果需要重新讓電腦B恢復(fù)鎖屏狀態(tài),可以在電腦B上執(zhí)行如下命令:
rundll32.exe user32.dll,LockWorkStation
方案二:
假設(shè)用于跑 UI 自動(dòng)化的機(jī)器是虛擬機(jī)A,現(xiàn)在再使用另一臺(tái)虛擬機(jī)B作為中轉(zhuǎn)。本機(jī)先連接到虛擬機(jī)B,然后再從虛擬機(jī)B連接到虛擬機(jī)A,最后斷開虛擬機(jī)B。
方案三(窗口最小化失效的解決方案):
修改注冊表項(xiàng)(注:從機(jī)器A通過遠(yuǎn)程桌面連接機(jī)器B,則需要在機(jī)器A上修改注冊表)
32位機(jī)器:
HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized
或
HKEY_LOCAL_MACHINESoftwareMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized
設(shè)置數(shù)據(jù)類型DWord,值為2
64位機(jī)器路徑不同:
HKEY_CURRENT_USERSoftwareWow6432NodeMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized
或
HKEY_LOCAL_MACHINESoftwareWow6432NodeMicrosoftTerminal Server ClientRemoteDesktop_SuppressWhenMinimized
設(shè)置數(shù)據(jù)類型DWord,值為2
方案四(關(guān)機(jī)失效的解決方案):
遠(yuǎn)程桌面mstsc遠(yuǎn)程登錄虛擬機(jī)時(shí),在虛擬機(jī)中新建文本文檔,寫入內(nèi)容:
@%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’關(guān)閉虛擬機(jī),在虛擬機(jī)關(guān)閉后帶有SendKey的腳本可以正常運(yùn)行。打開時(shí)可能會(huì)報(bào)錯(cuò),不用理會(huì),不影響使用。
該文章在 2021/3/15 12:33:39 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |