Comment utilisez-vous DwmGetColorizationColor
?
Le site documentation dit qu'il renvoie deux valeurs :
- un système de 32 bits
0xAARRGGBB
contenant la couleur utilisée pour la composition du verre - un paramètre booléen qui est vrai "si la couleur est un mélange opaque" ( quoi que cela signifie )
Voici une couleur que j'aime, un joli vert vomi :
Vous pouvez remarquer que la couleur est verte, et la barre de titre translucide (sur un fond blanc) montre très clairement la couleur de la morve :
J'essaie d'obtenir la couleur à partir de Windows :
DwmGetColorizationColor(dwCcolorization, bIsOpaqueBlend);
Et j'obtiens
dwColorization: 0x0D0A0F04
bIsOpaqueBlend: false
Selon la documentation, cette valeur a le format suivant AARRGGBB
et ainsi de suite :
AA: 0x0D (13)
RR: 0x0A (10)
GG: 0x0F (15)
BB: 0x04 (4)
Cela signifie soi-disant que la couleur est (10, 15, 4), avec une opacité de ~5,1%.
Mais si vous regardez réellement cette valeur RVB, elle est loin du vert morveux que je souhaite. Voici
- (10, 15, 4) avec une opacité nulle (la couleur originale), et
- (10,15,4) avec une opacité de 5% sur un fond blanc/carreau :
Plutôt que d'être Lime
vert, DwmGetColorizationColor
renvoie une image presque entièrement transparente noir .
La question est donc la suivante : Comment obtenir la couleur du verre dans Windows Vista/7 ?
J'ai essayé d'utiliser DwmGetColorizationColor
mais cela ne fonctionne pas très bien.
A personne ayant le même problème, mais avec une image plus brillante pour vous attirer les écureuils :
Donc, ça se résume à . DwmGetColorizationColor est complètement inutilisable pour les applications qui tentent d'appliquer la couleur actuelle sur une surface opaque.
J'aime les captures d'écran de ce type bien mieux que le mien. En utilisant ses captures d'écran comme modèle, j'ai fait un peu plus d'étincelles :
Pour les deux dernières captures d'écran, la puce à mélange alpha est un véritable PNG partiellement transparent, qui se fond dans l'arrière-plan de votre navigateur. Cool ! (je suis un tel geek)
Edit 2 : J'ai dû les arranger en couleurs arc-en-ciel. (je suis un tel geek)
Edit 3 : Bien sûr, je dois maintenant ajouter le jaune.
Solutions de contournement non documentées/non supportées/fragiles
Il existe une exportation non documentée de DwmApi.dll
au point d'entrée 137, que nous appellerons DwmGetColorizationParameters
:
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;
}
Nous sommes intéressés par le premier paramètre : ColorizationColor
.
Nous pouvons également lire la valeur à partir du registre :
HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM
ColorizationColor: REG_DWORD = 0x6614A600
Donc vous choisissez votre poison pour créer des problèmes d'appcompat. Vous pouvez
- s'appuient sur une API non documentée (qui est mauvais , mauvais , mauvais , et peut disparaître à tout moment )
- utiliser une clé de registre non documentée (qui est également mauvais et peut disparaître à tout moment )
Voir aussi
- Existe-t-il une liste des combinaisons de paramètres valables pour GetThemeColor / Visual Styles API ?
- Comment Windows modifie-t-il la couleur de l'Aero Glass ?
- DWM - Traitement de la couleur de la colorisation à l'aide de DWMGetColorizationColor
- Récupération de la couleur de base d'Aero Glass pour un rendu de surface opaque
je voulais poser cette question depuis plus d'un an maintenant. j'ai toujours su qu'il était impossible d'y répondre, et que la seule façon d'attirer l'attention de quelqu'un est d'avoir des captures d'écran colorées ; les développeurs sont attirés par les choses brillantes. Mais d'un autre côté, cela signifie que j'ai dû mettre beaucoup de travail pour créer les appâts.