如何发现远程桌面会话的图像质量设置?

时间:2010-12-02 11:18:53

标签: delphi winapi terminal-services

我正在使用DevExpress皮肤。我实现了一个开关来手动禁用皮肤。我需要这个基本上是因为终端服务器(我需要一个扁平的外观以节省连接带宽)。

无论如何,手动切换不好,因为用户必须在本地或远程使用应用程序时继续使用它。当然只有关心外观的用户。

我想离开手动开关但是还要添加另一个自动开关 检查Windows设置性能的开关(我不知道如何操作) 用英语告诉我,无论如何,我的意思是设置表现让任何人 Windows版本,如Windows '98)。我想(如果可能的话) 有一个独特的功能,适用于每个Windows版本(2K,XP,Vista,7, 和服务器对应方。)

请注意我只是不知道我的系统是否在RDP中运行,但是性能设置是否设置为高图像质量。

4 个答案:

答案 0 :(得分:2)

您可以使用我在Delphi Jedi Apilib中的JwaWinsta单元。

更具体地说,您可以将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 :(得分:1)

使用SM_REMOTESESSION系统指标确定您的程序是否在RDP上运行。

This OldNewThing post提供了更多信息。

答案 2 :(得分:0)

您好 您可以使用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

中进行了十分转换

答案 3 :(得分: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;