如何在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
相关产品推荐
相关产品推荐

