Как узнать настройки качества изображения сеанса удаленного рабочего стола? - PullRequest
4 голосов
/ 02 декабря 2010

Я использую скины DevExpress.Я реализовал переключатель для отключения скинов вручную.Мне это нужно в основном из-за сервера терминалов (мне нужно иметь плоский вид, чтобы сэкономить на пропускной способности соединения).

В любом случае, ручной переключатель не годится, потому что пользователь должен постоянно использовать его при использовании приложениялокально или удаленно.Конечно, только пользователь, который заботится о взгляде.

Я хотел бы оставить ручной переключатель, но добавить еще один автоматический переключатель, который проверяет настройки Windows на производительность (я не знаю, как сказать это по-английскиВо всяком случае, я имею в виду настройку производительности, которая позволяет любой версии Windows выглядеть, как Windows '98).Я хотел бы (если это возможно) иметь уникальную функцию, которая работает на каждой версии Windows (2K, XP, Vista, 7 и серверные аналоги).

Обратите внимание, я не заинтересован в простом знанииработает ли моя система в RDP, но установлены ли параметры производительности для высокого качества изображения или нет.

Ответы [ 4 ]

2 голосов
/ 02 декабря 2010

Вы можете использовать мой модуль JwaWinsta, который находится в Delphi Jedi Apilib.

Более конкретно, вы можете использовать WinStationQueryInformationW с информационным классом WinStationClient, который возвращает структуру WINSTATIONCLIENT.

В этой структуре естьэлемент 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.

1 голос
/ 02 декабря 2010

Используйте системный показатель SM_REMOTESESSION, чтобы определить, работает ли ваша программа по RDP.

Этот пост OldNewThing содержит гораздо больше информации.

0 голосов
/ 03 декабря 2010
// 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;
0 голосов
/ 02 декабря 2010

Привет Вы можете использовать API WTSEnumerateSessions, чтобы проверить, работает ли пользователь в режиме 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

...