远程桌面断开连接时 GetForegroundWindow 返回 Null

Posted

技术标签:

【中文标题】远程桌面断开连接时 GetForegroundWindow 返回 Null【英文标题】:GetForegroundWindow returns Null when remote desktop is disconnected 【发布时间】:2009-09-17 04:06:35 【问题描述】:

我有一个启动应用程序的测试,并通过调用 GetForegroundWindow() 验证它是否已启动。测试在我们通常通过远程桌面访问的远程机器上运行。当我们对机器打开一个 rdp 会话时,测试完成并且一切正常。但是,一旦我们关闭远程桌面,测试就会失败,因为 GetForegroundWindow 总是返回 Null。我检查了断开连接后的活动桌面仍然是“默认”,所以我确定我没有遇到this 问题。有什么想法可能导致这种情况吗?

提前致谢

【问题讨论】:

恐怕您确实遇到了 this 问题(即 Windows 安全性)。当您最小化或断开 RDP 会话时 - 您的会话切换到安全桌面,并且某些 API 将无法正常工作。在这里查看:tech-archive.net/Archive/Windows/… 【参考方案1】:

我假设有 GetForegroundWindow 返回,您有一些方法可以验证返回的 HWND 来自感兴趣的应用程序,而不是其他窗口。

无论如何,使用 EnumWindows 获取屏幕上的所有窗口。找到与您正在寻找的应用相匹配的 HWND。

如果您无法验证 HWND,请在启动应用程序之前调用 EnumWindows 以获取屏幕上的窗口总数。然后通过您的自动化脚本启动您的应用程序。通过 EnumWindows 轮询窗口计数,直到计数增加一。

【讨论】:

【参考方案2】:

如果你的远程桌面是虚拟机,你可以使用 tscon 命令:

tscon 1 /dest:console 其中“1”是活动会话的 ID。

此命令断开 RDP,但将会话发送到控制台。您可以捕捉窗口、截屏等...

【讨论】:

以上是关于远程桌面断开连接时 GetForegroundWindow 返回 Null的主要内容,如果未能解决你的问题,请参考以下文章

WinXP系统远程桌面断开无法连接怎么办

怎么取消远程桌面连接,关闭的时候弹出“断开连接终端服务会话”框

远程桌面连接已断开 客户端无法连接。您已连接到这台计算机的控制台。无法建立新的控制台会话。

windows2012或者2016远程连接于提示远程桌面授权服务器可以提供许可证,远程会话连接已断开

远程桌面连接已断开 由于数据加密错误---和本地连接修复错误

VPS服务器上运行脚本,在本地断开远程桌面后脚本失效