본문 바로가기
개발 이야기/C# 이야기

C# 모니터 정보 가져오기

by 런던살자 2020. 10. 23.

안녕하세요 마블랑입니다.

 

요새 회사에서 일할때나 집에서 PC환경을 꾸밀때 듀얼모니터 등 모니터를 한대만 사용하는 것이 아니라 두대 이상 사용하는 경우가 많은데요

 

특히 관제시스템을 만들때 여러 화면을 한번에 봐야하기 때문에 한대의 데스크톱에 여러대의 모니터를 연결해서 사용할때가 많습니다.

 

그러면서 프로세스를 원하는 모니터에 출력을 해줘야하는데요

 

C#으로 만든 프로세스는 Screen 클래스를 이용해서 현재 연결된 모니터들의 정보를 가져오고 프로세스를 위치를 원하는 모니터에 표시할수 있습니다

 

아래는 예제 코드 입니다. 

Screen[] Monitor = Screen.AllScreens;

for (int i = 0; i < Monitor.Length; i++)
{
Console.WriteLine(i + "번째 모니터=========================================================");

Console.WriteLine("장치이름 : " + Monitor[i].DeviceName);
Console.WriteLine("주모니터 여부 : " + Monitor[i].Primary.ToString());
Console.WriteLine("X좌료 : " + Monitor[i].WorkingArea.X);
Console.WriteLine("Y좌료 : " + Monitor[i].WorkingArea.Y);
Console.WriteLine("Width : " + Monitor[i].WorkingArea.Width);
Console.WriteLine("Height : " + Monitor[i].WorkingArea.Height);

Console.WriteLine("==================================================================");
}

    

한번 어떤식으로 모니터 정보가 출력이 되는지 확인해 볼겠습니다~

 

좌우로 배치했을경우 1번 모니터(0번째모니터)가 주모니터 일경우 2번 모니터는 바로옆에 1920,0 부터 시작하네요

 

모니터의 높이가 1040인 이유는 작업표시줄의 높이가 제외되서 그런듯 합니다. 

 

그럼 모니터를 상하로 배치해볼까요?

 

무조건 1번째 주모니터가 시작하는 위치를 0,0으로 잡고 있습니다.

 

그래서 2번째 모니터의 시작점은 -1080이 되는군요

 

 

그럼 보조모니터를 주모니터 아래에 배치해보겠습니다.

 

시작점이 0, 1080입니다. 주모니터 아래에 보조모니터를 셋팅해 놓은 형상입니다.

 

유럽의 열차관제 시스템을 보면 모니터가 9개 이런식으로 표시가 되는데 그렇게 되면 아주 유용하게 쓰일 클래스 같습니다.

 

 

위에서 봤듯이 주모니터의 XY 시작좌표는 무조건 0,0으로 시작하니 모니터 배치를 할때나 프로그램을 이동시킬때 유의 하시기 바랍니다.

 

 

이상 마블랑이었습니다.

 

읽어주어서 고맙습니다.

댓글