'in a module
Public Declare Function GetSysColor Lib "user32" Alias "GetSysColor" (ByVal nIndex As Long) As Long
Public Declare Function SetSysColors Lib "user32" Alias "SetSysColors" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long
'there's a lot of constants heh heh
'you could make an enum if you wanted
Public Const COLOR_SCROLLBAR As Long = 0
Public Const COLOR_BACKGROUND As Long = 1
Public Const COLOR_ACTIVECAPTION As Long = 2
Public Const COLOR_INACTIVECAPTION As Long = 3
Public Const COLOR_MENU As Long = 4
Public Const COLOR_WINDOW As Long = 5
Public Const COLOR_WINDOWFRAME As Long = 6
Public Const COLOR_MENUTEXT As Long = 7
Public Const COLOR_WINDOWTEXT As Long = 8
Public Const COLOR_CAPTIONTEXT As Long = 9
Public Const COLOR_ACTIVEBORDER As Long = 10
Public Const COLOR_INACTIVEBORDER As Long = 11
Public Const COLOR_APPWORKSPACE As Long = 12
Public Const COLOR_HIGHLIGHT As Long = 13
Public Const COLOR_HIGHLIGHTTEXT As Long = 14
Public Const COLOR_BTNFACE As Long = 15
Public Const COLOR_BTNSHADOW As Long = 16
Public Const COLOR_GRAYTEXT As Long = 17
Public Const COLOR_BTNTEXT As Long = 18
Public Const COLOR_INACTIVECAPTIONTEXT As Long = 19
Public Const COLOR_BTNHIGHLIGHT As Long = 20
Public Const COLOR_3DDKSHADOW As Long = 21
Public Const COLOR_3DLIGHT As Long = 22
Public Const COLOR_INFOTEXT As Long = 23
Public Const COLOR_INFOBK As Long = 24
Public Const COLOR_HOTLIGHT As Long = 26
Public Const COLOR_GRADIENTACTIVECAPTION As Long = 27 'win98
Public Const COLOR_GRADIENTINACTIVECAPTION As Long = 28 'win98
'to change the active titlebar color to red (just 1 change)
SetSysColors 1, COLOR_ACTIVECAPTION, vbRed
'retrieve the color of the background of a window
Dim lngColor As Long
lngColor = GetSysColor(COLOR_WINDOW)
'this is how you do multiple changes at once
'add this to a form
Private alngOldColors(0 To 15) As Long
Private alngNewColors(0 To 15) As Long
Private alngSystemColorIndex(0 To 15) As Long
Private Sub Form_Load()
Dim i As Long
Randomize Timer
For i = 0 To 15 'change the first 16 system colors
alngOldColors(i) = GetSysColor(i) 'save the old color
alngNewColors(i) = QBColor(Int(Rnd * 16)) 'set up a new color
alngSystemColorIndex(i) = i 'save the index
Next i
'apply all the changes, there's a total of 16 to make
SetSysColors 16, alngSystemColorIndex(0), alngNewColors(0)
End Sub
Private Sub Form_Unload(Cancel As Integer)
'restore the original colors
SetSysColors 16, alngSystemColorIndex(0), alngOldColors(0)
End Sub