Search code examples
c#.netscreen-sizec#-interactive

C# Screen size without references in interactive


I want to get the screen size of the primary screen, without adding any references (e.g. WinForms or Presentation). I found a similar question here, however there is no solution which doesn't include downloading or something like that.

But I want to make a method, which can be executed in the C# interactive on any other pc. Therefore I need a solution that doesn't reference other stuff than the standard (E.g. System, System.Core, ... is allowed).

I do know this is possible with

System.Windows.Forms.Screen.PrimaryScreen.Bounds;

but as this requires the System.Windows.Forms reference, it's not suitable for me. But basically the result of this snippet is what I want to get without references.


Solution

  • Here's an example I came up with.

    I have noticed that it does not work correctly on High-DPI Screens. It will report the apparent resolution, not the actual resolution.

        static void Main(string[] args)
        {
            var size = GetScreenSize();
            Console.WriteLine(size.Length + " x " + size.Width);
            Console.ReadLine();
        }
    
        static Size GetScreenSize()
        {
            return new Size(GetSystemMetrics(0), GetSystemMetrics(1));
        }
    
        struct Size
        {
            public Size(int l, int w)
            {
                Length = l;
                Width = w;
            }
    
            public int Length { get; set; }
            public int Width { get; set; }
        }
    
        [DllImport("User32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
        public static extern int GetSystemMetrics(int nIndex);