易语言实现屏幕分辨率读取的完整方法

10 次阅读

屏幕分辨率是桌面程序开发中比较常见的一项系统信息。对于使用易语言开发的窗口程序、屏幕工具、桌面辅助软件以及需要进行界面自适应的应用来说,准确获取当前显示器的宽度和高度,可以为窗口定位、界面缩放、坐标计算等功能提供基础数据。

易语言读取屏幕分辨率主要有两种思路:一种是直接调用易语言环境提供的相关系统信息接口,另一种是通过 Windows API 获取屏幕尺寸。实际开发时,选择哪种方式取决于程序的复杂程度以及是否需要兼容多显示器、DPI 缩放等场景。

一、屏幕分辨率到底是什么

通常所说的屏幕分辨率,是指显示区域在水平方向和垂直方向上的像素数量。例如:

1920 × 1080
2560 × 1440
3840 × 2160

其中第一个数字表示屏幕宽度,第二个数字表示屏幕高度。

例如当前电脑使用的是 1920×1080 分辨率,那么:

屏幕宽度 = 1920
屏幕高度 = 1080

需要注意的是,屏幕分辨率与程序实际获得的桌面坐标范围并不一定完全等价。Windows 的 DPI 缩放、远程桌面环境、多显示器布局等因素,都可能影响程序对屏幕尺寸的判断。

二、使用易语言系统功能读取屏幕尺寸

对于普通的易语言桌面程序,如果只是希望获得当前主显示器的宽度和高度,可以优先考虑易语言提供的系统相关功能。

示例代码可以按照下面的思路编写:

.版本 2

.局部变量 屏幕宽度, 整数型
.局部变量 屏幕高度, 整数型

屏幕宽度 = 取屏幕宽度 ()
屏幕高度 = 取屏幕高度 ()

调试输出 (“屏幕宽度:” + 到文本 (屏幕宽度))
调试输出 (“屏幕高度:” + 到文本 (屏幕高度))

不同版本的易语言支持库或开发环境中,相关命令名称可能存在差异。如果当前环境没有对应的直接命令,可以采用 Windows API 的方式实现。

这种方式的优势是代码简单,适合刚开始学习易语言或者只需要实现基础屏幕检测的程序。

三、通过 Windows API 获取屏幕分辨率

Windows 本身提供了多个用于获取显示设备尺寸的 API,其中 GetSystemMetrics 是比较常见的一种方法。

核心思路是调用:

GetSystemMetrics

然后分别传入对应的系统指标。

获取主屏幕宽度时使用:

SM_CXSCREEN

获取主屏幕高度时使用:

SM_CYSCREEN

在 Windows API 中,这两个常量通常分别对应:

SM_CXSCREEN = 0
SM_CYSCREEN = 1

因此实际逻辑可以理解为:

屏幕宽度 = GetSystemMetrics (0)
屏幕高度 = GetSystemMetrics (1)

在易语言中,可以先声明 Windows API:

.版本 2

.DLL命令 GetSystemMetrics, 整数型, "user32.dll", "GetSystemMetrics", 公开, 获取系统度量值
    .参数 nIndex, 整数型

然后调用:

.局部变量 宽度, 整数型
.局部变量 高度, 整数型

宽度 = GetSystemMetrics (0)
高度 = GetSystemMetrics (1)

调试输出 (“当前屏幕分辨率:” + 到文本 (宽度) + “ × ” + 到文本 (高度))

假设系统当前主显示器为 1920×1080,最终得到的结果就是:

当前屏幕分辨率:1920 × 1080

四、完整的易语言示例

如果希望将读取功能封装起来,可以设计一个简单的子程序,让其他功能直接调用。

.版本 2

.DLL命令 GetSystemMetrics, 整数型, "user32.dll", "GetSystemMetrics", 公开
    .参数 nIndex, 整数型

.子程序 获取屏幕分辨率

.局部变量 宽度, 整数型
.局部变量 高度, 整数型

宽度 = GetSystemMetrics (0)
高度 = GetSystemMetrics (1)

调试输出 (“屏幕宽度:” + 到文本 (宽度))
调试输出 (“屏幕高度:” + 到文本 (高度))

程序启动后调用:

获取屏幕分辨率 ()

即可完成基本的屏幕尺寸检测。

这种封装方式比把 API 调用代码直接散落在多个事件中更加合理。以后需要增加 DPI 检测、多显示器处理或者分辨率判断时,也可以继续扩展这个子程序。

五、根据分辨率调整窗口大小

获取屏幕分辨率最常见的用途之一,就是让程序根据用户电脑的屏幕尺寸自动设置窗口大小。

例如,希望窗口默认占据屏幕宽度的 80%,高度占据屏幕高度的 70%,可以进行简单计算:

窗口宽度 = 屏幕宽度 × 0.8
窗口高度 = 屏幕高度 × 0.7

如果屏幕是 1920×1080,那么:

窗口宽度 ≈ 1536
窗口高度 ≈ 756

在实际易语言程序中,可以先获取屏幕尺寸,再将计算结果应用到窗口的宽度和高度属性。

需要注意的是,不建议简单地让窗口始终等于整个屏幕尺寸。普通桌面程序通常还需要考虑任务栏、窗口边框以及用户已有的窗口布局。

六、根据分辨率实现界面自适应

固定坐标是很多传统桌面程序容易出现的问题。

例如开发者按照 1920×1080 屏幕设计界面,将按钮固定放置在:

X = 1600
Y = 900

当程序运行到 1366×768 的电脑上时,该按钮就可能出现位置偏移甚至无法正常显示的问题。

