C# 응용 프로그램에서 WPF 창이 기본 모니터 또는 다른 모니터에 있는지 어떻게 알 수 있습니까?WPF 창이 어떤 모니터인지 알 수 있습니까?
답변
는이 같은 현재 양식의 현재 화면을 얻을 수있는 Screen.FromControl
방법을 사용할 수 있습니다 :
Screen screen = Screen.FromControl(this);
그런 다음 현재 화면이 기본 화면입니다 있는지 확인하기 위해
Screen.Primary
를 확인할 수 있습니다.
WPF'Window'는 폼'Control'이 아니므로이 경우'Screen.FromControl (this) '을 사용할 수 없습니다. – cprcrack
그러나 다음과 같이 사용할 수 있습니다. Screen.FromHandle (new WindowInteropHelper (this) .Handle); –
체크 아웃 또한 How do I find what screen the application is running on in C#
Run Application on a Dual Screen Environment 흥미로운 솔루션을 제공 :
bool onPrimary = this.Bounds.IntersectsWith(Screen.PrimaryScreen.Bounds);
.
기본이 아닌 DPI 및 모니터 별 DPI는 작동하지 않습니다. – LOST
지금까지는 다른 대답을 사용할 수 없어 WPF 부분을 다루지 않았습니다. 내 걸릴거야.
WPF는 다른 응답에서 언급 한 Windows Forms의 Screen 클래스에있는 자세한 화면 정보를 노출하지 않는 것 같습니다.
그러나, 당신은 당신의 WPF 프로그램에서 윈폼 화면 클래스를 사용할 수 있습니다 : 당신이 nitpicker 경우,이 주목 한 수
System.Windows.Forms
에 대한 참조를 추가하고 System.Drawing
var screen = System.Windows.Forms.Screen.FromRectangle(
new System.Drawing.Rectangle(
(int)myWindow.Left, (int)myWindow.Top,
(int)myWindow.Width, (int)myWindow.Height));
주 코드는 오른쪽에서 아래쪽으로 한 픽셀 씩 벗어나서 int에서 double로 변환되는 경우가 있습니다. 당신이 nitpicker 때문에 윈도우가 전혀 그들이 할 수 있기 때문에 window.Left 또는 window.Top에 의존 할 수없는 다음을 최대화하는 경우, 당신은 내 코드 ;-)
창이 최대화되면 작동하지 않습니다. –
기본이 아닌 DPI에서는 작동하지 않습니다. 특히 모니터 별 DPI가 다릅니다. – LOST
public static bool IsOnPrimary(Window myWindow)
{
var rect = myWindow.RestoreBounds;
Rectangle myWindowBounds= new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
return myWindowBounds.IntersectsWith(WinForms.Screen.PrimaryScreen.Bounds);
/* Where
using System.Drawing;
using System.Windows;
using WinForms = System.Windows.Forms;
*/
}
'myWindow.RestoreBounds'는 윈도우가 스크린의 왼쪽이나 오른쪽에 고정되어 있으면 윈도우의 실제 크기와 위치를 반환하지 않습니다. (Windows 버튼 + 왼쪽 또는 오른쪽 화살표)이 경우 myWindow.Left, myWindow.Right, myWindow.Width 및 myWindow.Height를 사용해야합니다. –
를 해결하기 위해보다 더 행복 할 것이다 그것이 최대화되기 전에 좌표가되어야합니다. 하지만 모든 경우에이 작업을 수행 할 수 있습니다
var screen = System.Windows.Forms.Screen.FromHandle(
new System.Windows.Interop.WindowInteropHelper(window).Handle);
현재 열지 않은 곳의 화면이 나타납니다. – Coneone
를 당신은 몇 가지 기본 방법을 사용할 필요가 그렇게하기 위해서.
internal static class NativeMethods
{
public const Int32 MONITOR_DEFAULTTOPRIMARY = 0x00000001;
public const Int32 MONITOR_DEFAULTTONEAREST = 0x00000002;
[DllImport("user32.dll")]
public static extern IntPtr MonitorFromWindow(IntPtr handle, Int32 flags);
}
https://msdn.microsoft.com/en-us/library/windows/desktop/dd145064(v=vs.85).aspx
그런 다음 당신은 단순히있는 창문이며, 기본 하나 인 모니터를 확인. 이와 같이 : var hwnd = new WindowInteropHelper(this).EnsureHandle();
var currentMonitor = NativeMethods.MonitorFromWindow(hwnd, NativeMethods.MONITOR_DEFAULTTONEAREST);
var primaryMonitor = NativeMethods.MonitorFromWindow(IntPtr.Zero, NativeMethods.MONITOR_DEFAULTTOPRIMARY);
var isInPrimary = currentMonitor == primaryMonitor;
- 1. 코코아 어떤 창이 전경인지 알 수있는 방법
- 2. 대기중인 스레드가 어떤 모니터인지 보는 방법은 무엇입니까?
- 3. , 어떤 페이지가 현재인지 어떻게 알 수 있습니까?
- 4. 어떤 파일이 상수인지 어떻게 알 수 있습니까?
- 5. DOM이 수정되었는지, 어떤 부분을 알 수 있습니까?
- 6. 어떤 .emacs 파일이로드되었는지 어떻게 알 수 있습니까?
- 7. 어떤 행을 클릭했는지 어떻게 알 수 있습니까?
- 8. 어떤 유형의 데이터베이스인지 어떻게 알 수 있습니까?
- 9. 어떤 기능이 호출되는지 어떻게 알 수 있습니까?
- 10. 창이 모달 또는 mdi 창인지 어떻게 알 수 있습니까?
- 11. 창이 화면 밖에 있는지 어떻게 알 수 있습니까?
- 12. 창이 프로그램에 속하는지 어떻게 알 수 있습니까? win32 만 사용
- 13. 창이 자바 스크립트에 있는지 어떻게 알 수 있습니까?
- 14. 실행중인 WPF 버전을 어떻게 알 수 있습니까?
- 15. WPF 창이 닫히지 않음
- 16. 어떤 헤더에서 어떤 기능이 사용되고 있는지 어떻게 알 수 있습니까?
- 17. 어떤 클래스에서 어떤 함수가 호출되었는지 어떻게 알 수 있습니까?
- 18. WPF 창이 검은 색이됩니다.
- 19. 어떤 종류의 WPF 컨트롤을 사용할 수 있습니까?
- 20. 다른 wpf 창 안에 wpf 창이 있습니다
- 21. Wpf : 뒷 창이 어둡게 됨
- 22. WPF 모달 창이 비정상적으로 동작합니다.
- 23. WPF ContextMenu : 누가 그것을 시작했는지 어떻게 알 수 있습니까?
- 24. WPF ValidationRule : 유효성 검사를하는 방법을 어떻게 알 수 있습니까?
- 25. 어떻게하면 wpf 팝업 창이 사라지나요?
- 26. 자식 창이 닫히면 부모 창이 통보받을 수 있습니까? (diff 도메인에서)
- 27. 어떤 클래스 메소드가 사용되고 있지 않은지 어떻게 알 수 있습니까?
- 28. GXT에서 어떤 사건이 발생했는지 어떻게 알 수 있습니까?
- 29. 어떤 스레드가 메서드를 호출했는지 어떻게 알 수 있습니까?
- 30. 주어진 SQL Server 프로세스가 어떤 쿼리를 실행하는지 알 수 있습니까?
확률은 모두에 좋을 것입니다. –
@Helen이 질문은 Winforms에 적용됩니다. 이것은 다른 WPF 용입니다. –