我正在使用DevExpress皮肤。我实现了一个开关来手动禁用皮肤。我需要这个基本上是因为终端服务器(我需要一个扁平的外观以节省连接带宽)。
无论如何,手动切换不好,因为用户必须在本地或远程使用应用程序时继续使用它。当然只有关心外观的用户。
我想离开手动开关但是还要添加另一个自动开关 检查Windows设置性能的开关(我不知道如何操作) 用英语告诉我,无论如何,我的意思是设置表现让任何人 Windows版本,如Windows '98)。我想(如果可能的话) 有一个独特的功能,适用于每个Windows版本(2K,XP,Vista,7, 和服务器对应方。)
请注意我只是不知道我的系统是否在RDP中运行,但是性能设置是否设置为高图像质量。
答案 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;