VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 在VB中启动控制面板(一个另类操作)
发表评论(0)作者:, 平台:, 阅读:9034, 日期:2000-05-14
资料整理:影子 VB爱好者乐园 http://yingzi007.126.com

主题:在VB中启动控制面板

作者:福建省福州市工业路

盛放

前几天在朋友家看到一款联想射雕MODEM,吸引我的不是MODEM的外形、性能之类的说明,而是它配套光盘中的START.EXE说明能够自动安装MODEM的驱动程序?当时觉得非常奇怪,因为外置式MODEM还可以通过检测COM口对MODEM发送AT指令获得MODEM类型,从而安装相应驱动程序,而内置式MODEM是没有办法这样做的,如果没有先安装驱动程序,无法对MODEM进行检测的。再仔细观察说明书,原来联想的MODEM在PC机上用的都是外置式的。这倒是可以通过程序实现自动安装的。


运行起START.EXE,选择自动安装,一步步进行下去,仔细观察MODEM,发现MODEM的指示灯没有一点变化,如果程序在检测MODEM,MODEM应该有所反应的啊,过了一阵,出现了WINDOWS的那个检测到新硬件的窗口,然后就是正在安装驱动程序,实在令我非常诧异。


这是怎么回事?难道它不需要检测MODEM就能让WINDOWS知道有新硬件把我又把驱动程序卸掉,重新运行START.EXE,这次是紧紧的盯着屏幕,忽然,控制面板中系统对话框出现了,自动切换到了设备管理器的界面,然后就是检测到了新硬件,正在安装驱动程序。


我们知道,如果在电脑上安装新的PnP硬件,WINDOWS启动后会报告找到新硬件,如果这时选择取消按钮,进入WINDOWS后,再进入控制面板,选择系统,选择设备管理器,选择刷新按钮,WINDOWS将再次检测硬件,会再次报告找到新硬件。


于是我再次卸掉驱动程序,先把系统属性界面运行起来,显示出性能页面中的虚拟内存对话框,再运行START.EXE,只见虚拟内存对话框突然出现在前台,而本来应该是START.EXE在前台的;也没有出现检测到新硬件对话框,最后START.EXE报告没有检测到MODEM。


看来真相大白了,联想的自动安装程序是通过调用WINDOWS的刷新功能实现其安装的,但是一般我们安装新硬件的时候,如果WINDOWS本身没有安装程序,都会要求我们插入驱动程序安装盘,那么联想MODEM的驱动程序是怎么装上去的呢?


仔细查看联想MODEM的配套光盘,根目录下有几个INF文件,看来这几个是MODEM的驱动程序了,WINDOWS安装新硬件的驱动程序时,首先会在WINDOWS目录下耳朵INF目录中查找相应的驱动程序,如果没有找到,才会要求驱动程序安装盘,看来联想的自动安装程序是先把驱动程序拷贝到INF目录下,然后再刷新设备管理器,从而安装MODEM.。


我首先屏蔽掉START.EXE对系统属性的刷新功能,然后在START.EXE检测MODEM的时候在INF目录下查找联想MODEM的驱动程序,果然已经拷贝了,从而证实了我的想法。


下面我说说如何用VB实现类似的功能:


首先是将需要的驱动程序拷贝到WINDOWS相应的目录下,


用VB中的FILECOPY函数可以完成这项功能。


获得WINDOWS目录可以使用API函数“GetWindowsDirectory”,获得WINDOWS系统目录使用API函数“GetSystemDirectory”。


Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long


然后是调用控制面板中的系统属性对话框。


Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1",1 sysdm.cpl就是控制面板的系统属性扩展,要运行它需要调用rundll32.exe shell32.dll,Control_RunDLL运行。


如果我们打开资源管理器的“查看”菜单中“文件夹选项”菜单,将会出现一个对话框,切换到“文件类型”,查找“控制面板扩展”文件类型,选中后,详细信息中说明它的扩展名为“CPL”,打开方式“RUNDLL32.EXE”,点击“编辑”按钮,出现“编辑文件类型”对话框,对应的操作是“使用控制面板打开”,选择“编辑”按钮,出现一个名为“编辑这种类型的操作:控制面板扩展”,这时我们将在“用于执行操作的应用程序”中获得如下信息:


rundll32.exe shell32.dll,Control_RunDLL %1,%*


最后就是如何实现刷新功能了,刷新按钮对应的快捷键是“ALT+F”,我们只要让其窗口获得焦点,然后再发送一个按键信息就可以了。


Sendkeys "%F" '%表示ALT按键


其它控制面板扩展对应的命令:

控制面板:rundll32.exe shell32.dll,Control_RunDLL


辅助选项: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1 (最后一个参数:1显示键盘设置;2显示声音设置;3显示显示设置;4显示鼠标设置;5显示常规设置)


添加新硬件: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1


增加新的打印机:rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter


添加/删除程序:rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1 (最后一个参数:1显示安装/卸载;2显示Windows 安装;3显示启动盘)


时间/日期:rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0 (最后一个参数:0 显示设置日期/时间;1显示设置时区)


显示器:rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 (最后一个参数:0显示背景设置;1显示屏幕保护设置;2显示外观设置;3显示窗口设置)


操纵杆:rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0 (最后一个参数:0显示常规设置;1显示高级设置)


鼠标属性:rundll32.exe shell32.dll,Control_RunDLL main.cpl @0


键盘属性:rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,0 (最后一个参数:0显示速度设置;1显示语言设置)


打印机属性:rundll32.exe shell32.dll,Control_RunDLL main.cpl @2


字体属性:rundll32.exe shell32.dll,Control_RunDLL main.cpl @3


增加 Modem:rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add


多媒体:rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0 (最后一个参数:0显示音频属性;1显示视频属性;2显示MIDI属性;3显示CD音乐属性;4显示设备属性)


声音:rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1


网络:rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl


口令:rundll32.exe shell32.dll,Control_RunDLL password.cpl


区域设置:rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0 (最后一个参数:0显示区域设置;1显示数字格式设置;2显示金额格式设置;3显示时间格式设置;4显示日期格式设置)


系统设置:rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0 (最后一个参数:0显示常规设置;1显示设备管理设置;2显示硬件设置;3显示性能设置)


IE4 设置:rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl (最后一个参数:0显示常规设置;1显示安全设置;2显示内容设置;3显示连接设置;4显示程序设置;5显示高级设置)