应用程序运行时,有时需要对系统环境有特殊要求。例如,在Delphi数据库应用程序中可能需要进行BDE(Borland Database Engine)或ODBC数据源名称(DSN:Data Source Name)的设置;在网络应用程序中可能需要进行网络配置设置、Modem属性设置或用户拨号连接的帐号和密码的设置并保存在系统中;在CTI(Computer-Telephony Integration)应用程序中可能需要进行电话拨号属性的设置;在游戏程序中可能需要对多媒体或游戏控制器进行设置;等等。这时候就需要改变Windows系统的环境设置,以适应应用程序正常运行的要求。当应用程序不能自行进行环境设置时,可能需要软件用户来参与、协助完成设置。­

  Win9X/NT的大多数系统设置是在控制面板中进行的。我们可以要求用户自己打开控制面板寻找相应的项目进行设置,此时要求用户对控制面板相当熟悉;也可以在程序中自动为用户打开控制面板并选择相应的项目,此时用户所做的只是进行设置。后一种方法无疑更具有友好性,更能提高用户的工作效率。­

­

  控制面板的大多数项目设置,都对应Windows的System目录下的一个CPL文件,如“Internet”属性对应的文件为InetCpl.cpl、“多媒体”属性对应的文件为MmSys.cpl等。通过调用这些文件可以打开相应的属性设置窗口,甚至可以跳到相应的属性页如“Internet”属性的“连接”属性页,有效减少软件用户的操作步骤。­

­

  CPL文件的调用格式为“RunDLL32.exe Shell32.dll,Control_RunDLL CPLFile.cpl,,ItemNo”(可参见注册表中HKEY_CLASSES_ROOT\cplfile\shell\cplopen\command的默认值),其中CPLFile.cpl为CPL文件,ItemNo为项目编号。在Delphi程序中,可以用WinExec或CreateProcess函数来实现CPL文件调用,从而实现对控制面板的设置项目的调用。如进行拨号连接的帐号和密码设置要调用“Internet”属性的“连接”属性页,可以用语句“WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,3’,, SW_SHOWNORMAL);”;解决2000年问题中对两位年份输入的解释要调用“区域设置”的“日期”属性页,可以用语句:“WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,4’,, SW_SHOWNORMAL);”。­

  控制面板各项目设置调用所对应的语句列表如下:­

­

//打开控制面板­

WinExec(’RunDLL.exe Shell32.DLL,Control_RunDLL’,SW_SHOWNORMAL);­

­

//32位ODBC数据源管理器,ODBC数据源、ODBC驱动程序设置­

//没有提供参数区分“用户DSN”“系统DSN”“文件DSN”“ODBC驱动程序”“跟踪”“关于”六个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL ODBCCP32.CPL’,SW_SHOWNORMAL);­

­

//BDE Adminstrator­

//没有提供参数区分“Databases”和“Configuration”两个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL BdeAdmin.CPL’,SW_SHOWNORMAL);­

­

//Internet 属性,可有ItemNo参数­

//“常规”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,0’, SW_SHOWNORMAL);­

//“安全”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,1’, SW_SHOWNORMAL);­

//“内容”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,2’, SW_SHOWNORMAL);­

//“连接”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,3’, SW_SHOWNORMAL);­

//“程序”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,4’, SW_SHOWNORMAL);­

//“高级”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL InetCpl.cpl,,5’, SW_SHOWNORMAL);­

­

//电话拨号属性,没有提供参数区分“我的位置”和“电话语音驱动程序”两个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Telephon.cpl’, SW_SHOWNORMAL);­

­

//电源管理设置,没有提供参数区分“电源方案”和“高级”两个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL PowerCfg.cpl’, SW_SHOWNORMAL);­

­

//调制解调器设置,没有提供参数区分“常规”和“诊断”两个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Modem.cpl’, SW_SHOWNORMAL);­

­

//多媒体设置,可有ItemNo参数­

//“音频”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,0’, SW_SHOWNORMAL);­

//“视频”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,1’, SW_SHOWNORMAL);­

//“MIDI”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,2’, SW_SHOWNORMAL);­

//“CD音乐”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,3’, SW_SHOWNORMAL);­

//“设备”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Mmsys.cpl,,4’, SW_SHOWNORMAL);­

­

//辅助选项设置,可有ItemNo参数­

//“键盘”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,1’,SW_SHOWNORMAL);­

//“声音”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,2’, SW_SHOWNORMAL);­

//“显示”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,3’, SW_SHOWNORMAL);­

//“鼠标”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,4’, SW_SHOWNORMAL);­

//“常规”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL access.cpl,,5’, SW_SHOWNORMAL);­

­

//密码设置,没有提供参数区分“更改密码”和“修改用户配置”两个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Password.cpl’, SW_SHOWNORMAL);­

­

//区域设置,可有ItemNo参数­

//“区域设置”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,0’, SW_SHOWNORMAL);­

//“数字”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,1’, SW_SHOWNORMAL);­

