C# 和 Ubuntu - 如何获取主屏幕的大小?
Posted
技术标签:
【中文标题】C# 和 Ubuntu - 如何获取主屏幕的大小?【英文标题】:C# and Ubuntu - How do I get size of primary screen? 【发布时间】:2013-12-08 11:29:04 【问题描述】:我正在尝试确定主屏幕的大小,以便捕捉它的图像。我的设置是一台具有 1600x900 显示屏的笔记本电脑和一个 1920x1080 的外接显示器。获取大小的代码在 Windows 上运行良好,但在 Ubuntu 上给出错误结果(使用 MonoDevelop)。
Rectangle capture_rect = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
Console.WriteLine("width=0 height=1", capture_rect.Height, capture_rect.Width);
在 Ubuntu 上的结果是“width=3520 height=1080”。如果我断开外接显示器,我会得到正确的结果,即“width=1600 height=900”。知道为什么我在具有多个显示器的 Ubuntu 上得到错误的值吗?
【问题讨论】:
显然,Ubuntu 认为您的外接显示器是主屏幕。您是否查看了 Ubuntu 的屏幕属性以确认其配置是否符合您的预期(外部显示器不是主屏幕)? 返回值 3520x1080 是一个包含两个显示器大小的矩形。如果我转到系统设置 > 显示器,它不会说明主显示器和辅助显示器,但我的“启动器放置”是为我的笔记本电脑显示器设置的。还有其他地方我应该寻找屏幕属性吗? 很遗憾,我在 Mono/Ubuntu 方面没有太多经验,而且我现在没有 Ubuntu 计算机;这只是一个通用建议(即,最可能的问题是 PrimaryScreen.Bounds 实际上是正确计算的,但它指向其他屏幕)。在您的情况下,我会对 Screen 类识别的所有屏幕进行一些测试,以查看它们是如何存储/识别的;也会在 Ubuntu 论坛上做一些研究。很抱歉,但无法提供进一步的帮助。 如果你遍历 Screen.AllScreens 会发生什么?里面还有数据吗? Screen.AllScreens 只有一个条目,和 Screen.PrimaryScreen 一样。 【参考方案1】:我没有使用 .NET 来获取屏幕尺寸,而是使用 Linux “xrandr”。这是我的代码:
public Rectangle GetDisplaySize()
// Use xrandr to get size of screen located at offset (0,0).
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "xrandr";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
var match = System.Text.RegularExpressions.Regex.Match(output, @"(\d+)x(\d+)\+0\+0");
var w = match.Groups[1].Value;
var h = match.Groups[2].Value;
Rectangle r = new Rectangle();
r.Width = int.Parse(w);
r.Height = int.Parse(h);
Console.WriteLine ("Display Size is 0 x 1", w, h);
return r;
【讨论】:
以上是关于C# 和 Ubuntu - 如何获取主屏幕的大小?的主要内容,如果未能解决你的问题,请参考以下文章