13

ユーザーがリモートデスクトップセッション内で実行されているかどうかをブラウザー(javascriptなど)内で確認する方法はありますか?


ユーザーがリモートデスクトップ(つまり、ターミナルサービス)内でブラウザーを実行している場合、Webサイトでアニメーションを無効にしたい。

これがWebサイトではなくネイティブアプリケーションである場合、次を使用してこのチェックを実行できます。

//Native code
isRemoteSession = GetSystemMetrics( SM_REMOTESESSION );

また

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

ブラウザ内で実行できる同様のチェックはありますか?

注:この説明では、このブラウザーがInternetExplorer8であると想定します。


アップデート1:おそらくJavaScriptからターミナルサービスクライアントのマシン名を取得するにはどうすればよいですか?

4

6 に答える 6

12

私の解決策は、メディア機能@mediaの最小値と最大値にCSSクエリを使用することです。実験に基づくと、RDPは、通常のデスクトップの1色あたり8ビットではなく、1色あたり5ビットしかないようです。color

もちろん、このソリューションは完璧ではありません。RDPを使用していない人から多くの誤検知が発生するためですが、色深度の表示が低いだけです。でも:

  • 企業のイントラネットのように比較的制御された環境にいる場合は、「低色深度」=「RDP」の方が自信があるかもしれません。
  • Webページで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プレーヤーを使用してアニメーションを再生している場合は、プレーヤーのドキュメントをチェックして、リモートデスクトップでフレームレートが自動的に調整されるかどうかを確認してください。

Webサイトの低帯域幅バージョンをいつでも提供し、ビデオの再生が不十分な場合は、通常のWebサイトの代わりにWebサイトを選択するようにユーザーに指示できます。

ターミナルサービス対応のグラフィックアプリを作成するためのヒントについては、グラフィック効果の考慮事項と一般的なパフォーマンスガイドラインを確認してください。

于 2011-09-03T19:25:58.303 に答える
0

おそらく、SESSIONNAME環境変数を読み取ることができますか?コンソールセッションの場合はCONSOLEであり、RDPセッションの場合はRDP-TCPの後に数字が続く必要があります。

于 2010-10-02T15:16:33.617 に答える
0

ターミナルサーバーではなく、特定の会社のターミナルサーバーについて話していると思います。TSの特定のIPアドレスにアニメーションを提供できませんでした。

于 2010-11-28T12:18:34.843 に答える
-2

これは、アプリケーションによって実行または決定されるべきではありません。RDPクライアント(MS RDCなど)では、ユーザーはアニメーションなどを無効にすることを選択できます。ユーザーはサーバー側(ターミナルサーバーまたはRDPホスト)でもこれらを無効にすることができます。

于 2014-02-25T22:13:19.200 に答える