因此,可以利用屏幕尺寸进行比例计算。

例如设计基准分辨率为:

设计宽度 = 1920
设计高度 = 1080

当前屏幕为:

当前宽度 = 1366
当前高度 = 768

可以计算横向缩放比例:

横向比例 = 当前宽度 ÷ 1920

纵向比例:

纵向比例 = 当前高度 ÷ 1080

然后根据比例重新计算控件的位置和尺寸。

这种方式比单纯判断“是不是 1920×1080”更加灵活。

七、读取屏幕分辨率时需要注意 DPI 缩放

Windows 10、Windows 11 等系统普遍支持显示缩放,例如:

100%
125%
150%
175%

很多开发者第一次测试屏幕尺寸时,会发现 API 返回的数据与系统设置界面中的实际显示效果存在差异。

原因之一就是 DPI 缩放。

例如显示器物理分辨率为:

3840 × 2160

系统设置为 150% 缩放时,普通应用看到的逻辑尺寸可能与实际物理像素存在区别。

因此,在开发需要精确定位窗口或鼠标坐标的软件时,不能只考虑分辨率,还需要考虑 DPI 感知能力。

如果程序涉及:

  • 屏幕截图

  • 鼠标坐标定位

  • 自动化操作

  • 窗口像素级定位

  • 高清屏适配

  • 界面缩放

就应该进一步研究 Windows DPI Awareness 机制。

八、多显示器环境不能只读取一个分辨率

GetSystemMetrics 获取的是系统主屏幕相关尺寸。对于只有一个显示器的电脑,这通常已经足够。

但是现在很多用户会同时使用:

笔记本屏幕 + 外接显示器

或者:

双显示器

甚至:

三显示器

这时候就不能简单地认为整个桌面只有一个 1920×1080 的区域。

多显示器环境下,每台显示器都可能拥有不同的:

  • 分辨率

  • DPI

  • 缩放比例

  • 坐标位置

  • 横竖屏方向

例如:

显示器1:1920 × 1080
显示器2:2560 × 1440

如果程序需要知道每个显示器的具体尺寸,就应该进一步使用 Windows 的多显示器 API,例如枚举显示器设备并获取对应的显示区域。

九、区分屏幕分辨率与工作区域

开发桌面程序时,还有一个经常被忽略的概念:工作区域。

屏幕分辨率表示整个显示区域,例如:

1920 × 1080

但用户桌面通常还存在任务栏。任务栏占用的区域不会用于普通窗口的最大化工作区域。

因此:

屏幕尺寸 ≠ 可用工作区域

如果程序的目标是自动设置窗口,使其完整显示在桌面可用区域内,那么使用工作区域相关 API 通常比单纯获取屏幕分辨率更合适。

Windows 提供了对应的系统指标,例如:

SM_CXFULLSCREEN
SM_CYFULLSCREEN

不过在复杂桌面环境中,更推荐根据具体显示器的工作区域进行判断。

十、常见错误及排查方法

1. API 声明错误

如果调用 GetSystemMetrics 时程序提示 DLL 命令相关错误,需要检查:

user32.dll

是否填写正确,同时确认 API 函数名称和参数类型是否正确。

2. 宽度和高度写反

常见错误是将:

SM_CXSCREEN
SM_CYSCREEN

混淆。

其中:

CX = 水平方向宽度
CY = 垂直方向高度

所以应该是:

GetSystemMetrics (0) → 宽度
GetSystemMetrics (1) → 高度

3. 把分辨率当成工作区域

如果程序需要将窗口放到桌面可用区域,应考虑任务栏等因素,而不能简单使用屏幕分辨率作为窗口最大尺寸。

4. 忽略 DPI 缩放

在普通工具中问题可能不明显,但涉及鼠标坐标、截图和自动化操作时,DPI 不一致很容易造成坐标偏移。

5. 忽略多显示器

只调用一次 GetSystemMetrics 并不能满足多显示器程序的全部需求。需要精确控制某一块显示器时,应采用显示器枚举方案。

十一、如何选择合适的实现方式

如果只是制作普通易语言桌面程序,可以按照实际需求选择:

使用场景推荐方案
获取主屏幕宽高易语言系统功能
简单获取 Windows 屏幕尺寸GetSystemMetrics
设置窗口初始大小屏幕尺寸 + 比例计算
获取桌面可用区域工作区域相关 API
多显示器处理显示器枚举 API
高清屏适配分辨率 + DPI 综合处理
自动化坐标操作分辨率 + DPI + 显示器信息
屏幕截图程序显示器信息 + DPI 综合处理

对于学习易语言的初学者而言,可以先掌握 GetSystemMetrics 的使用方式,再逐步了解 Windows 显示器和 DPI 相关 API。

十二、总结

易语言读取屏幕分辨率并不复杂,最基础的实现就是获得屏幕宽度和高度。对于 Windows 桌面程序,可以通过 GetSystemMetrics 分别获取 SM_CXSCREEN 和 SM_CYSCREEN,从而得到主屏幕的水平和垂直尺寸。

简单程序可以直接使用:

宽度 = GetSystemMetrics (0)
高度 = GetSystemMetrics (1)

如果程序进一步涉及窗口自适应、高清屏、多显示器、屏幕截图或者自动化操作,则不能只关注分辨率本身,还需要综合考虑工作区域、DPI 缩放以及不同显示器之间的尺寸差异。

掌握这些基础知识后,易语言屏幕分辨率读取就不仅仅是获取两个数字,而可以进一步应用到窗口布局、界面自适应和桌面工具开发等实际场景中。