2010-12-02 3 views
4

DevExpress 스킨을 사용하고 있습니다. 수동으로 스킨을 사용하지 않도록 스위치를 구현했습니다. 나는 기본적으로 터미널 서버 때문에 이것을 필요로한다. (연결 대역폭을 절약하기 위해 평면 모양을 가질 필요가있다.)원격 데스크톱 세션의 이미지 품질 설정은 어떻게 확인합니까?

어쨌든 사용자가 로컬 또는 원격으로 응용 프로그램을 사용할 때 계속해서 사용해야하므로 수동 스위치가 좋지 않습니다. 물론 외모를 신경 쓰는 사용자 일뿐입니다. 내가 영어로이 말 방법을 모르는

나는 또한 성능에 대한 Windows 설정을 확인 다른 자동 스위치를 추가 할 수 있지만, 수동 스위치를두고 싶습니다은 (어쨌든, 나는 성능을 설정하는 것을 의미하는 Windows '98과 같이 버전의 Windows를 볼 수 있습니다. (가능하면) 모든 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

참고 :이 답변을 수락 할 수 없습니다. 어쨌든 그것은 작동합니다. – LaBracca

+0

기존 세션에 다시 연결할 때와 같이 색 농도가 변경되면 어떻게되는지 궁금합니다. 이것은 그것을하는 제일 방법 인 것처럼 보이지 않는다. – Remko

+0

확실히 완벽하지는 않습니다. 당신이 언급 한 사건은 처리되지 않을 것입니다. 다음 애플리케이션 시작시에만. – LaBracca

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 델파이에는 WTSEnumerateSessions에 대한 가져 오기가 없으므로 수동으로 가져 오거나 Jwa 라이브러리를 다운로드해야합니다. 이 함수는 JwaWtsApi32.pas에서 데칼됩니다.

+0

그러나이 경우 (올바른 경우 나) 응용 프로그램이 터미널 서버 또는 로컬 컴퓨터에서 실행 중인지 알 수 있습니까? 만약 내가 현재 기계 settigns 읽고 싶어? 성능을 위해 최적화 된 Windows 7 컴퓨터를 설정할 수도 있습니다.이 경우 원격 데스크톱에 없더라도 스킨을 비활성화하고 싶습니다. – LaBracca

+0

네 말이 맞다. 나는 네 질문에 대해 오해했다. 미안하다. 당신이 가진 문제는 델파이가 아니라 winapi에 관한 것입니다. 어쩌면 적절한 태그를 사용하여 새 질문을 게시하면 답변을 얻을 수 있습니다. – Davita

+0

내 질문의 태그는 이미 api를 이기고 있습니다. 어쨌든 당신이 명시 적으로 WinApi를 포함하여 제목을 바꿀 것입니다. – LaBracca

1

시스템 메트릭을 사용하여 프로그램이 RDP에서 실행 중인지 확인하십시오.

This OldNewThing post에는 훨씬 더 많은 정보가 있습니다.

+0

질문에 대한 나의 업데이트를 확인하십시오. – LaBracca

+0

+1 레이크와 연결하는 경우 –

2

Delphi Jedi Apilib에있는 JwaWinsta 유닛을 사용할 수 있습니다.

특히 WinStationQueryInformationW를 WINSTATIONCLIENT 구조를 반환하는 WinStationClient 정보 클래스와 함께 사용할 수 있습니다.

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 부재를 반환이 구조에서는

는 다음 중 어느 일정한 마스크를 포함 할 수있는 비트 필드이다 WinStationClientFlags 부재이다.

관련 문제