Windows-API-user32 SystemParametersInfo
应用SystemParametersInfo函数可以获取和设置数量众多的windows系统参数。这个小程序就是运用了SystemParametersInfo函数来设置桌面的墙纸,而且程序可以让我们选择多幅墙纸图片,程序会以一定的时间间隔自动改变墙纸。
我们先来看看SystemParametersInfo函数的定义和参数:
使用API函数之前必须先在程序中声明如下:
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
其中各参数的意义如下表:
参数: 意义
uAction Long,指定要设置的参数。参考uAction常数表
uParam Long,参考uAction常数表
lpvParam Any,按引用调用的Integer、Long和数据结构。
fuWinIni 这个参数规定了在设置系统参数的时候,是否应更新用户设置参数
下面是部分uAction参数,和使用它们的方法:
参数 意义和使用方法
6 设置视窗的大小,SystemParametersInfo(6, 放大缩小值, P, 0),lpvParam为long型
17 开关屏保程序,SystemParametersInfo(17, False, P, 1),uParam为布尔型
13,24 改变桌面图标水平和垂直间距,uParam为间距值(像素),lpvParam为long型
15 设置屏保等待时间,SystemParametersInfo(15, 秒数, P, 1),lpvParam为long型
20 设置桌面背景墙纸,SystemParametersInfo(20, True, 图片路径, 1)
93 开关鼠标轨迹,SystemParametersInfo(93, 数值, P, 1),uParam为False则关闭
97 开关Ctrl+Alt+Del窗口,SystemParametersInfo(97, False, A, 0),uParam为布尔型
本例中我们选择图片并取得图片的完整路径,然后通过调用API函数,将这幅图设为墙纸,使用的语法为:SystemParametersInfo SPI_SETDESKWALLPAPER, 0, bmpfile, 1
其中SystemParametersInfo表示要设置桌面墙纸,bmpfile是要设置的图片的路径。
例中的定时自动更换是通过Timer控件实现的,我们可以调节Timer控件的Interval属性来改变间隔时间的长短。这样就能看到不断变化的桌面了
************************************************
spi_seticontitlelogfont lpvparam是一个logfont结构,用于定义图标标题采用的字体。uparam指定logfont结构的大小。如两者均为null,则采用系统启动时定义的字体
spi_seticontitlewrap uparam为true时打开图标标题自动换行
spi_setkeyboarddelay uparam代表新的键盘重复延时
spi_setkeyboardpref 若uparam为true,表明用户相比键盘和鼠标更喜欢用前者。参考spi_getkeyboardpref
spi_setkeyboardspeed uparam代表新的键盘重复速率
spi_setlangtoggle 令窗口从系统注册表中重新装载热键信息,以便在键盘布局之间交换
spi_setlowpoweractive uparam为true时允许节能屏幕保护程序模式。只适用于win95
spi_setlowpowertimeout uparam代表新的节能屏幕保护程序延时。只适用于win95
spi_setmenudropalignment uparam为false时设置弹出菜单左对齐,true则右对齐
spi_setminimizedmetrics 参数与spi_getminimizedmetrics一样
spi_setmouse lpvparam是一个三元素整数数组的头一个条目,其中包含了鼠标设置。参考spi_getmouse
spi_setmousebuttonswap uparam为true时交换左右鼠标按钮的功能;如果为false,则使用原来的值
spi_setmousekeys 参数与spi_getmousekeys一样
spi_setnonclientmetrics 参数与spi_getnonclientmetrics一样
spi_setpenwindows uparam为true时载入笔窗口,false则卸载
spi_setpoweroffactive uparam为true时允许停电屏幕保护模式。只适用于win95
spi_setpowerofftimeout uparam代表新的停电屏幕保护程序延时。只适用于win95
spi_setscreenreader uparam为true时表示正在运行一个屏幕阅读程序。参考spi_getscreenreader
spi_setscreensaveactive uparam为true时激活屏幕保护程序;false表示禁止
spi_setscreensavetimeout uparam代表新的屏幕保护延迟时间,以秒为单位
spi_setserialkeys 参数与 spi_getserialkeys 相同
spi_setshowsounds uparam为true时允许窗口开启声音提示辅助访问特性。参考spi_getshowsounds
spi_setsnaptodefbutton 如鼠标应自动移到新对话框的默认按钮,则uparam为true。只适用于nt 4.0
spi_setsoundsentry 与 spi_getsoundsentry 相同
spi_setstickykeys 与 spi_getstickykeys 相同
spi_settogglekeys 与 spi_gettogglekeys 相同
spi_setworkarea 与 spi_getworkarea 相同
例:不用钩子也可以做到的。
就是用 SystemParametersInfo 禁止所有键盘的输入
Declare Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long
SystemParametersInfo 97, -1, 0, 0 '所有按键锁定
SystemParametersInfo 97, 0, 0, 0 '恢复键盘锁定
下面大家可以试用一下。
SPI_GETaccessTIMEOUT lpvParam是一个ACCESSTIMEOUT结构,其中要载入辅助访问特性计时信息。在调用函数之前,uParam必须设为ACCESSTIMEOUT结构的大小
SPI_GETANIMATION lpvParam是一个ANIMATIONINFO结构,将在其中载入窗口最小化和恢复时的动画信息。不能在NT 3.51中使用
SPI_GETBEEP lpvParam是一个Long型数据,若打开了响铃声,则设为TRUE
SPI_GETBORDER lpvParam是一个Long型数据,用于接收一个乘数(倍数),对大小可变的窗口的边框尺寸进行控制
SPI_GETDEFAULTINPUTLANG lpvParam是一个Long型数据,用于接收默认键盘布局的一个32位句柄。不能用于NT 3.51
SPI_GETDRAGFULLWINDOWS lpvParam是一个Long型数据,如在整个窗口上拖动,就会设为TRUE。如果只拖出了一个矩形轮廓,则为FALSE。要求NT 4.0 或 Windows 95支持。其中,Windows 95必须有Plus!支持,或直接安装Windows 95 OSR2
SPI_GETFASTTASKSWITCH lpvParam是一个Long型数据,如允许快速任务切换,则为TRUE。在Windows 95 和 NT 4.0中肯定是TRUE
SPI_GETFILTERKEYS lpvParam是一个FILTERKEYS结构,用于装载与键盘有关的辅助访问特性信息
SPI_GETFONTSMOOTHING lpvParam是一个Long型数据,如打开了边缘修饰特性(让字体更圆润),则为TRUE。只适用于 NT 4.0 和带 Plus! 支持的 Windows 95
SPI_GETGRIDGRANULARITY lpvParam是一个Long型数据,会设为网格间隔尺寸值
SPI_GETHIGHCONTRAST lpvParam是一个HIGHCONTRAST结构,用于装载与用户显示器有关的辅助访问特性信息。仅适用于Win95
SPI_GETICONMETRICS lpvParam是一个ICONMETRICS结构,用于装载与图标比例及排列有关的信息。仅适用于Windows 95 及 NT 4.0
SPI_GETICONTITLELOGFONT lpvParam指向一个LOGFONT结构,设置内容取决于图标标题采用的字体
SPI_GETICONTITLEWRAP lpvParam是一个Long型数据,如允许对图标标题进行自动换行,则设为TRUE
SPI_GETKEYBOARDDELAY lpvParam是一个Long型数据,设为键盘重复延时
SPI_GETKEYBOARDPREF lpvParam是一个Long型数据,如用户更喜欢用键盘而不是鼠标,则设为TRUE。如这个参数为真,windows会显示出附加的键盘接口信息,只适用于win95
SPI_GETKEYBOARDSPEED lpvParam是一个Long型数据,设为键盘的重复速率
SPI_GETMENUDROPALIGNMENT lpvParam是一个Long型数据,若弹出式菜单左对齐(默认),则设为FALSE。否则为TRUE
SPI_GETMINIMIZEDMETRICS lpvParam是一个MINIMIZEDMETRICS结构,用于装载与最小化窗口的比例及排列有关的信息。仅适用于win95
SPI_GETMOUSE lpvParam是三元素Long数组的头一个条目,条目0设为用户配置MouseThreshold1字段,条目1设为MouseThreshold2字段,条目2设为MouseSpeed
SPI_GETMOUSEKEYS lpvParam是一个MOUSEKEYS结构,要在其中装载与鼠标有关的辅助访问信息。不能在 NT 3.51中使用
SPI_GETNONCLIENTMETRICS lpvParam是一个NONCLIENTMETRICS结构,要在其中装载有关字体和环境有关的信息;这些信息会在描绘窗口非客户区域时涉及到,如边框、标题等。只适用于win95
SPI_GETSCREENSAVEACTIVE lpvParam指向一个整数;倘若屏幕保护程序处于活动状态,则设为TRUE;否则设为FALSE
SPI_GETSCREENSAVETIMEOUT lpvParam指向一个整数;它设为屏幕保护延时(以秒为单位)
SPI_GETSERIALKEYS lpvParam是一个SERIALKEYS结构,用于装载与输入设备(用于模拟键盘输入)有关的辅助访问特性信息。只适用于win95
SPI_GETSHOWSOUNDS lpvParam是一个Long型数据,倘若应用程序应该用可视线索来代替声音,则设为TRUE。它的作用与GetSystemMetrics函数的SM_GETSHOWSOUNDS选项是相同的
SPI_GETSNAPTODEFBUTTON lpvParam是一个Long型数据,倘若鼠标会自动移到新对话框的默认按钮,则设为TRUE。只适用于NT 4.0
SPI_GETSOUNDSENTRY lpvParam是一个SOUNDSENTRY结构,用于装载让windows提供可视标志(而不是系统声音)时涉及的辅助访问特征信息。调用之前,必须将uParam设为SOUNDSENTRY结构的长度
SPI_GETSTICKYKEYS lpvParam是一个STICKYKEYS结构,用于装载允许一名用户顺序按键(而不是同时按下)时涉及的辅助访问特征信息。同时按键的例子包括Shift+, Ctrl+, Alt+ 等。调用之前,必须将uParam设为STICKYKEYS结构的长度
SPI_GETTOGGLEKEYS lpvParam是一个TOGGLEKEYS结构,要在其中装载按下一个开关键(NumLock,CapsLock,ScrollLock)后播放声音提示时涉及的辅助访问特征信息。windows会用一个不同的声音指出开或关状态。调用之前,必须将uParam设为TOGGLEKEYS结构的长度
SPI_GETWORKAREA lpvParam是一个RECT结构,用于装载屏幕的工作区
SPI_ICONHORIZONTALSPACING 如lpvParam为NULL,则uParam代表桌面图标新的水平间隔距离,以像素为单位
SPI_ICONVERTICALSPACING 与SPI_ICONHORIZONTALSPACING相似,只不过指定图标的垂直间距
SPI_LANGDRIVER lpvParam是一个字串,用于容纳新的语言驱动程序文件的名称
SPI_SETACCESSTIMEOUT 与SPI_GETACCESSTIMEOUT的参数相同
SPI_SETANIMATION 与SPI_GETANIMATION的参数相同
SPI_SETBEEP uParam为TRUE时打开响铃,FALSE关闭
SPI_SETBORDER uParam代表一个乘数,用于控制尺寸可变的的窗口边框的大小
SPI_SETDEFAULTINPUTLANG 与SPI_GETDEFAULTINPUTLANG的参数相同
SPI_SETDESKPATTERN 从注册表或win.ini中强制窗口恢复当前的桌面方案
SPI_SETDESKWALLPAPER lpvParam代表一个字串,用于容纳作为桌面墙纸使用的一个位图文件的名称
SPI_SETDOUBLECLICKTIME uParam代表连续两次单击被当作一次双击处理时需要间隔的时间(以毫秒为单位)
SPI_SETDOUBLECLKHEIGHT uParam代表新的双击高度,可参考GetSystemMetrics函数的注解
SPI_SETDOUBLECLKWIDTH uParam代表新的双击宽度,可参考GetSystemMetrics函数的注解
SPI_DRAGFULLWINDOWS uParam为TRUE时打开全窗口拖动,否则为FALSE。仅适用于win95
SPI_SETDRAGHEIGHT uParam代表一个矩形的高度(以像素为单位),用于决定拖动操作何时开始。只适用于win95
SPI_SETDRAGWIDTH uParam代表一个矩形的宽度(以像素为单位),用于决定拖动操作何时开始。只适用于win95
SPI_SETFASTTASKSWITCH uParam为TRUE时打开快速任务切换,FALSE则关闭
SPI_FILTERKEYS 参数与 SPI_GETFILTERKEYS 相同
SPI_SETFONTSMOOTHING uParam为TRUE时打开字体修饰(圆润)。只能在NT 4.0 和得到 Plus! 支持的 Win95(或 Windows 95 OSR2)中使用
SPI_SETGRIDGRANULARITY uParam代表新的网格间距
SPI_SETHIGHCONTRAST 参数与 SPI_GETHIGHCONTRAST 相同
SPI_SETICONMETRICS 参数与 SPI_GETICONMETRICS 相同
SPI_SETICONTITLELOGFONT lpvParam是一个LOGFONT结构,用于定义图标标题采用的字体。uParam指定LOGFONT结构的大小。如两者均为NULL,则采用系统启动时定义的字体
SPI_SETICONTITLEWRAP uParam为TRUE时打开图标标题自动换行
SPI_SETKEYBOARDDELAY uParam代表新的键盘重复延时
SPI_SETKEYBOARDPREF 若uParam为TRUE,表明用户相比键盘和鼠标更喜欢用前者。参考SPI_GETKEYBOARDPREF
SPI_SETKEYBOARDSPEED uParam代表新的键盘重复速率
SPI_SETLANGTOGGLE 令窗口从系统注册表中重新装载热键信息,以便在键盘布局之间交换
SPI_SETLOWPOWERACTIVE uParam为TRUE时允许节能屏幕保护程序模式。只适用于win95
SPI_SETLOWPOWERTIMEOUT uParam代表新的节能屏幕保护程序延时。只适用于win95
SPI_SETMENUDROPALIGNMENT uParam为FALSE时设置弹出菜单左对齐,TRUE则右对齐
SPI_SETMINIMIZEDMETRICS 参数与SPI_GETMINIMIZEDMETRICS一样
SPI_SETMOUSE lpvParam是一个三元素整数数组的头一个条目,其中包含了鼠标设置。参考SPI_GETMOUSE
SPI_SETMOUSEBUTTONSWAP uParam为TRUE时交换左右鼠标按钮的功能;如果为FALSE,则使用原来的值
SPI_SETMOUSEKEYS 参数与SPI_GETMOUSEKEYS一样
SPI_SETNONCLIENTMETRICS 参数与SPI_GETNONCLIENTMETRICS一样
SPI_SETPENWINDOWS uParam为TRUE时载入笔窗口,FALSE则卸载
SPI_SETPOWEROFFACTIVE uParam为TRUE时允许停电屏幕保护模式。只适用于win95
SPI_SETPOWEROFFTIMEOUT uParam代表新的停电屏幕保护程序延时。只适用于win95
SPI_SETSCREENREADER uParam为TRUE时表示正在运行一个屏幕阅读程序。参考SPI_GETSCREENREADER
SPI_SETSCREENSAVEACTIVE uParam为TRUE时激活屏幕保护程序;FALSE表示禁止
SPI_SETSCREENSAVETIMEOUT uParam代表新的屏幕保护延迟时间,以秒为单位
SPI_SETSERIALKEYS 参数与 SPI_GETSERIALKEYS 相同
SPI_SETSHOWSOUNDS uParam为TRUE时允许窗口开启声音提示辅助访问特性。参考SPI_GETSHOWSOUNDS
SPI_SETSNAPTODEFBUTTON 如鼠标应自动移到新对话框的默认按钮,则uParam为TRUE。只适用于NT 4.0
SPI_SETSOUNDSENTRY 与 SPI_GETSOUNDSENTRY 相同
SPI_SETSTICKYKEYS 与 SPI_GETSTICKYKEYS 相同
SPI_SETTOGGLEKEYS 与 SPI_GETTOGGLEKEYS 相同
SPI_SETWORKAREA 与 SPI_GETWORKAREA 相同