当前位置: 代码迷 >> PB >> 怎么获取双屏电脑上面副屏的分辨率
  详细解决方案

怎么获取双屏电脑上面副屏的分辨率

热度:29   发布时间:2016-04-29 05:33:19.0
如何获取双屏电脑上面副屏的分辨率?
如题:
我现在有台双屏机器,想用PB获取到副屏的分辨率,但现在我只能获取到主屏的分辨率。
主屏用:GetSystemMetrics 或 getenvironment两个方法都可以获取到,但副屏确没办法获取到,求大牛帮忙。
谢谢!
------解决方案--------------------
可以参考以下VB的代码


'In a form (Form1)
Private Sub Form_Load()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    'set the graphics mode of this form to persistent
    Me.AutoRedraw = True
    'start the enumeration
    EnumDisplayMonitors ByVal 0&, ByVal 0&, AddressOf MonitorEnumProc, ByVal 0&
End Sub



'In a module
Public Const MONITORINFOF_PRIMARY = &H1
Public Const MONITOR_DEFAULTTONEAREST = &H2
Public Const MONITOR_DEFAULTTONULL = &H0
Public Const MONITOR_DEFAULTTOPRIMARY = &H1
Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Public Type MONITORINFO
    cbSize As Long
    rcMonitor As RECT
    rcWork As RECT
    dwFlags As Long
End Type
Public Type POINT
    x As Long
    y As Long
End Type
Public Declare Function GetMonitorInfo Lib "user32.dll" Alias "GetMonitorInfoA" (ByVal hMonitor As Long, ByRef lpmi As MONITORINFO) As Long
Public Declare Function MonitorFromPoint Lib "user32.dll" (ByVal x As Long, ByVal y As Long, ByVal dwFlags As Long) As Long
Public Declare Function MonitorFromRect Lib "user32.dll" (ByRef lprc As RECT, ByVal dwFlags As Long) As Long
Public Declare Function MonitorFromWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal dwFlags As Long) As Long
Public Declare Function EnumDisplayMonitors Lib "user32.dll" (ByVal hdc As Long, ByRef lprcClip As Any, ByVal lpfnEnum As Long, ByVal dwData As Long) As Long
Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Public Function MonitorEnumProc(ByVal hMonitor As Long, ByVal hdcMonitor As Long, lprcMonitor As RECT, ByVal dwData As Long) As Long
    Dim MI As MONITORINFO, R As RECT
    Debug.Print "Moitor handle: " + CStr(hMonitor)
    'initialize the MONITORINFO structure
    MI.cbSize = Len(MI)
    'Get the monitor information of the specified monitor
    GetMonitorInfo hMonitor, MI
    'write some information on teh debug window
    Debug.Print "Monitor Width/Height: " + CStr(MI.rcMonitor.Right - MI.rcMonitor.Left) + "x" + CStr(MI.rcMonitor.Bottom - MI.rcMonitor.Top)
    Debug.Print "Primary monitor: " + CStr(CBool(MI.dwFlags = MONITORINFOF_PRIMARY))
    'check whether Form1 is located on this monitor
    If MonitorFromWindow(Form1.hwnd, MONITOR_DEFAULTTONEAREST) = hMonitor Then
        Debug.Print "Form1 is located on this monitor"
    End If
    'heck whether the point (0, 0) lies within the bounds of this monitor
    If MonitorFromPoint(0, 0, MONITOR_DEFAULTTONEAREST) = hMonitor Then
        Debug.Print "The point (0, 0) lies wihthin the range of this monitor..."
    End If
    'check whether Form1 is located on this monitor
    GetWindowRect Form1.hwnd, R
    If MonitorFromRect(R, MONITOR_DEFAULTTONEAREST) = hMonitor Then
        Debug.Print "The rectangle of Form1 lies within this monitor"
    End If
    Debug.Print ""
    'Continue enumeration
    MonitorEnumProc = 1
End Function
  相关解决方案