2016-11-29 102 views
0

我有一個生產環境中的程序,我喜歡在PC上啓動遠程協助時打開一個窗口,因此連接到PC的人有更多的選擇。但是如果這可能,我找不到任何東西?如果有,任何想法如何檢測它?C#檢測遠程協助連接

回答

0

這可以做到,但我覺得它很棘手,我通常會避免這種情況。有關更多信息,請參見How to detect RDC from C#.net

要啓動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和決明子。與決明子,你可以這樣做:

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

+0

嗨@SilentStorm我剛纔試了一下,我也沒有得到一個新的會話時,RDC連接是開放的。 – mortenstarck

+0

你也可以試試這個:'System.Windows.Forms.SystemInformation.TerminalServerSession'它返回RDP連接一個布爾值,但使用的是進口的形式。 – SilentStorm

+0

你用什麼方法?第一個還是後一個? – SilentStorm