13

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


如果用户在远程桌面(即终端服务)中运行他们的浏览器,我想禁用网站上的动画。

如果这是本机应用程序,而不是网站,我可以使用以下命令执行此检查:

//Native code
isRemoteSession = GetSystemMetrics( SM_REMOTESESSION );

或者

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

是否可以在浏览器中进行类似的检查?

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


更新一:也许在How can you get the terminal service client machine name from javascript?

4

6 回答 6

12

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

当然,这种解决方案并不完美,因为您会从不使用 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变量的值。

于 2013-04-12T23:00:40.060 回答
5

您可以使用以下媒体查询:

@media screen and (prefers-reduced-motion: reduce) { . . . }

此条件也适用于非 RDP 会话,但由于您的意图是禁用所有动画,因此这种类型的查询可能正是您正在寻找的。

于 2020-06-07T12:15:43.573 回答
1

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

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

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

有关编写终端服务感知图形应用程序的提示,请查看图形效果注意事项一般性能指南

于 2011-09-03T19:25:58.303 回答
0

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

于 2010-11-28T12:18:34.843 回答
0

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

于 2010-10-02T15:16:33.617 回答
-2

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

于 2014-02-25T22:13:19.200 回答