윈도우7의 개인 설정 제어판에서 쓰이는 문서화되지 않은 DwmSetColorizationParameters 함수를 활용합니다.
이 함수는 두 매개변수를 받습니다.
첫 번째 매개변수는 색이나 기타 정보를 담고 있는 구조체이며,
두 번째 매개변수는 변경된 색을 영구적으로 (레지스트리에) 저장할 지의 여부입니다. false이면 저장되고 true면 에어로를 껐다 켜거나 로그오프 후 재 로그온하면 기존 설정으로 되돌아갑니다. 둘째 매개변수에 대한 설명은 인터넷 그 어디에도 없더라구요 ㅎㅎ;
소스는 제 깃허브에도 올렸습니다. - https://github.com/gec-chopper-control/vb6-aero-parameter-customizer
Declare Sub DwmGetColorizationParameters Lib "dwmapi.dll" Alias "#127" (ByRef Parameters As DWM_COLORIZATION_PARAMS)
Declare Sub DwmSetColorizationParameters Lib "dwmapi.dll" Alias "#131" (ByRef Parameters As DWM_COLORIZATION_PARAMS, ByVal BoolArg As Boolean)
Type DWM_COLORIZATION_PARAMS
ColorBlue As Byte
ColorGreen As Byte
ColorRed As Byte
ColorAlpha As Byte
AfterGlowBlue As Byte
AfterGlowGreen As Byte
AfterGlowRed As Byte
AfterGlowAlpha As Byte
ColorBalance As Long '5-55
AfterGlowBalance As Long
BlurBalance As Long
StripesIntensity As Long
Opaque As Boolean
End Type
'출처: https://www.vbforums.com/showthread.php?889448-RESOLVED-VB6-how-get-RGB-from-ARGB-color
Sub ColorRefToRGB(ByVal Color As Long, ByRef r As Long, g As Long, B As Long)
r = Color And &HFF
g = ((Color \ &H100) And &HFF)
g = (Color And &HFF00&) \ &H100&
B = ((Color \ &H10000) And &HFF)
B = (Color And &HFF0000) \ &H10000
End Sub
'에어로 색 정보를 변경합니다.
'tkColorHue: 첫째 색의 색상
'tkColorBrightness: 첫째 색의 밝기
'tkColorSaturation: 첫째 색의 채도
'tkAfterGlowHue: 둘째 색의 색상
'tkAfterGlowBrightness: 둘째 색의 밝기
'tkAfterGlowSaturation: 둘째 색의 채도
'그 외 tk로 시작하는 것들은 폼에서 슬라이더입니다.
'chkTransparent: 투명하게 표시 여부
'Commit: 변경된 색을 레지스트리에 저장 여부
Sub SetParameters(Optional ByVal Commit As Boolean = False)
Dim Params As DWM_COLORIZATION_PARAMS
Dim clrColor As Long
Dim r As Long
Dim g As Long
Dim B As Long
clrColor = ColorHLSToRGB(tkColorHue.value, tkColorBrightness.value, tkColorSaturation.value)
ColorRefToRGB clrColor, r, g, B
Params.ColorRed = r
Params.ColorGreen = g
Params.ColorBlue = B
'Params.ColorAlpha = tkColorAlpha.Value
clrColor = ColorHLSToRGB(tkAfterGlowHue.value, tkAfterGlowBrightness.value, tkAfterGlowSaturation.value)
ColorRefToRGB clrColor, r, g, B
Params.AfterGlowRed = r
Params.AfterGlowGreen = g
Params.AfterGlowBlue = B
'Params.AfterGlowAlpha = tkAfterGlowAlpha.Value
Params.ColorBalance = tkColorBalance.value
Params.AfterGlowBalance = tkAfterGlowBalance.value
Params.BlurBalance = tkBlurBalance.value
Params.StripesIntensity = tkStripesIntensity.value
If chkTransparent.value Then
Params.Opaque = False
Else
Params.Opaque = True
End If
If Commit Then
DwmSetColorizationParameters Params, False
Else
DwmSetColorizationParameters Params, True
End If
End Sub
첫댓글 어렵지만 감사합니다.