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

Ian*_*oyd 8 windows terminal-services

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


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

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

//Native code
isRemoteSession = GetSystemMetrics( SM_REMOTESESSION );
Run Code Online (Sandbox Code Playgroud)

要么

//Managed Code:
isRemoteSession = System.Windows.Forms.SystemInformation.TerminalServerSession;
Run Code Online (Sandbox Code Playgroud)

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

注意:为了本次讨论的目的,假设我们所讨论的浏览器是Internet Explorer 8.


更新一:也许在于如何从javascript获取终端服务客户端机器名?

Max*_*y-B 10

我的解决方案是使用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>
Run Code Online (Sandbox Code Playgroud)

屏幕截图显示有和没有RDP的测试页面

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

  • 请注意,颜色深度可在RDP客户端中配置:请参阅高级/显示/颜色下拉列表. (3认同)

Erc*_*sen 6

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

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

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