看看这个例子:工程文件名:Chdsp.vbp
Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\PWIN95\SYSTEM\\STDOLE2.TLB#OLE Automation
Module=Module1; ChDsp.bas
Form=ChDsp.frm
Startup="Form1"
HelpFile=""
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="KJ Studio"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
模块名:Chdsp.bas
Attribute VB_Name = "Module1"
Option ExplicitPublic Const CCHFORMNAME = 32
Public Const CCHDEVICENAME = 32
Public Const DM_BITSPERPEL = &H40000
Public Const DM_PELSWIDTH = &H80000
Public Const DM_PELSHEIGHT = &H100000Public Const CDS_UPDATEREGISTRY = 1
Public Const CDS_TEST = 2Type DEVMODE
        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 TypeDeclare 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窗体文件名:Chdsp.frm
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "ChangeDisplaySettings 范例程序"
   ClientHeight    =   3240
   ClientLeft      =   60
   ClientTop       =   348
   ClientWidth     =   6252
   LinkTopic       =   "Form1"
   ScaleHeight     =   3240
   ScaleWidth      =   6252
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command2 
      Caption         =   "设定"
      Height          =   495
      Left            =   4440
      TabIndex        =   2
      Top             =   1080
      Width           =   1695
   End
   Begin VB.CommandButton Command1 
      Caption         =   "测试"
      Height          =   495
      Left            =   4440
      TabIndex        =   1
      Top             =   240
      Width           =   1695
   End
   Begin VB.ListBox List1 
      Height          =   2748
      Left            =   240
      TabIndex        =   0
      Top             =   240
      Width           =   3975
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = FalseOption ExplicitDim nDisplay As Integer, devM() As DEVMODEPrivate Sub Command1_Click()
    devM(List1.ListIndex).dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL    If ChangeDisplaySettings(devM(List1.ListIndex), CDS_TEST) = 0 Then
        MsgBox "测试成功!"
    Else
        MsgBox "测试失败!"
    End If
End SubPrivate Sub Command2_Click()
    devM(List1.ListIndex).dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL    If ChangeDisplaySettings(devM(List1.ListIndex), 0) = 0 Then
        MsgBox "设定成功!"
    Else
        MsgBox "设定失败!"
    End If
End SubPrivate Sub Form_Load()
    Dim HasMore As Long, i As Integer
    
    i = 0
    Do
        ReDim Preserve devM(0 To i)
        
        HasMore = EnumDisplaySettings(0, i, devM(i))
        If HasMore = 0 Then Exit Do
        If devM(i).dmBitsPerPel = 24 Then
            List1.AddItem "全彩" & vbTab & _
                      devM(i).dmPelsWidth & vbTab & devM(i).dmPelsHeight
        Else
            List1.AddItem 2 ^ devM(i).dmBitsPerPel & vbTab & _
                      devM(i).dmPelsWidth & vbTab & devM(i).dmPelsHeight
        End If
        i = i + 1
    Loop
    nDisplay = i
End Sub

