High Contrast Mode is not the same as High Contrast Scheme
“High Contrast Mode” is an accessibility state controlled by the
HCF_HIGHCONTRASTON flag in the
dwFlags member of the
HIGHCONTRAST structure. You can retrieve this structure programmatically by calling the
SystemParametersInfo function with the
SPI_GETHIGHCONTRAST parameter; conversely, you update the setting programmatically with
SPI_SETHIGHCONTRAST parameter. Programs are on their honor to query the “High Contrast Mode” flag and, if set, simplify their display so as to be more usable to people with low visual acuity. For example, gradients and background bitmaps should be turned off and system colors should be used for screen elements.
End users can enter and exit “High Contrast Mode” by going to the Accessibility control panel and checking or unchecking the “High Contrast” box. Alternative, users can use the High Contrast Mode hotkey, LeftShift+LeftAlt+PrtSc. As an added bonus (and here’s where the confusion begins), if users employ the hotkey, then the system will also switch to or from the “High Contrast” color scheme automatically.
The “High Contrast” color scheme (or more accurately, schemes, since there are a few of them) is a collection of colors and metrics that are suitable for users with low visual acuity. You can manually select this color scheme from the Display control panel’s “Appearance” page.
These two concepts, “High Contrast Mode” and the “High Contrast Color Scheme” are independent. You can be in High Contrast Mode with normal colors. (This means that programs will remove visual distractions even though your screen colors aren’t black and white.) Or you can use the High Contrast Color Scheme without being in High Contrast Mode. (This means that your screen colors are predominantly black and white, but programs are still welcome to use gradients and background bitmaps.)
It turns out that these “mixed states” are very confusing to end users. When users go to the Display control panel and select a High Contrast color scheme, they almost certainly want to go into High Contrast Mode as well, but that doesn’t happen because the Display control panel says, “Well, you’re choosing some colors that are very heavy on black and white. Maybe you just like those colors? Perhaps you’re a fan of penguins, or maybe you’re just into goth fashion. I’m just the Display control panel; I change colors. I don’t do accessibility stuff. For that, use the Accessibility control panel. Not my job. Clear delineation of responsibility.”
It’s perfectly logical and completely counter-intuitive.
Most often, I see this when somebody sets their color scheme to High Contrast from the Display control panel, and yet they find that programs are not recognizing High Contrast Mode and are still using gradients and background bitmaps.
As a result of this confusion, many programs don’t trust
SPI_GETHIGHCONTRAST. Or, more accurately, if
SPI_GETHIGHCONTRAST says, “No, High Contrast Mode is not enabled,” the programs say, “Well, okay, we’re not in High Contrast Mode, but maybe we’re in the mixed case where users chose the High Contrast color scheme and think that they are in High Contrast Mode even though they technically aren’t.” These programs study your current colors, do some math, and decide if they are “high contrast-y”. If so, then they go into “virtual High Contrast Mode”, where they act as if
HCF_HIGHCONTRASTON were set even though it really isn’t.
As a result of these programs “trying to guess what you really want”, I occasionally see somebody complaining, “After I set my colors to my personal preferences (stark black and white because I like it that way), some programs think I’m a person with visual impairments and go into a simplified visual mode.”
Windows Vista attempts to resolve this confusion by violating the “architectural purity” of the Display control panel and having it set and clear the High Contrast Mode flag depending on what color scheme you picked. If you pick a High Contrast color scheme, then the Display control panel will automatically set you into High Contrast Mode. Because it’s almost certainly what you wanted anyway.