로컬 콘솔에서 프로그램이 실행 중인지 확인하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/244397

  •  04-07-2019
  •  | 
  •  

문제

Windows Server 2003에서는 원격 세션 대신 로컬 콘솔 ( "서버 시스템의 화면")에서 내 프로그램이 실행 중인지 확인하는 방법은 무엇입니까?

Delphi Win32를 사용하고 있으므로 Windows API 기반 방법이 작동합니다 ..

도움이 되었습니까?

해결책

세션 번호가 이것을 말하지 않습니까?

ProcessIdToSessionId (getCurrentProcessId (), & dwsessionnum)

GetVersionEx를 사용하여 OS 버전도 확인해야합니다. XP/Server 2003까지 모든 것에 대해 SESSION 0은 로컬 (서비스 또는 대화식 콘솔)입니다. 더 높은 것은 가상입니다. Vista/2008 세션 0과 1은 둘 다 로컬입니다 (0 IS 서비스, 1은 콘솔), 다른 모든 것은 가상입니다.

나는 당신의 델파이 장치가 세션 번호를 VAR로 선언 할 것이라고 추측하므로 암페어가 필요하지 않을 것입니다.

다른 팁

wtsgetActiveConsolesessionId () 콘솔에 첨부 된 세션의 ID를 반환해야합니다. 그런 다음 해당 세션 ID를 응용 프로그램의 현재 세션 ID와 비교하여 콘솔에서 실행 중인지 여부를 결정할 수 있습니다. Vista (Windows Server 2008에 대해 확실하지 않음)는 반드시 콘솔 세션에 1의 ID (빠른 사용자 스위칭, 누구입니까?)를 제공하지는 않습니다.

나를 위해 ProcessIdTossessionID는 실제 콘솔에서 직접 실행할 때와 관리 세션 (MSTSC /Admin)에 로그인 할 때 0을 반환했습니다.

그러나 RDP를 통해 로그인하면 Windows (XP Pro)는 "이 컴퓨터가 잠겨있는"디스플레이가있는 실제 콘솔에 표시되는 새 세션을 만듭니다. wtsgetActiveConsolesessionID는 제 경우에 2 세션의 세션 ID를 반환합니다.

따라서 앱이 콘솔에서 실행 중이지만 이제는 두 개의 콘솔 세션이 있으며 앱이 활성화 된 세션에서 실행되지 않습니다. 내 코드에서는 세션 ID를 대신 0과 비교합니다.

브라이언은 맞습니다. 나는 빠른 사용자 스위칭이 사용되지 않았음에도 불구하고 비스타가 대화 형 콘솔에 대해 2의 세션 ID를보고 한 후에 만났다. 물론 이것은 단지 버그 일 수 있습니다 :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top