要能够运行的例子
功能包括: 获得本机所能显示的分辨率,刷新率 列表,更改分辨率 刷新率

解决方案 »

  1.   

    得到当前屏幕的分辨率: ResWidth = Screen.Width Screen.TwipsPerPixelX ResHeight = Screen.Height Screen.TwipsPerPixelY ScreenRes = ResWidth & "x" & ResHeight ResWidth和ResHeight分别表示屏幕的宽和高,比如这样的结果: 800x600 
      

  2.   

    改变屏幕的分辨率。将以下代码加入模块文件:   Declare Function EnumDisplaySettings Lib "user32" _ Alias "EnumDisplaySettingsA" _ (ByVal lpszDeviceName As Long, _ ByVal iModeNum As Long, _ lpDevMode As Any) As Boolean Declare Function ChangeDisplaySettings Lib "user32" _ Alias "ChangeDisplaySettingsA" _ (lpDevMode As Any, ByVal dwFlags As Long) As Long   Declare Function ExitWindowsEx Lib "user32" _ (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Public Const EWX_LOGOFF = 0 Public Const EWX_SHUTDOWN = 1 Public Const EWX_REBOOT = 2 Public Const EWX_FORCE = 4 Public Const CCDEVICENAME = 32 Public Const CCFORMNAME = 32 Public Const DM_BITSPERPEL = &H40000 Public Const DM_PELSWIDTH = &H80000 Public Const DM_PELSHEIGHT = &H100000 Public Const CDS_UPDATEREGISTRY = &H1 Public Const CDS_TEST = &H4 Public Const DISP_CHANGE_SUCCESSFUL = 0 Public Const DISP_CHANGE_RESTART = 1 Type DEVMODE dmDeviceName As String * CCDEVICENAME dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type 
      

  3.   

    下面的例子将演示如何把屏幕分辨率更改为640x480(保持原来的颜色数)。   Dim DevM As DEVMODE 'DevM收集信息 erg& = EnumDisplaySettings(0&, 0&, DevM) '不改变颜色数目是因为如果改变颜色数就要重新启动   DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT 'Or DM_BITSPERPEL DevM.dmPelsWidth = 640 '屏幕宽度 DevM.dmPelsHeight = 480 '屏幕高度 'DevM.dmBitsPerPel = 32 (还可以为 8, 16, 32甚至4) 调整分辩率和取当前分辩率   改变显示模式并检查是否可能 erg& = ChangeDisplaySettings(DevM, CDS_TEST)'检查是否成功 Select Case erg& Case DISP_CHANGE_RESTART an = MsgBox("你现在必须重新启动系统,执行吗?", vbYesNo + vbSystemModal, "消息") If an = vbYes Then erg& = ExitWindowsEx(EWX_REBOOT, 0&) End If Case DISP_CHANGE_SUCCESSFUL erg& = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY) MsgBox "一切正常!", vbOKOnly + vbSystemModal, "成功" Case Else MsgBox "显示模式不支持", vbOKOnly + vbSystemModal, "错误"End Select End Sub
      

  4.   

    另一个例子:
    在VB中改变显示器的分辨率 
    ---- 有一些游戏如《Delta Force》可以让玩家在玩游戏时改变显示器的分辨率,现在介绍一种在VB中实现的方法。 ---- 这里要用到一个在VB的API浏览器中没有的函数,声明如下: ---- Private Declare Function ChangeDisplaySettings Lib "user32" Alias_ "ChangeDisplaySettingsA" (ByVal lpDevMode As Long, ByVal dwflags As Long) As Long ---- 第一个参数指向一个DEVMODE结构,第二个参数为一些标志,这些标志有: 
    标志 
    含义 

    当前屏幕的图形模式将被动态地改变 
    CDS_UPDATEREGISTRY 
    当前屏幕的图形模式将被动态地改 
    变并且注册表里的屏幕分辨率的值也_ 
    被更新 
    (注册表中保存有屏幕的分辨率及相关属性 
    ,以便以后开机或重_ 
    起时加载), 
    在USER文件中也保存该模式 CDS_TEST 仅供系统测试, 
    看这种图形模式是否能够正常 CDS_FULLSCREEN 临时改变 
    Windows NT: 
    如果切换到另外的桌面,该模式不会被保存 CDS_GLOBAL 
    该设置将被保存在全局设置区内,对所有用户都起作用 CDS_SET_PRIMARY 
    设置该设备为私有设备,这里对屏幕对象不起作用 CDS_RESET 恢复以前的设置 
    声明: 
    Private Declare Function 
    lstrcpy Lib "kernel32" 
    Alias "lstrcpyA" (lpString1 As_ 
    Any, lpString2 As Any) As Long Private Declare Function ChangeDisplaySettings 
    Lib "user32" Alias_ 
    "ChangeDisplaySettingsA" (ByVal lpDevMode As Long, 
    ByVal dwflags As Long) As Long Private Const CCHDEVICENAME = 32 
    Private Const CCHFORMNAME = 32 Private Type DEVMODE’详细参考MSDN 
    dmDeviceName As String * CCHDEVICENAME 
    dmSpecVersion As Integer 
    dmDriverVersion As Integer 
    dmSize As Integer 
    dmDriverExtra As Integer 
    dmFields As Long 
    dmOrientation As Integer 
    dmPaperSize As Integer 
    dmPaperLength As Integer 
    dmPaperWidth As Integer 
    dmScale As Integer 
    dmCopies As Integer 
    dmDefaultSource As Integer 
    dmPrintQuality As Integer 
    dmColor As Integer 
    dmDuplex As Integer 
    dmYResolution As Integer 
    dmTTOption As Integer 
    dmCollate As Integer 
    dmFormName As String * CCHFORMNAME 
    dmUnusedPadding As Integer 
    dmBitsPerPel As Integer 
    dmPelsWidth As Long 
    dmPelsHeight As Long 
    dmDisplayFlags As Long 
    dmDisplayFrequency As Long 
    End Type Public Function SetScreen 
    (Width As Integer, 
    Height As Integer, Optional Color 
    As Integer = 16) As Long'这里的 
    16指的是真16色 
    Const DM_PELSWIDTH = &H80000 
    Const DM_PELSHEIGHT = &H100000 
    Const DM_BITSPERPEL = &H40000 
    Dim NewDevMode As DEVMODE 
    Dim pDevmode As Long With NewDevMode 
    .dmSize = Len(NewDevMode)'一般为122 
    If Color = -1 Then 
    .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT 
    Else 
    .dmFields = DM_PELSWIDTH Or 
    DM_PELSHEIGHT Or DM_BITSPERPEL 
    End If 
    .dmPelsWidth = Width 
    .dmPelsHeight = Height 
    If Color < > -1 Then 
    .dmBitsPerPel = Color 
    End If 
    End With pDevmode = lstrcpy(NewDevMode, NewDevMode) 
    SetDisplayMode = ChangeDisplaySettings(pDevmode, 0) 
    End Function 
    Private Sub Change_Click() 
    SetScreen Val(Text1), Val(Text2), Val(Text3) 
    End Sub ’下面三个文本框分别存放分辨率和颜色值 
    Private Sub Text1_GotFocus() 
    Text1.SelStart = 0 
    Text1.SelLength = Len(Text1) 
    End Sub Private Sub Text2_GotFocus() 
    Text2.SelStart = 0 
    Text2.SelLength = Len(Text1) 
    End Sub Private Sub Text3_GotFocus() 
    Text3.SelStart = 0 
    Text3.SelLength = Len(Text1) 
    End Sub 
    该程序在VB6.0企业版下调试通过。 
      

  5.   

    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long '该函数的M_CXSCREEN,SYSCREEN返回的是
    '屏幕的大小,但是,得出的结果Y不符,而Screen.Height / Screen.TwipsPerPixelY与Screen.width / Screen.TwipsPerPixelX得出
    'X不符,故合用两者,目前测试正确。
    Public Function GetX() As String
        Dim X, Y As String
        X = GetSystemMetrics(m_cxscreen)
        Y = Screen.Height / Screen.TwipsPerPixelY
        GetX = X & "X" & Y
    End Function
    Private Sub Command1_Click()
       Dim A, b As String
        Text1.Text = GetX()
    End Sub