首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#检测远程协助连接

C#检测远程协助连接
EN

Stack Overflow用户
提问于 2016-11-29 18:17:34
回答 1查看 748关注 0票数 1

我在生产环境中有一个程序,当在pc上启动远程协助时,我希望打开一个窗口,以便连接到pc的人有更多的选择。但如果有可能我什么都找不到?如果是这样的话,你知道如何检测它吗?

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 18:50:45

这是可以做到的,但我发现这很棘手,我通常会避免这样做。有关详细信息,请参阅How to detect RDC from C#.net

为了启动,RDP监听端口3389,所以类似下面这样的东西应该可以工作。

代码语言:javascript
复制
int port = 3389;
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp", false))
{
    if (key != null)
    {
        object value = key.GetValue("PortNumber");
        if (value != null) port = Convert.ToInt32(value);
    }
}

但是可以配置端口号,所以这不是最好的方法。然后是Pinvoke和Cassia。使用Cassia,您可以执行以下操作:

代码语言:javascript
复制
public bool IsComputerUsedByTS()
{
    var tsMgr = new TerminalServicesManager();
    var localSvr = tsMgr.GetLocalServer();
    var sessions = localSvr.GetSessions();
    foreach(var session in sessions)
    {
        if(session.ConnectionState == ConnectionState.Active || 
           session.ConnectionState == ConnectionState.Connected) //Add more states you want to check for as needed
        {
            return true;
        }
    }
    return false;
}

最后但并非最不重要的是:

代码语言:javascript
复制
System.Windows.Forms.SystemInformation.TerminalServerSession

这使用表单导入,但这是一个非常简单的解决方案。如果在远程桌面环境中运行程序,则返回true

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40863264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档