;Autor: Rescator EnableExplicit Define EventID #MONITORINFOF_PRIMARY=$1 #VREFRESH=116 Structure displaymonitors_struct primary.l x.l y.l width.l height.l depth.l refresh.l display.s EndStructure NewList DisplayMonitors.displaymonitors_struct() Structure MONITORINFOEX cbSize.l rcMonitor.RECT rcWork.RECT dwFlags.l szDevice.s{#CCHDEVICENAME} EndStructure Procedure.l EnumDisplayMonitorsProc(monitor.l,dc.l,*rect.RECT,userdata.l) Protected mi.MONITORINFOEX Shared DisplayMonitors() mi\cbSize=SizeOf(MONITORINFOEX) GetMonitorInfo_(monitor,mi) AddElement(DisplayMonitors()) DisplayMonitors()\display=mi\szDevice DisplayMonitors()\x=mi\rcMonitor\left DisplayMonitors()\y=mi\rcMonitor\top DisplayMonitors()\width=mi\rcMonitor\right-mi\rcMonitor\left DisplayMonitors()\height=mi\rcMonitor\bottom-mi\rcMonitor\top If (mi\dwFlags & #MONITORINFOF_PRIMARY)=#MONITORINFOF_PRIMARY DisplayMonitors()\primary=#True Else DisplayMonitors()\primary=#False EndIf DisplayMonitors()\depth=GetDeviceCaps_(dc,#BITSPIXEL) DisplayMonitors()\refresh=GetDeviceCaps_(dc,#VREFRESH) ProcedureReturn #True EndProcedure Procedure.l DisplayEnumerate() Shared DisplayMonitors() Protected dc.l,dev.DEVMODE ClearList(DisplayMonitors()) If OSVersion()>#PB_OS_Windows_NT_4 dc=GetDC_(#Null) EnumDisplayMonitors_(dc,#Null,@EnumDisplayMonitorsProc(),0) If dc : ReleaseDC_(#Null,dc) : EndIf Else AddElement(DisplayMonitors()) DisplayMonitors()\display="DISPLAY" DisplayMonitors()\x=0 DisplayMonitors()\y=0 DisplayMonitors()\width=GetSystemMetrics_(#SM_CXSCREEN) DisplayMonitors()\height=GetSystemMetrics_(#SM_CYSCREEN) DisplayMonitors()\primary=#True If EnumDisplaySettings_(#Null,#ENUM_CURRENT_SETTINGS,dev) DisplayMonitors()\depth=dev\dmBitsPerPel DisplayMonitors()\refresh=dev\dmDisplayFrequency Else DisplayMonitors()\depth=16 DisplayMonitors()\refresh=60 EndIf EndIf ProcedureReturn ListSize(DisplayMonitors()) EndProcedure If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) ListViewGadget(1,10,10,WindowWidth(0)-20,WindowHeight(0)-20,0) DisplayEnumerate() ForEach DisplayMonitors() AddGadgetItem(1,-1,"Display Name: "+DisplayMonitors()\display,0,0) If DisplayMonitors()\primary AddGadgetItem(1,-1,"Display Primary: "+"True",0,0) Else AddGadgetItem(1,-1,"Display Primary: "+"False",0,0) EndIf AddGadgetItem(1,-1,"Display Depth: "+Str(DisplayMonitors()\depth)+"bit",0,0) AddGadgetItem(1,-1,"Display Refresh: "+Str(DisplayMonitors()\refresh)+"Hz",0,0) AddGadgetItem(1,-1,"Display X,Y: "+Str(DisplayMonitors()\x)+", "+Str(DisplayMonitors()\y),0,0) AddGadgetItem(1,-1,"Display Size: "+Str(DisplayMonitors()\width)+"x"+Str(DisplayMonitors()\height),0,0) AddGadgetItem(1,-1,"",0,0) Next Repeat EventID=WaitWindowEvent() If EventID = #PB_Event_CloseWindow End EndIf ForEver EndIf