分辨率从现在的800 600 改到1024 768主要用了下面这个函数 返回值已经是0了 (0表示分辨率改变成功吧) 可屏幕分辨率没有变化 烦请各位帮忙看一下 万分感谢地说!!~ :)i = SetDisplayMode(1024, 768, 32)Public Function SetDisplayMode(Width As Integer, Height As Integer, Color
As Integer) As Long
Dim NewDevMode As DEVMODE
Dim pDevmode As Long
With NewDevMode
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, CDS_UPDATEREGISTRY)
End Function其它的声明如下
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_BITSPERPEL = &H40000
Const CDS_UPDATEREGISTRY = &H1
Const CDS_TEST = &H4
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1
As Any, lpString2 As Any) As LongPublic Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA
" (ByVal lpDevMode As Long, ByVal dwflags As Long) As LongType DEVMODE
…… '该类型中若干个定义 太长 不贴了
End Type
As Integer) As Long
Dim NewDevMode As DEVMODE
Dim pDevmode As Long
With NewDevMode
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, CDS_UPDATEREGISTRY)
End Function其它的声明如下
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000
Const DM_BITSPERPEL = &H40000
Const CDS_UPDATEREGISTRY = &H1
Const CDS_TEST = &H4
Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (lpString1
As Any, lpString2 As Any) As LongPublic Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA
" (ByVal lpDevMode As Long, ByVal dwflags As Long) As LongType DEVMODE
…… '该类型中若干个定义 太长 不贴了
End Type
解决方案 »
- vb RichTextBox 获得显示器上显示的字符串
- vs excel,用vs2008的vb做一个程序,已经从数据库查询到相关的数据
- 关于VB2005调用vc dll的问题.
- GetObject和CreateObject
- 求VB 判断弹出窗口后程序继续的问题?
- 问一个很菜的问题!
- 我用一句[mciSendString "status MyCD number of tracks", vbNullString, 0, 0]返回CD盘上的曲目总数,可是我想使用这个总数,用什么办法能
- 为啥vb的界面有时无法重绘呢?【见图】
- 急!如何用一个ado控件指向access数据库中不同的表,并用一个datagrid控件显示?
- 关于 PopupMenu 的问题,摸不着头脑为什么会这样?
- VB中的多线程编程
- VB里是不是可以改变菜单的外观?!
Option Explicit
Private Sub Command1_Click()
Dim DevM As DEVMODE '将取得的讯息存放在 DevM
Dim erg As Long
erg& = EnumDisplaySettings(0&, 0&, DevM)
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT 'Or DM_BITSPERPEL
DevM.dmPelsWidth = 800 '想要设定的屏幕宽度
DevM.dmPelsHeight = 600 '想要设定的屏幕高度
'我们不更改色板,因为一旦更改色板就必须重新开机!
'DevM.dmBitsPerPel = 32 (could be 8, 16, 32 or even 4) '此行可用于改变色板
'以下这行指令会暂时更改屏幕的分辨率,是测试性的,不一定成功,
'不过因为没将设定值写到注册表,所以虽然可能更改成功,
'但是一旦重新开机后,会自动恢复成更改前的设定值
erg& = ChangeDisplaySettings(DevM, CDS_TEST)
'上面的指令若成功,而且您想永久性的更改使用者的屏幕分辨率,
'您还必须使用下一行指令,将资料写到注册表
'erg& = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)
'但是如果您只是想暂时更改使用者的屏幕分辨率,就不需要了.
'当然并不是您随便设定一个值,就一定会成功的更改屏幕分辨率,
'所以还需要检查是否更改成功!下面的程序就是检查是否更改成功
Dim an As Long
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
模块:
Option ExplicitDeclare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As BooleanDeclare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwFlags As Long) As LongDeclare Function ExitWindowsEx Lib "user32" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As LongPublic 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 = 1Type 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