如何从浏览器检测用户是否正在远程桌面会话中运行?

如果用户在远程桌面会话中运行,有没有办法检查浏览器(例如JavaScript)?


如果用户在远程桌面(即terminal服务)内运行他们的浏览器,我想禁用网站上的animation。

如果这是一个本地应用程序,而不是一个网站,我可以执行这种检查使用:

//Native code isRemoteSession = GetSystemMetrics( SM_REMOTESESSION ); 

要么

 //Managed Code: isRemoteSession = System.Windows.Forms.SystemInformation.TerminalServerSession; 

是否有类似的检查可以在浏览器内完成?

注意:为了讨论的目的,我们讨论的浏览器是Internet Explorer 8。


更新一:也许在你如何从JavaScript获取terminal服务客户机名称?

我的解决方案是使用CSS @media查询color媒体功能的最小值和最大值。 根据实验,RDP似乎只有每个颜色5位,而不是典型桌面的每个颜色的全部8位。

这个解决方案当然不是完美的,因为你会从不是RDP的人那里得到很多误报,而只是偶尔有低深度的显示。 然而:

  • 如果您处于企业内联网等相对受控的环境中,则您可能会更加确信“低色深”=“RDP”。
  • 许多需要在网页上对RDP进行调整的视觉元素需要精确调整, 因为颜色深度较低(渐变,淡出,动画等),因此测试颜色深度实际上是有意义的,而不是RDP 本身

这里是一个例子,适用于我最近版本的Firefox和Chrome。 请参阅下面的截图。

 <!DOCTYPE html> <html> <head> <title>Test RDP detection</title> <style type="text/css"> @media all { li.color { display: none; } } @media all and (min-color: 1) { li.color.color-depth-1 { display: block; } } @media all and (min-color: 2) { li.color.color-depth-2 { display: block; } } @media all and (min-color: 3) { li.color.color-depth-3 { display: block; } } @media all and (min-color: 4) { li.color.color-depth-4 { display: block; } } @media all and (min-color: 5) { li.color.color-depth-5 { display: block; } } @media all and (min-color: 6) { li.color.color-depth-6 { display: block; } } @media all and (min-color: 7) { li.color.color-depth-7 { display: block; } } @media all and (min-color: 8) { li.color.color-depth-8 { display: block; } } /* 5 bits per color seems to be the max for RDP */ @media all and (max-color: 5) { .not-rdp { display: none; } } @media all and (min-color: 6) { .rdp-only { display: none; } } </style> </head> <body> <p>This page uses CSS <tt>@media</tt> queries to detect whether you are viewing it over RDP&mdash;heuristically, by looking at the color depth of your display.</p> <ul> <li class="color color-depth-1">Your display is not monochrome!</li> <li class="color color-depth-2">Your display has at least 2 bits per color.</li> <li class="color color-depth-3">Your display has at least 3 bits per color.</li> <li class="color color-depth-4">Your display has at least 4 bits per color.</li> <li class="color color-depth-5">Your display has at least 5 bits per color.</li> <li class="color color-depth-6">Your display has at least 6 bits per color.</li> <li class="color color-depth-7">Your display has at least 7 bits per color.</li> <li class="color color-depth-8">Your display has at least 8 bits per color.</li> </ul> <p>You are <span class="not-rdp">not</span> using RDP.</p> <p class="rdp-only">This is only visible over RDP.</p> </body> </html> 

屏幕截图显示测试页面有无RDP

沿着这些线的另一种方法是使用JavaScript来检查screen.colorDepth变量的值。

也许你可以阅读SESSIONNAME环境变量? 对于控制台会话,它应该是CONSOLE,对于RDP会话,它应该是RDP-TCP后跟一个数字。

如果您使用IE,您可以通过ActiveX或BHO暴露检测代码(例如, 将属性分配给 BHO 中的窗口对象 )。

否则,如果您正在使用ActiveX播放器播放动画,请检查播放器的文档以查看是否自动调整远程桌面下的帧速率。

如果视频播放效果不理想,您可以随时提供低带宽版本的网站,并指导用户选择网站而不是常规网站。

有关编写终端服务感知图形应用程序的提示,请检查图形效果考虑因素和一般性能指南

这不应该由您的应用程序完成或决定。 在RDP客户端(如MS RDC)上,用户可以选择禁用动画等。用户也可以在服务器端(终端服务器或RDP主机)

我假设你正在谈论一个特定的公司终端服务器,而不是任何终端服务器。 您无法为TS的特定IP地址提供动画。