检测活动的RDP会话

时间:2018-11-08 08:35:44

标签: c# .net pinvoke remote-desktop

我需要在我的应用程序中实现死人开关。如果该应用程序是从RDP运行的,那么在失去与远程客户端的连接时我需要采取行动。

我知道我何时通过使用RDP运行

GetSystemMetrics(SystemMetric.SM_REMOTESESSION)

但是当客户端关闭但未退出时,会话将继续。这是我要应对的情况,但是我不知道如何检测客户端断开连接。我需要知道是否有活动的RDP用户。

通过观察RDP端口,我可能会找到远程端点,但是考虑到可能会在非默认端口上进行设置,因此,如果存在更好的解决方案,我想避免使用此解决方案。

我更喜欢不特定于WinForms,WPF,UWP等的解决方案。如果它也可以与.NET Core一起使用,则可以得到加分。

1 个答案:

答案 0 :(得分:0)

不是.NET Core解决方案,而是Windows API。您可以通过WTSRegisterSessionNotification(以及以后的unregister)选择加入会话更改通知。

这些通知随后在Windows消息循环中传递,因此您需要运行一个。 (WinForms和WPF都可以,并且有一些特定的机制可以让您执行custom message handling

然后,当会话被锁定或断开连接时,您会收到通知。