2010-12-02 3 views
4

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

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

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

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

ответ

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; 
0

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

Надеюсь, это ответит на ваш вопрос. BTW delphi не имеет импорта для WTSEnumerateSessions, поэтому вам придется импортировать его вручную или загрузить библиотеку Jwa. Функция декалирована в JwaWtsApi32.pas

+0

Но это (исправьте меня, если я ошибаюсь) сообщает мне, работает ли приложение в терминальном сервере или на локальной машине, верно? Что, если я просто хочу прочитать текущую машину? Я мог бы также настроить мою машину Windows 7 на оптимизацию производительности, поэтому в этом случае я бы хотел отключить скины, даже если я не на удаленном рабочем столе. – LaBracca 2010-12-02 12:09:37

+0

Вы правы, я неправильно понял ваш вопрос, извините. Проблема, которую вы имеете, это не о delphi, а о winapi. Возможно, вам стоит опубликовать новый вопрос с соответствующими тегами, и вы получите ответ. – Davita 2010-12-02 12:56:38

+0

теги моего вопроса уже о win api. В любом случае, поскольку вы предлагаете мне изменить название, включая WinApi явно – LaBracca 2010-12-02 13:02:51

1

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

This OldNewThing post имеет гораздо больше информации.

2

Вы можете использовать мое подразделение 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.

Смежные вопросы