//“货币”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,2’, SW_SHOWNORMAL);­

//“时间”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,3’, SW_SHOWNORMAL);­

//“日期”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Intl.cpl,,4’, SW_SHOWNORMAL);­

­

//日期/时间设置,可有ItemNo参数­

//“日期和时间”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL TimeDate.cpl,,0’, SW_SHOWNORMAL);­

//“时区”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL TimeDate.cpl,,1’, SW_SHOWNORMAL);­

­

//鼠标设置,没有提供参数区别“按钮”、“指针”和“移动”三个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Main.cpl’, SW_SHOWNORMAL);­

­

//添加/删除程序设置,可有ItemNo参数­

//“安装/卸载”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,1’, SW_SHOWNORMAL);­

//“Windows安装程序”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,2’, SW_SHOWNORMAL);­

//“启动盘”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL AppWiz.cpl,,3’, SW_SHOWNORMAL);­

­

//网络设置,没有提供参数区别“配置”、“标识”和“访问控制”三个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL NetCpl.cpl’, SW_SHOWNORMAL);­

­

//系统设置, ­

//“常规”属性页, 可有ItemNo参数­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,0’, SW_SHOWNORMAL);­

//“设备管理器”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,1’, SW_SHOWNORMAL);­

//“硬件配置文件”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,2’, SW_SHOWNORMAL);­

//“性能”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL SysDm.cpl,,3’, SW_SHOWNORMAL);­

­

//显示设置, 可有ItemNo参数­

//“背景”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,0’, SW_SHOWNORMAL);­

//“屏幕保护程序”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,1’, SW_SHOWNORMAL);­

//“外观”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,2’, SW_SHOWNORMAL);­

//“设置”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL desk.cpl,,3’, SW_SHOWNORMAL);­

­

//游戏控制器设置,可有ItemNo参数­

//“一般”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Joy.cpl,,0’, SW_SHOWNORMAL);­

//“高级”属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL Joy.cpl,,1’, SW_SHOWNORMAL);­

­

//扫描仪与数字相机设设置,没有提供参数区分“设备”和“记录设置”两个属性页­

WinExec(’RunDLL32.exe Shell32.dll,Control_RunDLL StiCpl.cpl’, SW_SHOWNORMAL);­

控制面板大全

  在程序运行过程中启动控制面板的各个设置功能:
var x:cardinal;
begin
{启动控制面板}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL’,9);
{辅助选项 属性-键盘}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1’,9);
{辅助选项 属性-声音}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2’,9);
{辅助选项 属性-显示}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3’,9);
{辅助选项 属性-鼠标}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4’,9);
{辅助选项 属性-常规}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5’,9);
{添加/删除程序 属性-安装/卸载}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,1’,9);
{添加/删除程序 属性-Windows安装程序}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,2’,9);
{添加/删除程序 属性-启动盘}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Appwiz.cpl,,3’,9);
{显示 属性-背景}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0’,9);
{显示 属性-屏幕保护程序}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1’,9);
{显示 属性-外观}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2’,9);
{显示 属性-设置}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3’,9);
{Internet 属性-常规}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,0’,9);
{Internet 属性-安全}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,1’,9);
{Internet 属性-内容}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,2’,9);
{Internet 属性-连接}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,3’,9);
{Internet 属性-程序}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,4’,9);
{Internet 属性-高级}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Inetcpl.cpl,,5’,9);
{区域设置 属性-区域设置}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,0’,9);
{区域设置 属性-数字}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,1’,9);
{区域设置 属性-货币}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,2’,9);
{区域设置 属性-时间}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,3’,9);
{区域设置 属性-日期}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Intl.cpl,,4’,9);
{游戏控制器-一般}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Joy.cpl,,0’,9);
{游戏控制器-高级}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Joy.cpl,,1’,9);
{鼠标 属性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Main.cpl’,9);
{多媒体 属性-音频}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,0’,9);
{多媒体 属性-视频}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,1’,9);
{多媒体 属性-MIDI}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,2’,9);
{多媒体 属性-CD音乐}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,3’,9);
{多媒体 属性-设备}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Mmsys.cpl,,4’,9);
{调制解调器 属性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Modem.cpl’,9);
{网络}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Netcpl.cpl’,9);
{密码 属性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Password.cpl’,9);
{扫描仪与数字相机 属性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sticpl.cpl’,9);
{系统 属性-常规}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,0’,9);
{系统 属性-设备管理器}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,1’,9);
{系统 属性-硬件配置文件}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,2’,9);
{系统 属性-性能}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Sysdm.cpl,,3’,9);
{日期/时间 属性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL timedate.cpl’,9);
{电源管理 属性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Powercfg.cpl’,9);
{拨号属性}
x:=winexec(’rundll32.exe shell32.dll,Control_RunDLL Telephon.cpl’,9);
{----------------------调用错误----------------------}
if x=0 then messagebox(0,’程序超出内存’,’错误’,0);
if x=ERROR_BAD_FORMAT then messagebox(0,’该程序非一个合法的Win32.EXE程序).’,’错误’,0);
if x=ERROR_FILE_NOT_FOUND then messagebox(0,’指定文件没找到’,’错误’,0);
if x=ERROR_PATH_NOT_FOUND then messagebox(0,’指定路径没找到’,’错误’,0);
end;