解决方案 »

  1.   

    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long    'Constants for GetSystemMetrics     Const SM_CXSCREEN = 0        ' Width of screen
         Const SM_CYSCREEN = 1        ' Height of screen
    Sub Get_System_Metrics()    Dim XVal As Long, YVal As Long
        YVal = GetSystemMetrics(SM_CYSCREEN)
        XVal = GetSystemMetrics(SM_CXSCREEN)
        MsgBox "您的屏幕分辨率为: " & XVal & " X " & YVal
        
    End SubPrivate Sub Command1_Click()
    Get_System_Metrics
    End Sub
      

  2.   

    minajo21(大眼睛)  如何取得刷新频率?
      

  3.   

    Const WM_DISPLAYCHANGE = &H7E
    Const HWND_BROADCAST = &HFFFF&
    Const EWX_LOGOFF = 0
    Const EWX_SHUTDOWN = 1
    Const EWX_REBOOT = 2
    Const EWX_FORCE = 4
    Const CCDEVICENAME = 32
    Const CCFORMNAME = 32
    Const DM_BITSPERPEL = &H40000
    Const DM_PELSWIDTH = &H80000
    Const DM_PELSHEIGHT = &H100000
    Const CDS_UPDATEREGISTRY = &H1
    Const CDS_TEST = &H4
    Const DISP_CHANGE_SUCCESSFUL = 0
    Const DISP_CHANGE_RESTART = 1
    Public Const BITSPIXEL = 12
    Private 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
    Public Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
    Public Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As Long
    Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
    Public Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As Any) As Long
    Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    'Dim OldX As Long, OldY As Long, nDC As Long
    Public nDC As Long'改变屏幕分辨率
    Public Sub ChangeRes(X As Long, Y As Long, Bits As Long)
        Dim DevM As DEVMODE, ScInfo As Long, erg As Long, an As VbMsgBoxResult
        'Get the info into DevM
        erg = EnumDisplaySettings(0&, 0&, DevM)
        'This is what we're going to change
        DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
        DevM.dmPelsWidth = X  'ScreenWidth
        DevM.dmPelsHeight = Y 'ScreenHeight
        DevM.dmBitsPerPel = Bits '(can be 8, 16, 24, 32 or even 4)
        'Now change the display and check if possible
        erg = ChangeDisplaySettings(DevM, CDS_TEST)
        'Check if succesfull
        Select Case erg&
            Case DISP_CHANGE_RESTART
                an = MsgBox("You've to reboot", vbYesNo + vbSystemModal, "Info")
                If an = vbYes Then
                    erg& = ExitWindowsEx(EWX_REBOOT, 0&)
                End If
            Case DISP_CHANGE_SUCCESSFUL
                erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
                ScInfo = Y * 2 ^ 16 + X
                'Notify all the windows of the screen resolution change
                SendMessage HWND_BROADCAST, WM_DISPLAYCHANGE, ByVal Bits, ByVal ScInfo
    '            MsgBox "Everything's ok", vbOKOnly + vbSystemModal, "It worked!"
            Case Else
    '            MsgBox "Mode not supported", vbOKOnly + vbSystemModal, "Error"
        End Select
    End Sub
      

  4.   

    ''module代码:
    '‘---------------以下代码用于得到屏幕的设置参数--------------
    '取指定设备信息API函数
    Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
    '三个屏幕常量
    Public Const HORZRES = 8
    Public Const VHORZRES = 10
    Public Const BITSPIXEL = 12'---------------通过字符COPY进行数据类型转换--------------
    'Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1 As Any, lpString2 As Any) As Long
    Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long'‘------------------以下结构用于屏幕的初始化-----------------
    Const CCHDEVICENAME = 32
    Const CCHFORMNAME = 32Private Type DEVMODE       'DEVMODE类型中dmDisplayFrequency 成员是设置刷新率的。
    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
    '------------------设置屏幕的核心API-----------------
    Private Declare Function ChangeDisplaySettings Lib "User32" Alias "ChangeDisplaySettingsA" (ByVal lpDevMode As Long, ByVal dwflags As Long) As Long'‘------------------设置屏幕的函数-----------------
    Public Function SetDispMode(Width As Integer, Height As Integer, Color As Integer) As Long
    '(SetDispMode是自己构造的更改屏幕设置的函数来,
    '它的三个参数Width?Height和Color分别是屏幕的横向分辨率?
    '纵向分辨率,颜色位数,其值可为24,16,0等。0为原有颜色设置。)
     Const DM_PELSWIDTH = &H80000
     Const DM_PELSHEIGHT = &H100000
     Const DM_BITSPERPEL = &H40000
     Dim NewDevMode As DEVMODE
     Dim pDevmode As Long
     With NewDevMode
      .dmSize = 122
      If Color = 0 Then
       '‘如果Color=0则只改变屏幕的分辨率,而不改变色彩。
       .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
      Else
             '‘如果Color不等0则改变屏幕的分辨率和色彩。
       .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL
      End If
      .dmPelsWidth = Width
      .dmPelsHeight = Height
      If Color <> 0 Then
      .dmBitsPerPel = Color
      End If
     End With
     
     pDevmode = lstrcpy(NewDevMode, NewDevMode)
    '‘得到一个指向NewDevMode结构的Long型的指针。
      ChangeDisplaySettings pDevmode, 0
    End Function''''form代码:
    Option Explicit
     Dim H, V, Color As Long
        '声名变量,用于保存最初屏幕设置
     Private Sub Form_Load()
    '‘---------------以下代码用于得到最初的屏幕设备--------------
      H = GetDeviceCaps(Form1.hdc, HORZRES)
      V = GetDeviceCaps(Form1.hdc, VHORZRES)
      Color = GetDeviceCaps(Form1.hdc, BITSPIXEL)
     End Sub Private Sub Command1_Click()
       '‘调用SetDispMode函数改变屏幕设置
       SetDispMode 800, 600, 16
     End Sub Private Sub Command2_Click()
       '‘恢复最初屏幕设置
      SetDispMode CInt(H), CInt(V), CInt(Color)
      

  5.   

    http://expert.csdn.net/Expert/topic/1447/1447078.xml?temp=.1732599