C#屏幕尺寸,无交互式参考

时间:2017-05-02 14:02:32

标签: c# .net screen-size c#-interactive

我想获取主屏幕的屏幕大小,而不添加任何引用(例如 WinForms Presentation )。我发现了一个类似的问题here,但是没有解决方案不包含下载或类似内容。

但我想制作一个方法,可以在任何其他电脑上的C#interactive中执行。因此,我需要一个不会引用除标准之外的其他内容的解决方案(例如 System System.Core ,......)。

我知道这可以用

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

但由于这需要 System.Windows.Forms 引用,因此它不适合我。但基本上这个片段的结果就是我想要而没有引用。

3 个答案:

答案 0 :(得分:1)

这是我想出的一个例子。

我注意到它在High-DPI屏幕上无法正常工作。它将报告明显的分辨率,而不是实际的分辨率。

    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);

答案 1 :(得分:0)

如果您不想使用这些库,您可能需要使用本机方法。我无法想到解决这个问题的方法,因为您需要以任何方式与系统进行通信。

一个好的起点是System.Windows.Forms.Screen

的来源

Here's a link to the source。我打赌你可以删除他们的代码,并获得最低限度。

答案 2 :(得分:0)

我实际上找到了解决方法:

using System;
using System.Runtime.InteropServices;
static void Main()
{
    EnumWindows(E, IntPtr.Zero);
    Console.Write($"{_.Item1}x{_.Item2}");
}


struct R
{
    int l;
    int t;
    public int r;
    public int b;

    public override string ToString() => $"{l},{t},{r},{b}";
    public bool i() => l == 0 && r != 00;
}

static (int, int) _;

static bool E(IntPtr w, IntPtr l)
{
    var r = new R();
    GetWindowRect(w, ref r);
    if (r.i() && _.Item1 == 0)
        _ = (r.r, r.b);
    return true;
}

delegate bool P(IntPtr w, IntPtr l);

[DllImport("user32.dll")]
static extern bool EnumWindows(P e, IntPtr l);

[DllImport("user32.dll")]
static extern bool GetWindowRect(IntPtr w, ref R r);
Main()

将其粘贴到您的互动中,它应该输出屏幕分辨率 - 至少它对我来说。

不要问我它是如何工作的,它是从不同的教程中拼凑起来并加入到交互式中。因此,我不能保证这将适用于每台电脑。

请其他人来测试一下吗?