教程-Delphi 调用控制面板设置功能的更多相关文章

  1. 教程-Delphi调用C# WEBSERVICE(二)

    第二步:将webserivce的WSDL导入到该dll工程中,如何导,方法至少有两种,我说简单的一种:  file->new->other->WebService->WSDL ...

  2. 教程-Delphi调用百度地图API(XE8+WIN7)

    unit U_map; interface //---------------------------------------------------// //----------COPY BY 无言 ...

  3. Delphi xe7 up1 调用android振动功能

    Delphi xe7 up1 调用android振动功能 振动用到以下4个单元: Androidapi.JNI.App,Androidapi.JNIBridge,Androidapi.JNI.Os,A ...

  4. ios --- 调用系统"设置"里的功能(转)

    安装后第一次运行软件时,系统会弹出提示用户是否允许软件获取当前位置,如果用户不允许的话,之后运行时系统不会在弹出提示设置,这点很不方便,有个解决办法是给用户一个选项,调出iphone中“设置”定位服务 ...

  5. Window系统命令行调用控制面板程序

    Window系统命令行调用控制面板程序 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /name M ...

  6. delphi实现窗体闪烁功能

    delphi实现窗体闪烁功能 以前做窗口闪动时都没有考虑到让任务栏上的按钮闪动的问题, 现在一个客户需要任务栏按钮闪动,发现以前使用的flashwindow不能达到要求了, 查找了一下,找到flash ...

  7. Delphi 调用C# DLL(包含委托)

    例子 C# Dll: using System; using System.Collections.Generic; using System.Text; using System.Diagnosti ...

  8. 导出Excel之Epplus使用教程4(其他设置)

    导出Excel之Epplus使用教程1(基本介绍) 导出Excel之Epplus使用教程2(样式设置) 导出Excel之Epplus使用教程3(图表设置) 导出Excel之Epplus使用教程4(其他 ...

  9. Delphi调用WebService(通过SoapHeader认证)经验总结

    项目(Delphi开发)需要调用另一个系统的WebService.走了不少弯路,现记录总结一下经验.以下是WebService要求: 1.WebService概述 营销Webservice接口采用Ap ...

随机推荐

  1. online web design tool

    https://webflow.com/ http://css-tricks.com/snippets/ https://www.fluidui.com/demos

  2. noj [1482] 嘛~付钱吧!(完全背包)

    http://ac.nbutoj.com/Problem/view.xhtml?id=1482 [1482] 嘛~付钱吧! 时间限制: 1000 ms 内存限制: 65535 K 问题描述 大白菜带着 ...

  3. 移动开发:初学 iOS-UIViewController 心得

    初学 iOS,本文翻译了一些 iOS 官网上的 UIViewController 的知识点,如有不到位或不正确的地方,还请指正: 本文所介绍的内容的目标: 理解content view control ...

  4. push 栈顶sp=sp-2 可以把立着的栈,向左侧倒下,那么形态就和反汇编时,内存的形态是一样的。小偏移的字节在前, 大的偏移字节在后

    push  栈顶sp=sp-2 可以把立着的栈,向左侧倒下,那么形态就和反汇编时,内存的形态是一样的.小偏移的字节在前, 大的偏移字节在后. 1 2 3 4 5 1 2 3 4 5

  5. Javascript实现摩斯码加密解密

    原文地址 作者:liaoyu 摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母.数字和标点符号,是由美国人萨缪尔·摩尔斯在1836年发明. 每一个字符(字母或数字)对应不同的 ...

  6. Java:JXL解析Excel文件

    项目中,有需求要使用JXL解析Excel文件. 解析Excel文件 我们先要将文件转化为数据流inputStream. 当inputStream很大的时候 会造成Java虚拟器内存不够 抛出内存溢出 ...

  7. JAVA bean与XML互转的利器---XStream

    最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家 ...

  8. 【HDOJ】1027 Ignatius and the Princess II

    这道题目最开始完全不懂,后来百度了一下,原来是字典序.而且还是组合数学里的东西.看字典序的算法看了半天才搞清楚,自己仔细想了想,确实也是那么回事儿.对于长度为n的数组a,算法如下:(1)从右向左扫描, ...

  9. [转] 舞蹈链(Dancing Links)——求解精确覆盖问题

    转载自:http://www.cnblogs.com/grenet/p/3145800.html 精确覆盖问题的定义:给定一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个 ...

  10. ☀【jQuery 优化】jQuery基础教程(第3版)

    jQuery代码优化:选择符篇 √ http://www.ituring.com.cn/article/377 jQuery代码优化:遍历篇 √ http://www.ituring.com.cn/a ...