如何在 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 才能实现此目的。我可以想象它大致是这样工作的:
- 监控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]
- 当前台window发生变化时,检查新的前台window是否属于RDP应用。您可以通过多种方式执行此操作,例如通过检查 window 属于哪个进程(我假设它是 Windows 上的 mstsc.exe 但可能是错误的)。检查 window.
的标题更容易(但很脏且容易出错)
- 如果 RDP 应用程序在前台,将您的应用程序推到它后面。
关于如何实施我上面解释的内容,这是一个很好的起点:Detect active window changed using C# without polling。
我编写了一个 .NET winform 应用程序并将 TopMost 属性 设置为 true。但是我发现当我登录到远程停止时,window 仍然显示。
如何使用 .net 框架检测我是否处于远程停止状态(远程桌面处于活动状态,typing/working 在远程桌面中)?我正在使用 .NET Framework 4.8 并从 Windows 10 1903
远程访问 Windows 10 1809您可能需要用 P/Invoke 调用 Windows API 才能实现此目的。我可以想象它大致是这样工作的:
- 监控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]
- 当前台window发生变化时,检查新的前台window是否属于RDP应用。您可以通过多种方式执行此操作,例如通过检查 window 属于哪个进程(我假设它是 Windows 上的 mstsc.exe 但可能是错误的)。检查 window. 的标题更容易(但很脏且容易出错)
- 如果 RDP 应用程序在前台,将您的应用程序推到它后面。
关于如何实施我上面解释的内容,这是一个很好的起点:Detect active window changed using C# without polling。