如何在 rdp 会话处于活动状态时隐藏最顶层 window

How to hide topmost window when rdp session is active

我编写了一个 .NET winform 应用程序并将 TopMost 属性 设置为 true。但是我发现当我登录到远程停止时,window 仍然显示。

如何使用 .net 框架检测我是否处于远程停止状态(远程桌面处于活动状态,typing/working 在远程桌面中)?我正在使用 .NET Framework 4.8 并从 Windows 10 1903

远程访问 Windows 10 1809

您可能需要用 P/Invoke 调用 Windows API 才能实现此目的。我可以想象它大致是这样工作的:

  1. 监控EVENT_SYSTEM_FOREGROUND事件。

    The foreground window has changed. The system sends this event even if the foreground window has changed to another window in the same thread. [Source]

  2. 当前台window发生变化时,检查新的前台window是否属于RDP应用。您可以通过多种方式执行此操作,例如通过检查 window 属于哪个进程(我假设它是 Windows 上的 mstsc.exe 但可能是错误的)。检查 window.
  3. 的标题更容易(但很脏且容易出错)
  4. 如果 RDP 应用程序在前台,将您的应用程序推到它后面。

关于如何实施我上面解释的内容,这是一个很好的起点:Detect active window changed using C# without polling