aaronkempf
asked on
refresh rate on API Call
im using the code below in order to change the resolution.
ive noticed that this is causing the refresh rate to be set too low (thus looking like crap because it is shaky)
is there a better way to do this (for deployment in a mixed OS enviornment to perhaps 100 desktops)
__________________________ __________ __________ _
from www.freevbcode.com
__________________________ __________ __________ _
Option Explicit
Private Const EWX_REBOOT = 2
Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H4
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private Type typDevMODE
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
Private Declare Function EnumDisplaySettings Lib _
"user32" Alias "EnumDisplaySettingsA" _
(ByVal lpszDeviceName As Long, ByVal iModeNum As Long, _
lptypDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib _
"user32" Alias "ChangeDisplaySettingsA" (lptypDevMode As Any, _
ByVal dwFlags As Long) As Long
Private Declare Function ExitWindowsEx Lib _
"user32" (ByVal uFlags As Long, _
ByVal dwReserved As Long) As Long
Public Function ChangeDisplayResolution(Ne wWidth As Long, _
NewHeight As Long) As Boolean
'Usage: ChangeDisplayResolution 800, 600
'Returns: True if succesful, false otherwise
'Comments: Problems have been reported using this code for
'resolutions higher than 1024 X 768. We recommend not using this
'snippet to go above this limit.
Dim typDM As typDevMODE
Dim lRet As Long
Dim iResp As Integer
'typDM = pointer to info about current
'display settings
lRet = EnumDisplaySettings(0, 0, typDM)
If lRet = 0 Then Exit Function
' Set the new resolution.
With typDM
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
.dmPelsWidth = NewWidth
.dmPelsHeight = NewHeight
End With
'Do the update -- Pass update structure to
'ChangeDisplaySettings API function
lRet = ChangeDisplaySettings(typD M, CDS_UPDATEREGISTRY)
Select Case lRet
Case DISP_CHANGE_RESTART
iResp = MsgBox _
("You must restart your computer to apply these changes." & _
vbCrLf & vbCrLf & "Restart now?", _
vbYesNo + vbInformation, "Screen Resolution Changed")
If iResp = vbYes Then
ChangeDisplayResolution = True
Reboot
End If
Case DISP_CHANGE_SUCCESSFUL
ChangeDisplayResolution = True
Case Else
ChangeDisplayResolution = False
End Select
End Function
Private Sub Reboot()
Dim lRet As Long
lRet = ExitWindowsEx(EWX_REBOOT, 0)
End Sub
ive noticed that this is causing the refresh rate to be set too low (thus looking like crap because it is shaky)
is there a better way to do this (for deployment in a mixed OS enviornment to perhaps 100 desktops)
__________________________
from www.freevbcode.com
__________________________
Option Explicit
Private Const EWX_REBOOT = 2
Private Const CCDEVICENAME = 32
Private Const CCFORMNAME = 32
Private Const DM_BITSPERPEL = &H40000
Private Const DM_PELSWIDTH = &H80000
Private Const DM_PELSHEIGHT = &H100000
Private Const CDS_UPDATEREGISTRY = &H1
Private Const CDS_TEST = &H4
Private Const DISP_CHANGE_SUCCESSFUL = 0
Private Const DISP_CHANGE_RESTART = 1
Private Type typDevMODE
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
Private Declare Function EnumDisplaySettings Lib _
"user32" Alias "EnumDisplaySettingsA" _
(ByVal lpszDeviceName As Long, ByVal iModeNum As Long, _
lptypDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib _
"user32" Alias "ChangeDisplaySettingsA" (lptypDevMode As Any, _
ByVal dwFlags As Long) As Long
Private Declare Function ExitWindowsEx Lib _
"user32" (ByVal uFlags As Long, _
ByVal dwReserved As Long) As Long
Public Function ChangeDisplayResolution(Ne
NewHeight As Long) As Boolean
'Usage: ChangeDisplayResolution 800, 600
'Returns: True if succesful, false otherwise
'Comments: Problems have been reported using this code for
'resolutions higher than 1024 X 768. We recommend not using this
'snippet to go above this limit.
Dim typDM As typDevMODE
Dim lRet As Long
Dim iResp As Integer
'typDM = pointer to info about current
'display settings
lRet = EnumDisplaySettings(0, 0, typDM)
If lRet = 0 Then Exit Function
' Set the new resolution.
With typDM
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
.dmPelsWidth = NewWidth
.dmPelsHeight = NewHeight
End With
'Do the update -- Pass update structure to
'ChangeDisplaySettings API function
lRet = ChangeDisplaySettings(typD
Select Case lRet
Case DISP_CHANGE_RESTART
iResp = MsgBox _
("You must restart your computer to apply these changes." & _
vbCrLf & vbCrLf & "Restart now?", _
vbYesNo + vbInformation, "Screen Resolution Changed")
If iResp = vbYes Then
ChangeDisplayResolution = True
Reboot
End If
Case DISP_CHANGE_SUCCESSFUL
ChangeDisplayResolution = True
Case Else
ChangeDisplayResolution = False
End Select
End Function
Private Sub Reboot()
Dim lRet As Long
lRet = ExitWindowsEx(EWX_REBOOT, 0)
End Sub
interesting...
ASKER
im technically an access developer.
im using this in VBA.
my boss made a db that is only to be viewed in 1024x768.
he watches it in a bigger resolution.
and i want him to do it in 1024x768 (as he keeps on saying that everything looks to small and im trying to fit too much on the screen.
i cant do anything stretch/shrink.
im deadset on sticking with access.
i just want to enforce that everyone uses 1024x768.
im using this in VBA.
my boss made a db that is only to be viewed in 1024x768.
he watches it in a bigger resolution.
and i want him to do it in 1024x768 (as he keeps on saying that everything looks to small and im trying to fit too much on the screen.
i cant do anything stretch/shrink.
im deadset on sticking with access.
i just want to enforce that everyone uses 1024x768.
Hi aaronkempf,
It appears that you have forgotten this question. I will ask Community Support to close it unless you finalize it within 7 days. I will ask a Community Support Moderator to:
Refund points and save as a 0-pt PAQ.
aaronkempf, Please DO NOT accept this comment as an answer.
EXPERTS: Post a comment if you are certain that an expert deserves credit. Explain why.
==========
DanRollins -- EE database cleanup volunteer
It appears that you have forgotten this question. I will ask Community Support to close it unless you finalize it within 7 days. I will ask a Community Support Moderator to:
Refund points and save as a 0-pt PAQ.
aaronkempf, Please DO NOT accept this comment as an answer.
EXPERTS: Post a comment if you are certain that an expert deserves credit. Explain why.
==========
DanRollins -- EE database cleanup volunteer
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.