计算机上的辅助功能主要是为残疾人士提供方便,可以在控制面板的辅助功能选项中设置也可以由API设置,所有辅助功能的设置主要由SystemParametersInfo来完成:
BOOL SystemParametersInfo(
UINT uiAction, //[IN] system parameter to retrieve or set 指定要获取和设置的功能
UINT uiParam, //[IN] depends on action to be taken
PVOID pvParam, //[IN/OUT] depends on action to be taken
UINT fWinIni //[IN] user profile update option
);
这个函数主要是用来设置和获取操作系统的一些设置(大部分可以通过控制面板来操作).在这里主要介绍有关辅助功能的设置:
SPI_GETACCESSTIMEOUT SPI_SETACCESSTIMEOUT: 用来获取和设置使用辅助特性的超时时间,所谓辅助特性的超时时间就是指从开启辅助特性到系统自动关闭辅助特性的这一段时间,当开启了辅助特性后,若在这个时间内没有键盘和鼠标的输入则系统自动将辅助特性关闭(控制面板-辅助功能选项-常规).辅助功能有高亮度显示,声音卫士等。uiParam指定结构体ACCESSTIMEOUT的大小,pvParam指定为一个结构ACCESSTIMEOUT的指针
typedef struct tagACCESSTIMEOUT { UINT cbSize; //结构体的大小,在设置和获取时都要填充此成员 DWORD dwFlags; //ATF_ONOFFFEEDBACK:当到达超时时间关闭辅助特性时发出声音;ATF_TIMEOUTON:若有则会在超时后关闭辅助特性,否则 //即使到了超时时间也不会关闭,这两个参数可以联合使用 DWORD iTimeOutMSec; //超时的时间,毫秒为单位 } ACCESSTIMEOUT, *LPACCESSTIMEOUT
SPI_GETACTIVEWINDOWTRACKING SPI_SETACTIVEWINDOWTRACKING: 用来设置和获取是否当某个窗口被激活(成为活动窗口)时,鼠标指针自动位于其上,pvParam为BOOL值指针,系统默认为FALSE,这个功能也叫窗口 跟踪,即当鼠标位于窗口之上时,此窗口即成为活动窗口,pvParam设置时为BOOL值,获取时为BOOL*
SPI_GETACTIVEWNDTRKZORDER SPI_SETACTIVEWNDTRKZORDER: 设置当启用窗口跟踪时是否当窗口被激活时,是否成为顶层窗口,同样是BOOL值,系统默认为FALSE
SPI_GETACTIVEWNDTRKTIMEOUT SPI_SETACTIVEWNDTRKTIMEOUT: 设置当启用窗口跟踪时,鼠标移到窗口上后,经过多少时间才将窗口激活,这个值为DWORD指针,单位为毫秒,系统默认为0
SPI_GETANIMATION SPI_SETANIMATION: 指定当对窗口进行最小化和恢复时是否使用动画效果,pvParam为一个ANIMATIONINFO结构指针,uiParam要填充这个结构的大小 typedef struct tagANIMATIONINFO { UINT cbSize; //结构的大小,必须明确指定 int iMinAnimate; //非0使用动画为0则不使用 } ANIMATIONINFO, *LPANIMATIONINFO;
SPI_GETBEEP SPI_SETBEEP: 指定蜂鸣报警声音是否打开,为BOOL值,默认为TRUE(不是WINDOWS的警报声音)
SPI_GETBORDER SPI_SETBORDER: 设置获取窗口边框的大小(参考控制面版-显示-外观-项目-活动窗口边框),这是个整数值,设置用uiParam,获取用pvParam.默认为1
SPI_GETDEFAULTINPUTLANG SPI_SETDEFAULTINPUTLANG: 用来设置和获取,系统的默认输入语言的键盘布局句柄,参数为键盘布局句柄指针
SPI_GETCOMBOBOXANIMATION SPI_SETCOMBOBOXANIMATION: 用来设置当拉下组合框的列表时,是否有动画效果(即是滑出来的还是直接出来的),为BOOL型
SPI_SETDRAGFULLWINDOWS SPI_GETDRAGFULLWINDOWS: 设置窗口被拖动时,是否显示窗口的内容,为BOOL值,系统为FALSE(拖动时只有一个虚拟的边框),可以参考(控制面版-显示-效果-拖动时 显示窗口的内容)
SPI_SETFILTERKEYS SPI_GETFILTERKEYS: 设置和获取,筛选键的设置,参考(辅助功能选项的-键盘-筛选键)
SPI_GETFONTSMOOTHING SPI_SETFONTSMOOTHING: 是否平滑字体边缘,为BOOL值, 参考(控制面版-显示-效果-平滑屏幕字体边缘)
SPI_GETFOREGROUNDFLASHCOUNT SPI_SETFOREGROUNDFLASHCOUNT: 当将窗口切换到前台时,有时会得不到响应,而此窗口在任务栏中的部分,就会闪烁(兰色),这个就是设置闪烁的次数,为DWORD值
SPI_GETFOREGROUNDLOCKTIMEOUT SPI_SETFOREGROUNDLOCKTIMEOUT
SPI_SETGRADIENTCAPTIONS SPI_GETGRADIENTCAPTIONS: 对活动窗口的标题栏,是否启用颜色渐变的效果,为BOOL,
SPI_SETHIGHCONTRAST SPI_GETHIGHCONTRAST: 设置和获取辅助特性的高对比度设置
SPI_GETICONMETRICS SPI_SETICONMETRICS: 获取和指定任务栏中,每个窗口的图标属性(窗口最小化后),一个结构ICONMETRICS typedef struct tagICONMETRICS { UINT cbSize; //本结构大小 int iHorzSpacing; //图标的宽,单位像素 int iVertSpacing; //图标的高 int iTitleWrap; //文字是否环绕图标,为0则不环绕 LOGFONT lfFont; //文字的字体 } ICONMETRICS, FAR *LPICONMETRICS;
若要设置生效,设置后要执行: ::SystemParametersInfo(SPI_SETICONS, 0, NULL, 0);
下面的几个为这结构的单独值:
SPI_GETICONTITLELOGFONT SPI_SETICONTITLELOGFONT: 用于设置和获取任务栏中的图标的逻辑字体,填充一个LOGFONT结构
SPI_GETICONTITLEWRAP SPI_SETICONTITLEWRAP: 用于设置和获取任务栏中的图标的文字环绕,为BOOL值, 获取用pvParam,设置为uiParam
SPI_ICONHORIZONTALSPACING: 设置/获取图标的宽度, 设置时uiParam为宽度,pvParam为NULL, 获取时uiParam为0,pvParam为指针 SPI_ICONVERTICALSPACING
SPI_GETKEYBOARDDELAY SPI_SETKEYBOARDDELAY: 设置和获取键盘输入延迟,值只能是0-3 (参考控制面版中的键盘)
SPI_GETKEYBOARDPREF SPI_SETKEYBOARDPREF: 设置是否使用键盘代替鼠标,为BOOL值.(参考控制面版中的辅助特性功能中的鼠标-使用鼠标键)
SPI_GETKEYBOARDSPEED SPI_SETKEYBOARDSPEED: 设置和获取键盘输入的重复率,值只能是0-31(参考控制面版中的键盘)
SPI_GETLISTBOXSMOOTHSCROLLING SPI_SETLISTBOXSMOOTHSCROLLING: 设置和获取LISTBOX控件的平滑滚动特效,即用键盘移动时,是否是平滑滚动,为BOOL
SPI_GETLOWPOWERACTIVE SPI_SETLOWPOWERACTIVE: 是否激活电源使用方案,为BOOL值,获取从pvParam中填充BOOL* ,设置为设置uiParam的BOOL. (参考控制面版-显示-屏幕保护程序-电源-电源使用方案的关闭监视器)
SPI_GETLOWPOWERTIMEOUT SPI_SETLOWPOWERTIMEOUT: 设置系统空闲时关闭监视器的时间,单位为秒, uiParam用来设置,pvParam用来获取, 为整数值
SPI_GETPOWEROFFACTIVE SPI_SETPOWEROFFACTIVE: 是否激活计算机的待机功能,为BOOL, 设置为uiParam,获取为pvParam
SPI_SETPOWEROFFTIMEOUT SPI_GETPOWEROFFTIMEOUT 设置进入待机功能的时间,单位为秒, 为整数值, 设置为uiParam,获取为pvParam
SPI_SETMENUDROPALIGNMENT SPI_GETMENUDROPALIGNMENT: 设置右键弹出菜单的文字对齐方式,左对齐为TRUE,右对齐为FALSE, uiParam用于设置,pvParam用于获取
SPI_GETMINIMIZEDMETRICS SPI_SETMINIMIZEDMETRICS: 用来设置和获取任务栏中的最小化窗口的排列情况,通过一个结构:
typedef struct tagMINIMIZEDMETRICS { UINT cbSize; //结构大小 int iWidth; //每个最小化窗口的宽度 int iHorzGap; //最小化窗口之间的水平间隔 int iVertGap; //最小化窗口之间的垂直间隔 int iArrange; //最小化窗口在任务栏的排列方式,和对齐方式 } MINIMIZEDMETRICS, *LPMINIMIZEDMETRICS;