检测远程桌面连接

Ala*_*lan 48 .net c# vb.net

无论如何,在程序中,是否检测程序是否正在远程桌面会话内运行,或者程序是否在.NET 2.0中正常运行?我正在尝试做的是,我创建了一个时钟应用程序,它将为一个人输入和输出并跟踪.但是,我怀疑,这个特殊的人正在工作,家里和时钟进出他们的计算机.

任何想法如何解决这个问题(并取消远程桌面访问不是一个选项)?我的想法是,如果有办法检测远程桌面会话,我将简单地将其实现到程序中并防止它们远程计时.

Ste*_*owe 48

据称,

System.Windows.Forms.SystemInformation.TerminalServerSession
Run Code Online (Sandbox Code Playgroud)

对于远程桌面会话(或VNC会话)将是如此

但我会测试它确定;-)

  • 我非常怀疑这会取得VNC会话.它可能会检测到RDP. (6认同)

小智 16

如果你不想为此添加对System.Windows.Forms.dll的引用(如上所述),那么你也可以通过PInvoke直接调用底层系统调用,如下所示:

    int result = GetSystemMetrics(SystemMetric.SM_REMOTESESSION);
    bool isRemoteSession = (result != 0);
Run Code Online (Sandbox Code Playgroud)

可以在PInvoke.net - SystemMetric中找到SystemMetric枚举(但您可以使用0x1000的值); 而PInvoke.net上的GetSystemMetrics签名- GetSystemMetrics.

我使用RDP和VNC进行了测试 - 与前者(管理员/控制台模式)一起使用,但未检测到后者.


Joh*_*zen 8

http://www.appdeploy.com/messageboards/tm.asp?m=21420&mpage=1&key=厬

系统变量%sessionname%将返回Console(如果是本地)或RDP*(如果是远程).

isRDP = [System.Environment]
    .GetEnvironmentVariable("SESSIONNAME").StartsWith("RDP-")
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用/ console开关(或/ admin,具体取决于版本)进行RDP,则返回"Console"(我刚检查过;-p) (6认同)

Tho*_*que 8

对于Windows应用商店应用,您可以使用:

Windows.System.RemoteDesktop.InteractiveSession.IsRemote
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 6

对于 WPF 应用程序, System.Windows.SystemParameters.IsRemoteSession System.Windows.SystemParameters.IsRemotelyControlled