c# - 检测事件 RDP session

标签 c# .net pinvoke remote-desktop

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

我知道我什么时候在 RDP 中运行

GetSystemMetrics(SystemMetric.SM_REMOTESESSION)

但是当客户端在没有注销的情况下关闭时, session 将继续。这是我想要使用react的场景,但我不知道如何检测客户端断开连接。我需要知道是否有活跃的 RDP 用户。

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

我更喜欢不特定于 WinForms、WPF、UWP 等的解决方案。如果它也适用于 .NET Core,则加分。

最佳答案

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

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

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

关于c# - 检测事件 RDP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53204041/

相关文章:

c# - 让 SqlBulkCopy 接受列名

C# 遵守从​​ SQL 服务器中提取的字符串中的换行符

c# - 在哈希表中存储类实例

.NET RSA.Create(String algName) : What goes in algName?

c# - 在另一个进程内调用不是用 .NET 编写的函数

返回 char* 的 C 函数的 C# pinvoke

c# - LINQ to SQL - 从 X WHERE X = "1"选择 Y

C# 套接字消息解压

c# - 合并/标记 SQL 命令的方法

c# - 在 C# DllImport 中使用 32 位或 64 位 dll