VB Code:
  1. Option Explicit
  2.  
  3. Private Const CCDEVICENAME = 32
  4. Private Const CCFORMNAME = 32
  5.  
  6. Private Const DISP_CHANGE_SUCCESSFUL = 0
  7. Private Const DISP_CHANGE_RESTART = 1
  8. Private Const DISP_CHANGE_FAILED = -1
  9. Private Const DISP_CHANGE_BADMODE = -2
  10. Private Const DISP_CHANGE_NOTUPDATED = -3
  11. Private Const DISP_CHANGE_BADFLAGS = -4
  12. Private Const DISP_CHANGE_BADPARAM = -5
  13.  
  14. Private Const CDS_UPDATEREGISTRY = &H1
  15. Private Const CDS_TEST = &H2
  16.  
  17. Private Const DM_BITSPERPEL = &H40000
  18. Private Const DM_PELSWIDTH = &H80000
  19. Private Const DM_PELSHEIGHT = &H100000
  20.  
  21. Private Type DEVMODE
  22. dmDeviceName As String * CCDEVICENAME
  23. dmSpecVersion As Integer
  24. dmDriverVersion As Integer
  25. dmSize As Integer
  26. dmDriverExtra As Integer
  27. dmFields As Long
  28. dmOrientation As Integer
  29. dmPaperSize As Integer
  30. dmPaperLength As Integer
  31. dmPaperWidth As Integer
  32. dmScale As Integer
  33. dmCopies As Integer
  34. dmDefaultSource As Integer
  35. dmPrintQuality As Integer
  36. dmColor As Integer
  37. dmDuplex As Integer
  38. dmYResolution As Integer
  39. dmTTOption As Integer
  40. dmCollate As Integer
  41. dmFormName As String * CCFORMNAME
  42. dmUnusedPadding As Integer
  43. dmBitsPerPel As Integer
  44. dmPelsWidth As Long
  45. dmPelsHeight As Long
  46. dmDisplayFlags As Long
  47. dmDisplayFrequency As Long
  48. End Type
  49.  
  50. Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
  51. Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
  52.  
  53. Function ChangeScreenSettings(lWidth As Integer, lHeight As Integer, lColors As Integer)
  54. Dim tDevMode As DEVMODE, lTemp As Long, lIndex As Long
  55. lIndex = 0
  56. Do
  57. lTemp = EnumDisplaySettings(0&, lIndex, tDevMode)
  58. If lTemp = 0 Then Exit Do
  59. lIndex = lIndex + 1
  60.  
  61. With tDevMode
  62. If .dmPelsWidth = lWidth And .dmPelsHeight = lHeight And .dmBitsPerPel = lColors Then
  63. lTemp = ChangeDisplaySettings(tDevMode, CDS_UPDATEREGISTRY)
  64. Exit Do
  65. End If
  66. End With
  67. Loop
  68. End Function
  69.  
  70. ' Then Call
  71.  
  72. ChangeScreenSettings 800, 600, 16
  73.  
  74. ' x, y, color depth in bits