如何在没有 Windows 窗体引用的情况下获取屏幕分辨率?

2023-12-30

我需要获取运行测试的桌面的分辨率。以前我是这样获取分辨率的:

Screen screen = Screen.PrimaryScreen;
int screenWidth = screen.Bounds.Width;
int screenHeight = screen.Bounds.Height;

不幸的是,使用System.Windows.Forms不可能了。我的项目是 .NET Core,因此最好需要一个 NuGet 包。

如果有人有任何建议,我将不胜感激。


如果你不想使用System.Windows.Forms(或不能),您可以使用 Windows API 函数获取屏幕分辨率EnumDisplaySettings https://learn.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-enumdisplaysettingsw.

要调用 WinAPI 函数,您可以使用 .NET Core 上也提供的 P/Invoke 功能。请注意,这仅适用于 Windows 系统,因为非 Windows 目标上没有 WinAPI。

函数声明如下:

[DllImport("user32.dll")]
static extern bool EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode);

您还需要 WinAPIDEVMODE结构体定义:

[StructLayout(LayoutKind.Sequential)]
struct DEVMODE
{
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
  public string dmDeviceName;
  public short dmSpecVersion;
  public short dmDriverVersion;
  public short dmSize;
  public short dmDriverExtra;
  public int dmFields;
  public int dmPositionX;
  public int dmPositionY;
  public int dmDisplayOrientation;
  public int dmDisplayFixedOutput;
  public short dmColor;
  public short dmDuplex;
  public short dmYResolution;
  public short dmTTOption;
  public short dmCollate;
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
  public string dmFormName;
  public short dmLogPixels;
  public int dmBitsPerPel;
  public int dmPelsWidth;
  public int dmPelsHeight;
  public int dmDisplayFlags;
  public int dmDisplayFrequency;
  public int dmICMMethod;
  public int dmICMIntent;
  public int dmMediaType;
  public int dmDitherType;
  public int dmReserved1;
  public int dmReserved2;
  public int dmPanningWidth;
  public int dmPanningHeight;
}

实际上,您不需要该结构的大部分字段。有趣的是dmPelsWidth and dmPelsHeight.

像这样调用该函数:

const int ENUM_CURRENT_SETTINGS = -1;

DEVMODE devMode = default;
devMode.dmSize = (short)Marshal.SizeOf(devMode);
EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref devMode);

现在您可以在中检查屏幕分辨率dmPelsWidth and dmPelsHeight的领域devMode struct.

