दिलचस्प पोस्ट
सी ++ 11 में स्ट्रिंग लीटरल्स के लिए यूनिकोड एन्कोडिंग मुझे कब तैयार बयानों का उपयोग करना चाहिए? निष्पादन योग्य का पूर्ण पथ प्राप्त करना, सी # का उपयोग करना? जावा में गतिरोध का पता लगाने बिटमैप। क्लोन () और नए बिटमैप (बिटमैप) के बीच क्या अंतर है? Android MediaCodec के साथ कैमरे से एन्कोडिंग एच .264 लॉगिन उपयोगकर्ता 'आईआईएस APPPOOL \ ASP.NET v4.0' के लिए विफल हुआ जावा: जेपीनेल पृष्ठभूमि स्केलिंग नहीं है जावा में SSL क्लाइंट प्रमाणपत्र का चयन करना मैं आईफोन पर राउंड कॉरर्ड यूआईएलबल कैसे बना सकता हूं? JQuery AJAX के साथ JSONP के लिए कॉलबैक फ़ंक्शन क्या xslt विभाजन () फ़ंक्शन है? CSS3 के एट्रर () प्रमुख ब्राउज़रों में काम नहीं करता है कैसे दो jQuery एनिमेशन एक साथ चलाने के लिए? मेरी XPath क्वेरी (स्क्रैपिंग HTML तालिकाओं) केवल फ़ायरबॉग में क्यों काम करती है, लेकिन मैं जो अनुप्रयोग विकसित कर रहा हूं वह नहीं है?

मैं सक्रिय स्क्रीन आयाम कैसे प्राप्त करूं?

जो मैं देख रहा हूं वह System.Windows.SystemParameters.WorkArea के बराबर है। System.Windows.SystemParameters.WorkAreaSystem.Windows.SystemParameters.WorkAreaSystem.Windows.SystemParameters.WorkArea मॉनिटर के लिए जो खिड़की वर्तमान में चालू है।

स्पष्टीकरण: सवाल में खिड़की WPF , WinForm नहीं है।

वेब के समाधान से एकत्रित समाधान "मैं सक्रिय स्क्रीन आयाम कैसे प्राप्त करूं?"

Screen.FromControlScreen.FromPoint Screen.FromControl , Screen.FromControlScreen.FromPoint और Screen.FromRectangle आपको इसके साथ मदद करनी चाहिए। उदाहरण के लिए WinForms में यह होगा:

 class MyForm : Form { public Rectangle GetScreen() { return Screen.FromControl(this).Bounds; } } 

मैं WPF के लिए एक समान कॉल के बारे में नहीं जानता इसलिए, आपको इस एक्सटेंशन विधि की तरह कुछ करना चाहिए।

 static class ExtensionsForWPF { public static System.Windows.Forms.Screen GetScreen(this Window window) { return System.Windows.Forms.Screen.FromHandle(new WindowInteropHelper(window).Handle); } } 

आप प्राथमिक स्क्रीन के डेस्कटॉप वर्कस्पेस सीमा प्राप्त करने के लिए इसका उपयोग कर सकते हैं:

System.Windows.SystemParameters.WorkArea

यह प्राथमिक स्क्रीन के आकार को प्राप्त करने के लिए भी उपयोगी है:

System.Windows.SystemParameters.PrimaryScreenWidth System.Windows.SystemParameters.PrimaryScreenHeight System.Windows.SystemParameters.PrimaryScreenWidth System.Windows.SystemParameters.PrimaryScreenHeight System.Windows.SystemParameters.PrimaryScreenWidth System.Windows.SystemParameters.PrimaryScreenHeight System.Windows.SystemParameters.PrimaryScreenWidth System.Windows.SystemParameters.PrimaryScreenHeight

इसके अलावा आपको आवश्यकता हो सकती है:

  • SystemParameters.VirtualScreenWidth
  • SystemParameters.VirtualScreenHeight

सभी मॉनिटरों का संयुक्त आकार पाने के लिए और एक विशेष रूप से नहीं।

एफएफपीएफ पर जोड़ें

 Screen.FromControl(this).Bounds 

अपने खिड़कियों के पैमाने के कारक से सावधान रहें (100% / 125% / 150% / 200%) आप निम्न कोड का उपयोग कर वास्तविक स्क्रीन आकार प्राप्त कर सकते हैं:

 SystemParameters.FullPrimaryScreenHeight SystemParameters.FullPrimaryScreenWidth 

एक समाधान जोड़ना जो कि इसके बजाय WinForms लेकिन मूल विधियों का उपयोग नहीं करता है। पहले आपको आवश्यक मूल विधियों को परिभाषित करने की आवश्यकता है

 public static class NativeMethods { public const Int32 MONITOR_DEFAULTTOPRIMERTY = 0x00000001; public const Int32 MONITOR_DEFAULTTONEAREST = 0x00000002; [DllImport( "user32.dll" )] public static extern IntPtr MonitorFromWindow( IntPtr handle, Int32 flags ); [DllImport( "user32.dll" )] public static extern Boolean GetMonitorInfo( IntPtr hMonitor, NativeMonitorInfo lpmi ); [Serializable, StructLayout( LayoutKind.Sequential )] public struct NativeRectangle { public Int32 Left; public Int32 Top; public Int32 Right; public Int32 Bottom; public NativeRectangle( Int32 left, Int32 top, Int32 right, Int32 bottom ) { this.Left = left; this.Top = top; this.Right = right; this.Bottom = bottom; } } [StructLayout( LayoutKind.Sequential, CharSet = CharSet.Auto )] public sealed class NativeMonitorInfo { public Int32 Size = Marshal.SizeOf( typeof( NativeMonitorInfo ) ); public NativeRectangle Monitor; public NativeRectangle Work; public Int32 Flags; } } 

