0
我有一個生產環境中的程序,我喜歡在PC上啓動遠程協助時打開一個窗口,因此連接到PC的人有更多的選擇。但是如果這可能,我找不到任何東西?如果有,任何想法如何檢測它?C#檢測遠程協助連接
我有一個生產環境中的程序,我喜歡在PC上啓動遠程協助時打開一個窗口,因此連接到PC的人有更多的選擇。但是如果這可能,我找不到任何東西?如果有,任何想法如何檢測它?C#檢測遠程協助連接
這可以做到,但我覺得它很棘手,我通常會避免這種情況。有關更多信息,請參見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
。
嗨@SilentStorm我剛纔試了一下,我也沒有得到一個新的會話時,RDC連接是開放的。 – mortenstarck
你也可以試試這個:'System.Windows.Forms.SystemInformation.TerminalServerSession'它返回RDP連接一個布爾值,但使用的是進口的形式。 – SilentStorm
你用什麼方法?第一個還是後一個? – SilentStorm