找回密码
 加入
搜索
查看: 1822|回复: 4

[原创] 系统高DPI情况下获取指定像素颜色等坐标需要机选缩放比例

[复制链接]
发表于 2020-4-29 17:35:41 | 显示全部楼层 |阅读模式
本帖最后由 sanmoking 于 2020-4-30 09:52 编辑

我的surface目前dpi缩放200%,用获取指定坐标颜色值一直不准,坐标值需要乘以200%这个系数,全网找了好久都不好使,最后发现这个代码,缝缝补补凑合用一下。
$dpizoom = DPIzoom()
$pixx=@DesktopWidth
$pixy=@DesktopHeight
$iColora = Hex(PixelGetColor($pixx, $pixy), 6)
$iColorb = Hex(PixelGetColor($pixx*$dpizoom, $pixy*$dpizoom), 6)
MsgBox(0,0,"坐标"&$pixx&","&$pixy&"的颜色值为:"&$iColora&@CRLF&"坐标换算后"&$pixx*$dpizoom&","&$pixy*$dpizoom&"的颜色值为:"&$iColorb)

func DPIzoom()
$dpizoomtmp = 1
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
$colSettings = $objWMIService.ExecQuery("Select * from Win32_DesktopMonitor")
For $objOperatingSystem In $colSettings
        $tmp = $objOperatingSystem.PNPDeviceID
        $EDID = RegRead("HKLM\SYSTEM\CurrentControlSet\Enum" & $tmp & "\Device Parameters", "EDID")
        If $EDID <> "" Then
                $Width = Int(BinaryMid($EDID, 57, 1)) + BitAND(Int(BinaryMid($EDID, 57 + 2, 1)), 240) * 16
;~                 $Height = Int(BinaryMid($EDID, 57 + 3, 1)) + BitAND(Int(BinaryMid($EDID, 57 + 5, 1)), 240) * 16
        $dpizoomtmp = $Width/@DesktopWidth
        EndIf
Next
Return $dpizoomtmp
EndFunc

评分

参与人数 1金钱 +40 收起 理由
floor6ggg + 40 很给力!

查看全部评分

发表于 2020-4-29 18:09:07 | 显示全部楼层
收藏!等换高分屏肯定用得到。。。
发表于 2020-5-3 11:45:22 | 显示全部楼层
没看懂,不是有显示相关的API么
发表于 2022-2-25 08:55:05 | 显示全部楼层
谢谢分享,楼主辛苦!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 22:04 , Processed in 0.191935 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表