1

我在生产环境中有一个程序,我喜欢在电脑上启动远程协助时打开一个窗口,因此连接到电脑的人有更多选择。但是,如果可能的话,我找不到任何东西?如果是这样,知道如何检测它吗?

4

1 回答 1

1

这可以做到,但我觉得它很棘手,我通常会避免这种情况。有关详细信息,请参阅如何从 C#.net 检测 RDC

要启动 RDP 在端口 3389 上侦听,这样的事情应该可以工作。

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。使用决明子,您可以执行以下操作:

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;
}

最后但并非最不重要:

System.Windows.Forms.SystemInformation.TerminalServerSession

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

于 2016-11-29T10:50:45.303 回答