Vista / 7: ¿Cómo obtener el color del cristal?

Cómo usasDwmGetColorizationColor?

losdocumentación dice que devuelve dos valores:

un de 32 bits0xAARRGGBB que contiene el color usado para la composición de vidrioun parámetro booleano que es verdadero "si el color es una mezcla opaca" (Lo que sea que eso signifique)

Aquí hay un color que me gusta, un buen vómito verde:

Puede notar que el color es verdoso, y la barra de título translúcida (sobre un fondo blanco) muestra el color de los mocos muy claramente:

Intento obtener el color de Windows:

DwmGetColorizationColor(dwCcolorization, bIsOpaqueBlend);

Y consigo

dwColorization: 0x0D0A0F04
bIsOpaqueBlend: false

Según la documentación, este valor tiene el formatoAARRGGBBy contiene:

AA: 0x0D (13)
RR: 0x0A (10)
GG: 0x0F (15)
BB: 0x04 (4)

Esto supuestamente significa que el color es (10, 15, 4), con una opacidad de ~ 5.1%.

Pero si realmente observa este valor RGB, no está cerca de mi moco verde deseado. Aquí está

(10, 15, 4) con opacidad cero (el color original), y(10,15,4) con 5% de opacidad sobre un fondo blanco / tablero de ajedrez:

En lugar de serLime verde,DwmGetColorizationColor devuelve una casi totalmente transparentenegro.

Entonces la pregunta es:Cómo obtener el color del cristal en Windows Vista / 7?

intenté usarDwmGetColorizationColor, pero eso no funciona muy bien.

A persona con el mismo problema, pero una imagen brillante más bonita para atraer a las ardillas:

Por lo tanto, se reduce a: DwmGetColorizationColor es completamente inutilizable para aplicaciones que intentan aplicar el color actual sobre una superficie opaca.

amocapturas de pantalla de este chico Mucho mejor que el mío. Usando sus capturas de pantalla como plantilla, inventé algunas chispas más:

Para las dos últimas capturas de pantalla, el chip mezclado alfa es un verdadero PNG parcialmente transparente, que se combina con el fondo de su navegador. ¡Bueno! (Soy un geek)

Edición 2: Tuve que organizarlos en color arcoíris. (Soy un geek)

Edición 3: Bueno, ahora, por supuesto, tengo que agregar Amarillo.

Soluciones alternativas no documentadas / no compatibles / frágiles

Hay una exportación no documentada deDwmApi.dll en el punto de entrada 137, que llamaremosDwmGetColorizationParameters:

HRESULT GetColorizationParameters_Undocumented(out DWMCOLORIZATIONPARAMS params);

struct DWMCOLORIZATIONPARAMS
{
   public UInt32 ColorizationColor;
   public UInt32 ColorizationAfterglow;
   public UInt32 ColorizationColorBalance;
   public UInt32 ColorizationAfterglowBalance;
   public UInt32 ColorizationBlurBalance;
   public UInt32 ColorizationGlassReflectionIntensity;
   public UInt32 ColorizationOpaqueBlend;
}

Nos interesa el primer parámetro:ColorizationColor.

También podemos leer el valor del registro:

HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM
    ColorizationColor: REG_DWORD = 0x6614A600

Así que eliges tu veneno de crear problemas de appcompat. Usted puede

confiar en una API no documentada (que esmalo, malo, malo, y puede desaparecer en cualquier momento)usar una clave de registro no documentada (que también esmaloypuede desaparecer en cualquier momento)Ver también¿Hay una lista de combinaciones de parámetros válidas para GetThemeColor / Visual Styles API¿Cómo cambia Windows el color Aero Glass?DWM - Manejo del color de la coloración con DWMGetColorizationColorRecuperando el color base de Aero Glass para renderizar superficies opacas

Llevo más de un año queriendo hacer esta pregunta. Siempre supe que es imposible responder, y que la única forma de hacer que alguien preste atención es tener capturas de pantalla coloridas; Los desarrolladores se sienten atraídos por las cosas brillantes. Pero en el lado negativo significa que tuve que poner todo tipo de trabajo para hacer los señuelos.

Respuestas a la pregunta(3)

Su respuesta a la pregunta