2014-12-05 7 views
0

현재 실행중인 컴퓨터에 연결된 모든 화면을 "잡을"수 있어야하는 C#의 응용 프로그램에서 작업 중입니다. 그러나 과거에 얻을 수없는 Windows.Forms를 사용하는 데 문제가 있습니다.Windows.Forms 확장 바탕 화면, C#의 개별 화면 감지

기본적으로 API와 기타 모든 항목에서 AllScreens [i]를 사용하면 시스템에 연결된 모든 화면에 액세스 할 수 있습니다. 그러나 문제는 확장 된 데스크톱에서 컴퓨터에 연결된 두 개의 화면이있을 때 하나의 화면으로 감지한다는 것입니다. 내가 실행 예를 들어, 경우 :

System.Windows.Forms.Screen.AllScreens[0].Bounds.Width 

나는 배열의 첫 번째 화면의 폭을 얻을 기대하지만, 대신에 나는 두 화면의 결합 된 폭을 얻는다. 사실

는 실행할 때 : AllScreens.Length 실제로 Windows.Forms를 사용하여 개별 화면을 감지 할 수있는 방법이 있나요 1.

반환? 여기

답변

0
내가 제대로 질문을 이해한다면 확실하지

하지만 당신이 AllScreens 가능한 화면의 모음입니다 화면

System.Windows.Forms.Screen.AllScreens[0].WorkingArea.Width 

의 작업 영역을 얻을하는 데 사용할 수있는 것입니다.

string info = ""; 
foreach (var screen in System.Windows.Forms.Screen.AllScreens) 
      { 
       info = info + "Working Area: " + screen.WorkingArea.ToString() + " Primary Screen:" + screen.Primary.ToString() + "\n"; 
      } 

이 코드는 모든 화면이 자신의 작업 영역과 indivudual 제공 :

+0

올바른 화면 너비 "0"을 얻으려면이 방법이 유용합니다.이 방법은 모든 화면의 결합 된 너비를보고하는 Bounds.Width를 사용하는 것보다 훨씬 낫습니다. 그러나 AllScreens [1]를 사용하여 다음 화면을 얻을 수 없기 때문에 문제를 완전히 해결하지는 못합니다. 확장 바탕 화면 모드의 두 화면은 여전히 ​​단일 화면으로보고됩니다. –

+0

AllScreens는 윈도우의 제어판에 나타나는 모니터를 보여줍니다. 예를 들어, 하나의 큰 화면 (SLS)으로 설정된 Eyefinity를 가지고 있다면, 그것은 AllScreens에서 하나의 항목으로 나타나거나 3 개의 별도 모니터로 설정했다면 AllScreens에서 3 개의 항목이됩니다. 컴퓨터의 현재 설정을 확인해야 할 수 있습니다. – Moeen

1

는 당신이 시도 할 수있는 것은이 코드를 사용 bij 화면의 모든 정보를 얻을 수 있습니다.

Here 추가 정보가 필요하십니까?

+0

2 개의 화면을 꽂은 상태에서 지금 시도했지만 실제로 두 화면을 모두 볼 수는 없습니다. 출력물은 여전히 ​​"하나의"화면 만 출력하지만, 이제는 이전 화면과 같이 두 화면을 합친 너비 대신에 화면의 너비를 올바르게보고합니다. foreach 루프를 통과하는 횟수를 추적하기 위해 빠른 정수를 추가했지만 여전히 하나만 가져옵니다. –

+0

이상하게도,이 코드를 테스트하고 반환 값으로 세 화면을 얻었습니다. 셋업에서는 세 화면을 사용하기 때문입니다. screen.DeviceName.ToString()을 사용하면 DISPLAY1, DISPLAY2가 표시됩니다. 새로운 프로젝트에서 이것을 시도해 볼 수 있습니까? 코드에서 버그가 아닌지 확인하십시오. – Quispie