2014-01-07 2 views
1

랩톱에서 외부 모니터를 분리 할 때 연결이 끊긴 모니터가 여전히 기본값으로 설정되어 있으므로 일부 앱이 손실됩니다. 일부 창은 연결이 끊긴 모니터에 표시하려고합니다.자바에서는 외부 모니터의 연결/연결 해제를 청취 할 수 있습니까?

앱 아이콘을 마우스 오른쪽 버튼으로 클릭하고 이동을 선택한 다음 화살표 키를 사용하여 창을 내 랩톱으로 이동하는 등의 임시 해결 방법이 있습니다. Java에서 연결 해제 신호를 수신 한 다음 내 기본 화면을 내 랩톱으로 다시 설정하는 방법이 있는지 궁금합니다.

시작시 사용할 수있는 스크린의 수와 ID를 얻고 속성 파일에 추가하는 방법에 대해 생각했습니다. 화면 연결이 끊어진 경우 사용 가능한 화면 수와 ID를 다시 가져 와서 해당 값을 내 등록 정보 파일의 값과 비교하십시오. 그런 다음 기본값을 새 값과 저장된 값과 일치하는 화면으로 설정할 수 있습니다.

아직 코딩을 시작하지 않았습니다. 이것은 현재로서는 무엇보다 수사 적입니다.

답변

1

AWT는 access to screen information을 제공하지만, 2 개의 내장 모니터 또는 2 개의 외부 모니터가있을 수 있으므로 "외부"는 주관적입니다. 기본적인 수준에서

, 어떤 순간에 모니터를 셀 수 :

int numberOfMonitors = 0; 
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsDevice[] gs = ge.getScreenDevices(); 
for (int j = 0; j < gs.length; j++) { 
    GraphicsDevice gd = gs[j]; 
    GraphicsConfiguration[] gc = gd.getConfigurations(); 
    if (gc.getType() == TYPE_RASTER_SCREEN) numberOfMonitors++; 
} 
System.out.println("Number of monitors: " + numberOfMonitors); 

이 새 모니터의 첨부 파일을 검색하려면, 당신은 결과를 폴링해야합니다.

이것은 순수한 Java 솔루션입니다. 내 지식에 이보다 더 정확한 것을 원한다면, 목표로하고있는 플랫폼에서 네이티브 도구를 호출해야 할 것입니다. 예 : Linux의 경우 probing sysfs.

+0

고맙습니다. 친절합니다. 이 클래스들을 조금씩 읽고 코드와 함께 플레이하고 그것이 어디까지 이어지는 지 살펴 보겠습니다. – Lambda

1

기본적으로 이것은 Java과 관련하여 매우 어렵거나 불가능하다고 말하고 싶습니다. 그 이유는 Java가 크로스 플랫폼 언어이며이 모든 것이 기본 운영 체제에 의해 처리되기 때문입니다. 이 문제에 대한 견고한 크로스 플랫폼 솔루션을 찾기 란 쉽지 않습니다. 윈도우에서

당신이 Java Native Access를 통해 WM_DEVICECHANGE에 연결할 수 있습니다 : 당신은 모니터가 연결 또는 분리되면, 감지하는 방법을 요구하고

.

때로는 getScreenDevices()을 확인하고 변경 사항을 감지하는 것이 좋겠지 만 이는 실제 솔루션보다 더 많은 해결 방법입니다.

또한 기본 디스플레이를 변경하는 방법을 묻습니다. There은이 태스크에 WinAPI를 사용하는 방법의 예입니다.

다른 운영 체제의 경우 다른 방법을 찾아야합니다. 나는이 대답이 아이디어를 제공하기를 바란다. 특히 Java로 해결하기가 어려울 수 있기를 바란다.

관련 문제