由于我们指定null作为第一个参数,该函数描述调用线程正在运行的计算机上的当前显示设备。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有 Windows 窗体引用的情况下获取屏幕分辨率? 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 计算 Richtextbox 中所有单词的最有效方法是什么?

    我正在编写一个文本编辑器 需要提供实时字数统计 现在我正在使用这个扩展方法 public static int WordCount this string s s s TrimEnd if String IsNullOrEmpty s re
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • 将项目与 Eclipse 中的 Sonar 关联

    我有 Eclipse Indigo 3 7 基础和 MyEclipse 10 Java 企业开发插件 我已经为eclipse安装了Sonar插件 安装 Sonar 服务器并从本地主机 localhost 9000 本地运行它 在 Eclip
  • 并行调用 API,每分钟有硬性限制

    我正在尝试对 API 进行并行调用 在停止之前 API 的调用限制为每分钟 1 200 次 在低于限制的情况下异步最有效的方法是什么 def remove html tags text Remove html tags from a str
  • pip for python3.7 (Ubuntu 16.04) [重复]

    这个问题在这里已经有答案了 我无法为 python 3 7 安装 pip 当我尝试在线搜索时 我找到的一种解决方案是使用 get pip py 安装 pip 然而 它对我来说失败了 sudo python3 7 get pip py Tra
  • 如何使谷歌地图响应式?

    我正在尝试将 Google 地图添加到网页 但从使用 Google 教程的代码来看 它具有固定的宽度和高度 我的 HTML 头部是这样的
  • JavaFX 在野外?

    有人知道基于 JavaFX 的真实 Web 应用程序吗 我是一名经验丰富的 Java 程序员 正在考虑在日常工作之余创建一个网站 我在 UI 方面没有太多的专业知识 因此我正在寻找最好的方法来利用我现有的技能来创建可以提供出色的 RIA 体
  • 有没有办法分析 OpenCL 或 pyOpenCL 程序?

    我正在尝试优化 pyOpenCL 程序 出于这个原因 我想知道是否有一种方法可以分析程序并查看大部分时间都花在哪里 您知道如何解决这个问题吗 提前致谢 Andi 编辑 例如 用于 CUDA 的 nvidias nvprof 可以用于 pyC
  • EntityManagerFactory + jpadaosupport 的依赖注入问题

    现在 我在将EntityFactoryManager注入到我的jpadaosupport扩展类中时遇到问题 我的配置如下
  • 使用两个 yaml 文件进行配置属性

    我们正在使用 Spring Boot 应用程序 其中的属性是从application yml文件而不是application properties 位于src main resources 如下所示 config host localhos
  • 如何在类 Unix shell 中保存交互式命令行程序的输出?

    我正在用 C 语言编码并在 Linux 终端中运行程序 我想将程序的输出保存在 txt 文件中 我通常通过执行来做到这一点 a out gt filename txt 但我编写了一个交互式程序 其中我必须输入一个数字才能启动该程序 这种情况
  • vs2013 编译用于调试但不用于发布?

    我在VS2013中遇到了一些奇怪的事情 我的程序在调试模式下构建得很好 但在release模式下 会出现很多错误 例如 Error 2 error C2440 default argument cannot convert from con
  • 这些获取 DTE2 的方法有什么区别(Visual Studio 2013)

    基于这个问题 https stackoverflow com questions 4955009 getting the dte2 or teamfoundationserverext object in a vs package proj
  • angularJS $on 事件处理程序触发顺序

    在 AngularJS 事件处理的上下文中 我想知道两件事 如何定义监听同一事件的处理程序的触发顺序 如果您开始想知道这一点 这是设计不好的迹象吗 阅读有关角度的文档后 on broadcast 和 emit http docs angul
  • 搜索不适用于 JQGrid 中的过滤器工具栏

    我在稍后阶段 而不是在退出网格时 加载 JQGrid 中的数据时遇到问题 我正在使用过滤器工具栏进行搜索 以下是我正在使用的代码 创建网格 jQuery list jqGrid datatype local colNames my col
  • 找到任意大数的算法

    这是我一直在思考的事情 假设你有一个数字 x 它可以无限大 你必须找出它是什么 您只知道另一个数字 y 是否大于或小于 x 找到 x 的最快 最好的方法是什么 一个邪恶的对手以某种方式选择了一个非常大的数字 说 int x 9 9 9 9
  • Java 是否有带有删除策略的有界集合? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 中保存最后 N 个元素的大小受限队列 https stackoverflow com questions 5498865 size limited queue that holds last
  • 斯坦福核心 NLP 如何获得概率和误差幅度

    当使用解析器或核心 NLP 中的任何注释时 有没有办法访问概率或误差幅度 为了将我的问题放在上下文中 我试图了解是否有一种方法可以以编程方式检测歧义情况 例如 在下面的句子中 动词 desire 被检测为名词 我希望能够知道我可以从 Cor
  • 需要 JavaScript 支持的页面上的 cURL 请求

    我需要获取 pinnaclesports com 的 HTML 源代码 问题是它检测cookie和JS是否启用 如果没有 它只是返回一些页面说 该网站需要启用 JavaScript 和 Cookie 请更改您的浏览器设置或升级您的浏览器 使
  • 无法在 Ubuntu 20.04 上安装 bazel - EXPKEYSIG 无效

    我正在按照以下说明进行操作https docs bazel build versions master install ubuntu html install with installer ubuntu https docs bazel b
  • 如何在快速弹出视图控制器后传递数据

    我正在制作一个关于书籍的应用程序 在应用程序中 我想让应用程序通过获取 ISBN 条形码 自动填充图书信息 views https i stack imgur com ohz2S png 有2个班 一个是 UploadMain 另一个是 S
  • 如何在没有 Windows 窗体引用的情况下获取屏幕分辨率?

    我需要获取运行测试的桌面的分辨率 以前我是这样获取分辨率的 Screen screen Screen PrimaryScreen int screenWidth screen Bounds Width int screenHeight sc