【问题标题】:Determine screen size with .NET Core 5?使用 .NET Core 5 确定屏幕大小?
【发布时间】:2021-01-11 12:31:09
【问题描述】:

如何使用 .NET Core 确定屏幕大小?我想按照DotNetCore Capture A Screenshot in Windows 中的说明截取屏幕截图,但他们使用固定的 1920*1080 分辨率,这不适合我的目的。

我是否必须引用 System.Windows.Forms 从而被确定为 Windows?

在切换到 .NET Core 之前,我们像这样使用 System.Windows.Forms:

new Size
{
  Width = Screen.AllScreens.Sum(s => s.Bounds.Width),
  Height = Screen.AllScreens.Max(s => s.Bounds.Height)
}

这是我们可以再次使用的东西,但我们当然会喜欢独立于平台的东西。

【问题讨论】:

  • 虽然 System.Drawing 可以跨平台使用,但如果 CopyFromScreen 不能在 linux 上运行,我不会感到惊讶。我会先对其进行测试,以确保您不会再次尝试需要 System.Windows.Forms 的东西。
  • 这是一个开放的issue。目前不支持Screen info,因为有问题的平台可能甚至没有屏幕。
  • 你问的绝对是不是平台无关的。 Web 应用程序没有屏幕。 Mac 窗口概念和 API 与 Windows 非常不同。 Linux、Android、iOS 也是如此。有一些尝试创建跨平台 GUI 堆栈,例如 Xamarin Forms 或 Uno Platform

标签: c# .net .net-core .net-5


【解决方案1】:

cmets 提示尚不支持。

所以我向您展示了我们为使用 Windows 窗体实现它所做的工作(我花了一些时间来了解如何在 .NET Core 库项目中正确引用 Windows 窗体):

您可以像这样将 Windows 窗体依赖项添加到 csproj 文件中:

<ItemGroup>
  <FrameworkReference Include="Microsoft.WindowsDesktop.App.WindowsForms" />
</ItemGroup>

然后你可以再次使用Screen类:

new Size
{
  Width = Screen.AllScreens.Sum(s => s.Bounds.Width),
  Height = Screen.AllScreens.Max(s => s.Bounds.Height)
}

重要提示:这仅适用于 Windows,但至少与 .NET Core 兼容。

【讨论】:

  • 它可能会在引擎盖下使用 WinApi,所以我猜它不会在其他平台上工作,抱歉我手头没有 rn,所以无法确认/否认。跨度>
  • 它使用Winuser.h's EnumDisplayMonitors function,所以不要认为这会回答你的问题。
  • 是的,Windows.Forms 通常只在 Windows 上可用。
【解决方案2】:

对于 WPF 解决方案,我们只是使用最大化窗口的方法,获取窗口的宽度和高度值,然后以正常状态返回窗口。也可以使用虚拟的第二个透明窗口(使用 WindowStartupLocation.CenterOwner)来完成。考虑未测量的任务栏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多