如何检测显示器是否处于高对比度模式?

我正在测试我公司已建立的Swing应用程序的可访问性问题。 在我的PC上启用了高对比度模式后,此应用程序的某些部分会正确呈现(白底黑字),而另一些则不正确(白底黑字)。

正确的位是本机组件(JButton,JLabel和诸如此类)以及来自JIDE之类的第三方组件。 不正确的位是自定义组件和内部开发的渲染器,不考虑高对比度模式。

显然,可以检测何时启用高对比度模式。 我该怎么做呢?

事实certificate,为了这个目的,在Java 1.4.1中添加了win.highContrast.on属性。

public static void main(String[] args) { Toolkit toolkit = Toolkit.getDefaultToolkit(); Boolean highContrast = (Boolean)toolkit.getDesktopProperty( "win.highContrast.on" ); } 

这仅适用于Windows(因此win.前缀)。 在Linux和Mac上, highContrast将为null。 首先进行平台检查或在highContrast上进行highContrast是最安全的。

摘自以下链接: http : //www.section508.gov/IRSCourse/mod02/printJava.html

“Windows软件可以通过使用SPI_GETHIGHCONTRAST值调用SystemParametersInfo函数来检查高对比度设置。应用程序应在初始化期间和处理WM_COLORCHANGE消息时查询并支持此值。”

这是通过Win32 API访问: http : //msdn.microsoft.com/en-us/library/ms724947 ( VS.85).aspx (不完全确定如何在该领域不是很好,希望有人可以完成)

你试过了吗

 Toolkit.getDefaultToolkit().getColorModel()