Private Declare Function ChangeDisplaySettings Lib "user32" Alias_ "ChangeDisplaySettingsA" (ByVal lpDevMode As Long, ByVal dwflags As Long) As Long 第一个参数指向一个DEVMODE结构,第二个参数为一些标志,这些标志有: 标志含义 0 当前屏幕的图形模式将被动态地改变 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
另一种方法: 调整分辩率和取当前分辩率 怎样得到当前的屏幕分辨率? 在程序设计中我们经常要改变窗体的大小,而这也依赖于屏幕的分辨率,下面的例子将演示如何得到当前屏幕的分辨率: ResWidth = Screen.Width Screen.TwipsPerPixelX ResHeight = Screen.Height Screen.TwipsPerPixelY ScreenRes = ResWidth & "x" & ResHeight ResWidth和ResHeight分别表示屏幕的宽和高,比如这样的结果: 800x600 -------------------------------------------------------------------------------- 如何改变屏幕的分辨率? 对于很多VB程序员来说怎样改变屏幕的分辨率一直是一个难题,而且在API-Viewer里竟然没有EnumDisplaySettings和ChangeDisplaySettings!!遵从以下的步骤,你就可以改变屏幕的分辨率。将以下代码加入模块文件: 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 2、下面的例子将演示如何把屏幕分辨率更改为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
标志含义
0
当前屏幕的图形模式将被动态地改变
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
调整分辩率和取当前分辩率
怎样得到当前的屏幕分辨率? 在程序设计中我们经常要改变窗体的大小,而这也依赖于屏幕的分辨率,下面的例子将演示如何得到当前屏幕的分辨率: ResWidth = Screen.Width Screen.TwipsPerPixelX ResHeight = Screen.Height Screen.TwipsPerPixelY ScreenRes = ResWidth & "x" & ResHeight ResWidth和ResHeight分别表示屏幕的宽和高,比如这样的结果: 800x600
-------------------------------------------------------------------------------- 如何改变屏幕的分辨率? 对于很多VB程序员来说怎样改变屏幕的分辨率一直是一个难题,而且在API-Viewer里竟然没有EnumDisplaySettings和ChangeDisplaySettings!!遵从以下的步骤,你就可以改变屏幕的分辨率。将以下代码加入模块文件: 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 2、下面的例子将演示如何把屏幕分辨率更改为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