01-29-2018, 07:03 AM
(This post was last modified: 01-29-2018, 09:06 PM by Gintaras.
Edit Reason: added [int&primaryMonitorIndex]
)
Function GetMonitors
;/
function# [ARRAY(int)&aHandles] [ARRAY(RECT)&aRectangles] [ARRAY(MONITORINFOEX)&aInfos] [int&primaryMonitorIndex]
;Gets information about display monitors.
;Returns the number of monitors.
;aHandles - if used, receives monitor handles.
;aRectangles - if used, receives monitor rectangles.
;aInfos - if used, receives monitor infos. MONITORINFOEX reference - look in MSDN.
;primaryMonitorIndex - if used, receives 0-based index of the primary monitor in the array.
if &aHandles or &aRectangles or &aInfos or &primaryMonitorIndex
,if(&aHandles) aHandles=0
,if(&aRectangles) aRectangles=0
,if(&aInfos) aInfos=0
,int i
,
,EnumDisplayMonitors 0 0 &sub.Proc 0
,
,if(&aHandles) ret aHandles.len
,if(&aRectangles) ret aRectangles.len
,if(&aInfos) ret aInfos.len
ret GetSystemMetrics(SM_CMONITORS)
#sub Proc v
function# hMonitor hdcMonitor RECT*lprcMonitor dwData
if(&aHandles) aHandles[]=hMonitor
if(&aRectangles) aRectangles[]=*lprcMonitor
if(&aInfos or &primaryMonitorIndex)
,MONITORINFOEX mi.cbSize=sizeof(MONITORINFOEX)
,GetMonitorInfo(hMonitor +&mi)
,if(&aInfos) aInfos[]=mi
,if(&primaryMonitorIndex and mi.dwFlags&MONITORINFOF_PRIMARY) primaryMonitorIndex=i
,i+1
ret 1