और फिर मॉनिटर संभाल और इस तरह की मॉनिटर जानकारी प्राप्त करें

  var hwnd = new WindowInteropHelper( this ).EnsureHandle(); var monitor = NativeMethods.MonitorFromWindow( hwnd, NativeMethods.MONITOR_DEFAULTTONEAREST ); if ( monitor != IntPtr.Zero ) { var monitorInfo = new NativeMonitorInfo(); NativeMethods.GetMonitorInfo( monitor, monitorInfo ); var left = monitorInfo.Monitor.Left; var top = monitorInfo.Monitor.Top; var width = ( monitorInfo.Monitor.Right - monitorInfo.Monitor.Left ); var height = ( monitorInfo.Monitor.Bottom - monitorInfo.Monitor.Top ); } 

मैं अपनी खिड़कियों की पहली खुलने से पहले स्क्रीन रिज़ॉल्यूशन करना चाहता था, इसलिए वास्तव में स्क्रीन आयामों को मापने से पहले एक अदृश्य विंडो खोलने का त्वरित समाधान (आपको अपने खिड़की के लिए विंडो मापदंडों को अनुकूलित करने की आवश्यकता है ताकि यह सुनिश्चित हो सके कि दोनों खुले हैं एक ही स्क्रीन – मुख्य रूप से WindowStartupLocation महत्वपूर्ण है)

 Window w = new Window(); w.ResizeMode = ResizeMode.NoResize; w.WindowState = WindowState.Normal; w.WindowStyle = WindowStyle.None; w.Background = Brushes.Transparent; w.Width = 0; w.Height = 0; w.AllowsTransparency = true; w.IsHitTestVisible = false; w.WindowStartupLocation = WindowStartupLocation.Manual; w.Show(); Screen scr = Screen.FromHandle(new WindowInteropHelper(w).Handle); w.Close(); 

मुझे अपने विंडो एप्लिकेशन का अधिकतम आकार सेट करना आवश्यक है यह तदनुसार परिवर्तित हो सकता है कि आवेदन प्राथमिक स्क्रीन में दिखाया गया है या माध्यमिक में दिखाया गया है। इस समस्या से मुकाबला करने के लिए और एक आसान तरीका बनाया है जो मैं आपको आगे दिखाता हूँ:

 /// <summary> /// Set the max size of the application window taking into account the current monitor /// </summary> public static void SetMaxSizeWindow(ioConnect _receiver) { Point absoluteScreenPos = _receiver.PointToScreen(Mouse.GetPosition(_receiver)); if (System.Windows.SystemParameters.VirtualScreenLeft == System.Windows.SystemParameters.WorkArea.Left) { //Primary Monitor is on the Left if (absoluteScreenPos.X <= System.Windows.SystemParameters.PrimaryScreenWidth) { //Primary monitor _receiver.WindowApplication.MaxWidth = System.Windows.SystemParameters.WorkArea.Width; _receiver.WindowApplication.MaxHeight = System.Windows.SystemParameters.WorkArea.Height; } else { //Secondary monitor _receiver.WindowApplication.MaxWidth = System.Windows.SystemParameters.VirtualScreenWidth - System.Windows.SystemParameters.WorkArea.Width; _receiver.WindowApplication.MaxHeight = System.Windows.SystemParameters.VirtualScreenHeight; } } if (System.Windows.SystemParameters.VirtualScreenLeft < 0) { //Primary Monitor is on the Right if (absoluteScreenPos.X > 0) { //Primary monitor _receiver.WindowApplication.MaxWidth = System.Windows.SystemParameters.WorkArea.Width; _receiver.WindowApplication.MaxHeight = System.Windows.SystemParameters.WorkArea.Height; } else { //Secondary monitor _receiver.WindowApplication.MaxWidth = System.Windows.SystemParameters.VirtualScreenWidth - System.Windows.SystemParameters.WorkArea.Width; _receiver.WindowApplication.MaxHeight = System.Windows.SystemParameters.VirtualScreenHeight; } } } 

यह एक "सेंटर स्क्रीन डॉटनेट 4.5 समाधान " है, सिस्टम। विंडोज.फ़म्स या माय कंप्यूटर के बजाय सिस्टमपैमेट्रेट का उपयोग करते हैं। स्क्रीन: चूंकि विंडोज 8 ने स्क्रीन आयाम गणना बदल दी है, मेरे लिए काम करने का एकमात्र तरीका ऐसा दिखता है (टास्कबार गणना शामिल है):

 Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim BarWidth As Double = SystemParameters.VirtualScreenWidth - SystemParameters.WorkArea.Width Dim BarHeight As Double = SystemParameters.VirtualScreenHeight - SystemParameters.WorkArea.Height Me.Left = (SystemParameters.VirtualScreenWidth - Me.ActualWidth - BarWidth) / 2 Me.Top = (SystemParameters.VirtualScreenHeight - Me.ActualHeight - BarHeight) / 2 End Sub 

केंद्र स्क्रीन WPF XAML

सी # winforms में मुझे शुरुआती बिंदु मिल गई है (मामले के लिए जब हम कई मॉनिटर / डिलीप होते हैं और एक फॉर्म एक और कॉल कर रहा है) निम्नलिखित विधि की मदद से:

 private Point get_start_point() { return new Point(Screen.GetBounds(parent_class_with_form.ActiveForm).X, Screen.GetBounds(parent_class_with_form.ActiveForm).Y ); }