分辨率修改和副显示器状态监测

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=77664

; 获取监视器1的分辨率
MsgBox % ScreenResolution_Get("\\.\DISPLAY1")

; 获取监视器1所有屏幕分辨率的有效匹配列表
MsgBox % ScreenResolution_List("\\.\DISPLAY1")

; 修改监视器1的分辨率
;MsgBox % ScreenResolution_Set("1280x720@60", "\\.\DISPLAY1")

; 这样写可检测监视器2是否存在,返回0为存在并启动,返回-1为存在但没启用,返回-2为监视器不存在
MsgBox % ScreenResolution_Set("", "\\.\DISPLAY2")

ScreenResolution_Get(Disp:=0) {              ; v0.90 By SKAN on D36I/D36M @ tiny.cc/screenresolution
Local DM, N:=VarSetCapacity(DM,220,0) 
Return DllCall("EnumDisplaySettingsW", (Disp=0 ? "Ptr" : "WStr"),Disp, "Int",-1, "Ptr",&DM)=0 ? ""
     : Format("{:}x{:}@{:}", NumGet(DM,172,"UInt"),NumGet(DM,176,"UInt"),NumGet(DM,184,"UInt")) 
}

ScreenResolution_List(Disp:=0) {             ; v0.90 By SKAN on D36I/D36M @ tiny.cc/screenresolution
Local DM, N:=VarSetCapacity(DM,220,0), L:="", DL:=","
  While DllCall("EnumDisplaySettingsW", (Disp=0 ? "Ptr" : "WStr"),Disp, "Int",A_Index-1, "Ptr",&DM)
  If ( NumGet(DM,168,"UInt")=32 && NumGet(DM,184,"UInt")>59)
    L.=Format("{:}x{:}@{:}" . DL, NumGet(DM,172,"UInt"),NumGet(DM,176,"UInt"),NumGet(DM,184,"UInt")) 
Return RTrim(L,DL) 
}

ScreenResolution_Set(WxHaF, Disp:=0) {       ; v0.90 By SKAN on D36I/D36M @ tiny.cc/screenresolution
Local DM, N:=VarSetCapacity(DM,220,0), F:=StrSplit(WxHaF,["x","@"],A_Space)
Return DllCall("ChangeDisplaySettingsExW",(Disp=0 ? "Ptr" : "WStr"),Disp, "Ptr",NumPut(F[3]
     , NumPut(F[2], NumPut(F[1], NumPut(32, NumPut(0x5C0000, NumPut(220,DM,68,"UShort")+2,"UInt")+92
     , "UInt"),"UInt"),"UInt")+4,"UInt")-188, "Ptr",0, "Int",0, "Int",0)  
}

给TA捐赠
共{{data.count}}人
人已捐赠
其他

多坐标提示

2021-12-2 15:43:34

其他

分享Google后台翻译+划词翻译-改

2021-12-2 15:43:47

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索