2017-12-21 1 views
1

콘솔 앱에서 화면 해상도를 얻을 수있는 방법은 무엇입니까?콘솔 앱에서 화면 해상도 가져 오기

Forms에서 내가 사용할 수 있지만 :

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

을하지만 구체적 방법을 콘솔 찾고 있어요.


따라서 내 문제를 해결하는 방법은 Marc-Antoine Jutras입니다. 나는이 같은 갔다 그래서 나는 int 값이 필요합니다

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

가있다 결국 콘솔은 단지 창일 뿐이므로 콘솔 응용 프로그램에 대해이 작업을 수행 할 구체적인 방법은 없습니다. 'System.Windows.Forms'를 참조하고 이전과 같은 코드를 사용할 수 있습니다. – Clint

+1

@Clint no. 가능합니다 –

+1

[GDI] (https://stackoverflow.com/a/43656496/6583956)를 사용할 수 있습니다. 그냥 체크 - 매력처럼 작동합니다. 응답에서 스 니펫을 사용하려면'include System.Drawing; using System.Runtime.InteropServices; ' –

답변

1

당신은 SystemParameters 클래스에서 System.Windows 네임 스페이스를 사용할 수있는 다음과 같은 속성이 있습니다

PrimaryScreenWidth

PrimaryScreenHeight

을 누군가가이 질문에 답하는 참조를 만들었다 고 생각합니다. Get and Set Screen Resolution

그러나 PresentationFramework.dll을 콘솔 프로젝트에 추가해야합니다.

using System.Windows; 

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

다른 질문에 답이있을 경우 대답을 게시하는 대신이 질문을 중복으로 표시하십시오. 또는 대신 의견을 게시하십시오. – Clint

1

WMI은 옵션입니다.

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 솔루션 (reflection/interop/diag). 메인 코드 제공 : 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(); 
    } 
} 

출력 :

왼쪽 : 260
오른쪽 : 1257
최고 : 260
봇 : 783
폭 : 997
가 높이 : 523