4

DevExpressスキンを使用しています。スキンを手動で無効にするスイッチを実装しました。これは基本的にターミナルサーバーのために必要です(接続帯域幅を節約するためにフラットな外観にする必要があります)。

とにかく、手動スイッチは、ユーザーがアプリケーションをローカルまたはリモートで使用するときに継続的に使用する必要があるため、適切ではありません。もちろん、見た目を気にするユーザーだけです。

手動スイッチを残したいのですが、Windowsの設定のパフォーマンスをチェックする別の自動スイッチも追加します(とにかく、これを英語で伝える方法はわかりません。つまり、どのバージョンのWindowsでも見えるパフォーマンスの設定を意味します。 、Windows '98のように)。(可能であれば)すべてのWindowsバージョン(2K、XP、Vista、7、および対応するサーバー)で機能する独自の機能が必要です。

システムがRDPで実行されているかどうかだけでなく、パフォーマンス設定が高画質に設定されているかどうかを知りたいのではないことに注意してください。

4

4 に答える 4

2

DelphiJediApilibにある私のJwaWinstaユニットを使用できます。

具体的には、WINSTATIONCLIENT構造体を返すWinStationClient情報クラスでWinStationQueryInformationWを使用できます。

この構造には、次の定数の任意のマスクを含めることができるビットフィールドであるWinStationClientFlagsメンバーがあります。

  TS_PERF_DISABLE_NOTHING = $0;
  TS_PERF_DISABLE_WALLPAPER = $1;
  TS_PERF_DISABLE_FULLWINDOWDRAG = $2;
  TS_PERF_DISABLE_MENUANIMATIONS = $4;
  TS_PERF_DISABLE_THEMING = $8;
  TS_PERF_ENABLE_ENHANCED_GRAPHICS = $10;
  TS_PERF_DISABLE_CURSOR_SHADOW = $20;
  TS_PERF_DISABLE_CURSORSETTINGS = $40;
  TS_PERF_ENABLE_FONT_SMOOTHING= $80;
  TS_PERF_ENABLE_DESKTOP_COMPOSITION = $100;
  TS_PERF_DEFAULT_NONPERFCLIENT_SETTING = $40000000;
  TS_PERF_RESERVED1 = $80000000;

さらに、この構造体はColorDepthメンバーも返します。

于 2010-12-02T16:41:33.863 に答える
1

システムメトリックを使用してSM_REMOTESESSION、プログラムがRDP上で実行されているかどうかを判断します。

このOldNewThingの投稿には、さらに多くの情報があります。

于 2010-12-02T12:56:43.820 に答える
0

こんにちはWTSEnumerateSessionsAPIを使用して、ユーザーがrdpモードで実行されているかどうかを確認できます。

var pSessionInfo: PWTS_SESSION_INFOW;
SessionInfo: WTS_SESSION_INFO;
SessionCount: Cardinal;
i: Integer;
begin
  try
    Result := -1;
    if WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, pSessionInfo, SessionCount) then
      begin
        SessionInfo := pSessionInfo^;
        for i := 0 to SessionCount - 1 do
          begin
            if SessionInfo.State = WTSActive then
              begin
                if Pos('rdp', LowerCase(SessionInfo.pWinStationName)) <> 0 then
                  ShowMessage('this is rdp');
              end;
            pSessionInfo := PWTS_SESSION_INFOW(Pointer(Integer(pSessionInfo) + SizeOf(WTS_SESSION_INFOW)));
            SessionInfo := pSessionInfo^;
          end;
      end;
  finally
    WTSFreeMemory(PSessionInfo);
  end;

これがあなたの質問に答えることを願っています。ところで、delphiにはWTSEnumerateSessionsのインポートがないため、手動でインポートするか、Jwaライブラリをダウンロードする必要があります。関数はJwaWtsApi32.pasでデカールされます

于 2010-12-02T11:33:40.623 に答える
0
// returns the color bit depth (8, 16, 32, ....) on the machine
// note: it works also for rdp (it returns the color bit depth of
// the current session, not some default settings on the server)
function GetBitColorDepth: integer;
var
  DC: THandle;    // display context
begin
  DC := GetDC(HWND(nil));
  Result := GetDeviceCaps(DC, BITSPIXEL);
  ReleaseDC(HWND(nil), DC);
end;
于 2010-12-03T09:17:47.810 に答える