2017-12-21 3 views
1

Wie kann ich Bildschirmauflösung in der Konsole App (wenn es möglich ist)?Get Bildschirmauflösung in der Konsole App

Während in Forms ich verwenden kann:

int height = Screen.PrimaryScreen.Bounds.Height; 
int width = Screen.PrimaryScreen.Bounds.Width; 

aber ich bin auf der Suche speziell Weise trösten.


So wurde der Weg zur Lösung meines Problems von Marc-Antoine Jutras vorgeschlagen. Ich brauche int Werte so ich so ging:

int height = Convert.ToInt32(SystemParameters.PrimaryScreenHeight); 
    int width = Convert.ToInt32(SystemParameters.PrimaryScreenWidth); 
+3

Es gibt keine spezielle Möglichkeit, dies für eine Konsolenanwendung zu tun, da die Konsole doch nur ein Fenster ist; Sie können einfach auf "System.Windows.Forms" verweisen und denselben Code wie zuvor verwenden. – Clint

+1

@ Clint-Nr. es ist möglich –

+1

Sie können [GDI] (https://stackoverflow.com/a/43656496/6583956) verwenden. Einfach überprüft - funktioniert wie ein Zauber. Um das Snippet aus der Antwort zu verwenden, fügen Sie 'include System.Drawing; mit System.Runtime.InteropServices; ' –

Antwort

1

können Sie den System.Windows-Namespace verwenden, in der Systemparameters Klasse haben Sie die folgenden Eigenschaften:

PrimaryScreenWidth

PrimaryScreenHeight

Ich glaube, jemand hat eine Referenz auf diese Frage gegeben: Get and Set Screen Resolution

Sie müssen jedoch die PresentationFramework.dll zu Ihrem Konsolenprojekt hinzufügen.

using System.Windows; 

namespace DispResolution 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      double height = SystemParameters.PrimaryScreenHeight; 
      double Width = SystemParameters.PrimaryScreenWidth; 
     } 
    } 
} 
+2

Wenn eine andere Frage eine Antwort hat, die diese Lösung löst, markieren Sie diese Frage bitte als Duplikat, anstatt eine Antwort zu posten. Oder poste stattdessen einen Kommentar. – Clint

1

WMI ist eine Option;

int width; 
int height; 
var managementScope = new System.Management.ManagementScope(); 
managementScope.Connect(); 
var q = new System.Management.ObjectQuery("SELECT CurrentHorizontalResolution, CurrentVerticalResolution FROM Win32_VideoController"); 
var searcher = new System.Management.ManagementObjectSearcher(managementScope, q); 
var records = searcher.Get(); 
foreach (var record in records) 
{ 
    if (!int.TryParse(record.GetPropertyValue("CurrentHorizontalResolution").ToString(), out width)) 
    { 
     throw new Exception("Throw some exception"); 
    } 
    if (!int.TryParse(record.GetPropertyValue("CurrentVerticalResolution").ToString(), out height)) 
    { 
     throw new Exception("Throw some exception"); 
    } 
} 
Output: 
Width: 1680 
Height: 1050 
1

User32.dll Lösung (Reflexion/Interop/Diag). Hauptcode Kredit: Get A Window's Bounds By Its Handle

using System; 
using System.Diagnostics; 
using System.Reflection; 
using System.Runtime.InteropServices; 

class Program 
{ 
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect); 

[StructLayout(LayoutKind.Sequential)] 
public struct RECT 
{ 
    public int Left;  // x position of upper-left corner 
    public int Top;   // y position of upper-left corner 
    public int Right;  // x position of lower-right corner 
    public int Bottom;  // y position of lower-right corner 
} 
    static void Main(string[] args) 
    { 
     DoWork(); 
    } 
    static void DoWork() 
    { 
     RECT rct; 
     var ths = Assembly.GetExecutingAssembly().CodeBase; 
     IntPtr hwnd = Process.GetCurrentProcess().MainWindowHandle; 
     if (!GetWindowRect(new HandleRef(ths, hwnd), out rct)) 
     { 
      Console.WriteLine("ERROR"); 
      return; 
     } 
     Console.WriteLine("Left: " + rct.Left.ToString()); 
     Console.WriteLine("Right: " + rct.Right.ToString()); 
     Console.WriteLine("Top: " + rct.Top.ToString()); 
     Console.WriteLine("Bot: " + rct.Bottom.ToString()); 
     Console.WriteLine("Width: " + (rct.Right - rct.Left).ToString()); 
     Console.WriteLine("Height: " + (rct.Bottom - rct.Top).ToString()); 
     Console.ReadLine(); 
    } 
} 

Ausgang:

Links: 260
Recht: 1257
Top: 260
Bot: 783
Breite: 997
Höhe: 523