用API函数改写屏幕分辨率的问题?
模块定义如下:
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
Public Declare Function SystemParametersInfo Lib "User32"_ Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As_ Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public apiRECT As RECT
Public Const SPI_GETWORKAREA = 48
Const CCHDEVICENAME = 32
Const CCHFORMNAME = 32
Private Type 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 Type
' 动态改变屏幕设置的函数
Public Function SetDisplayMode(Width As Integer, Height As Integer,_ Color As Integer) As Long
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 = -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
窗体载入时语句:
'得到屏幕当前分辨率
SystemParametersInfo SPI_GETWORKAREA, vbNull, VarPtr(apiRECT), 0
'将屏幕当前分辨率保存于 Screen.txt
Open App.Path + "\" + "Screen.txt" For Output As #1
Write #1, apiRECT.Right
Close #1
'将屏幕分辨率改为800×600
SetDisplayMode 800, 600, 16
但此种方法并没有改变1024*768的分辨率为800*600的分辨率,在单步执行时
SetDisplayMode 函数的返回值为-2,是不是函数执行失败啊!哪我应该怎么解决呢?
谢谢高人指点啊?