You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows中通过Adobe AIR(AS3)获取正确的屏幕排列顺序?

如何在AS3中获取Windows系统中用户配置的正确屏幕顺序

你遇到的问题其实很常见——Screen.screens返回的顺序是系统枚举显示器的硬件/驱动顺序,而不是你在Windows显示设置里拖拽排列的用户自定义顺序。要拿到正确的顺序,我们需要根据屏幕的坐标位置来排序,因为Windows里的屏幕排列正是通过它们的相对坐标来定义的。

解决思路

Windows显示设置中,从左到右排列的屏幕,它们的bounds.x值是依次递增的(如果是垂直排列,则bounds.y依次递增)。所以我们只需要把Screen.screens返回的数组按屏幕的坐标排序,就能得到用户配置的顺序。

具体代码实现

// 获取系统中所有的屏幕对象
var rawScreens:Array = Screen.screens;

// 自定义排序函数:按屏幕的水平位置(x坐标)从小到大排序
rawScreens.sort(function(screenA:Screen, screenB:Screen):int {
    // 水平排列用x坐标,垂直排列可以换成screenA.bounds.y - screenB.bounds.y
    return screenA.bounds.x - screenB.bounds.x;
});

// 遍历排序后的数组,就是用户设置的顺序了
for each(var sortedScreen:Screen in rawScreens) {
    // 格式化displayID为两位数字(和你例子里的01、02格式匹配)
    var formattedID:String = String(sortedScreen.displayID).padLeft(2, "0");
    trace("排序后的屏幕ID: " + formattedID + ",位置X: " + sortedScreen.bounds.x);
}

为什么这个方法有效?

Screen.screens的默认顺序是由系统硬件枚举逻辑决定的(比如显卡接口顺序、外接显示器的连接顺序),和用户的自定义排列无关。而Windows的显示设置里,你拖拽调整屏幕位置时,本质上是修改了每个屏幕的坐标偏移量——最左边的屏幕x坐标最小,依次往右递增,所以按x坐标排序就能完美匹配用户的配置顺序。

如果你的屏幕是垂直排列的(上下堆叠),只需要把排序逻辑里的bounds.x换成bounds.y即可。

内容的提问来源于Stack Exchange,提问作者:bio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:22:04