曾经在我的一篇《控制面板的创建》中介绍过WinCE控制面板的结构,不过由于那篇文章其目的只在于控制面板如何调用EXE程序,故对控制面板也仅是泛泛而谈.不过在这篇文章中,我们将对WinCE的使用方法来个整体的详解.
        
1.控制面板的结构
        控制面板其实也是个动态链接库,区别只在于后缀名为.cpl,以及对外接口为CPlApplet().
        接口的原型为:
        LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
        在接口函数中我们需要实现特定几个消息的响应,控制面板才能正常运作.为方便观察,在这里直接贴出消息的响应结构:
        
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// The entry point to the Control Panel application.
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
extern "C"  LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
{
  switch (message)
  {
    case CPL_INIT:
          // Perform global initializations, especially memory
          // allocations, here.
          // Return 1 for success or 0 for failure.
          // Control Panel does not load if failure is returned.
          return 1;

case CPL_GETCOUNT:
          // The number of actions supported by this Control
          // Panel application.
          return 1;

case CPL_NEWINQUIRE:
        {
              // This message is sent once for each dialog box, as
              // determined by the value returned from CPL_GETCOUNT.
              // lParam1 is the 0-based index of the dialog box.
              // lParam2 is a pointer to the NEWCPLINFO structure.
                return 0; //means CPLApplet succeed
                return 1;  // Nonzero value means CPlApplet failed.
            }
    case CPL_DBLCLK:
            {
              // The user has double-clicked the icon for the
              // dialog box in lParam1 (zero-based).
                return 0;     // CPlApplet succeed.
                return 1;     // CPlApplet failed.
            }
            
    case CPL_STOP:
                // Called once for each dialog box. Used for cleanup.
                
    case CPL_EXIT:
                // Called only once for the application. Used for cleanup.
                
    default:
          return 0;
  }

return 1;  // CPlApplet failed.
}  // CPlApplet

这几个消息的作用分别是:
        CPL_INIT:初始化,可以在这分配内存等等.
        CPL_GETCOUNT:返回控制面板程序的个数.因为一个.cpl文件中,可能包含多个Applets.
        CPL_NEWINQUIRE:返回包含程序名和图标信息的NEWCPLINFO结构
        CPL_DBLCLK:双击时响应
        CPL_STOP:单个组件退出时响应,用来清除资源内存等
        CPL_EXIT:退出整个cpl程序时响应
        这些消息的定义可以在cpl.h中找到
        
        
2.在explorer中使用
        如果定制的系统中带有explorer UI,只要把编译好的文件放进"\windows",然后再打开"控制面板"就可以看到.
        
        
3.如何调用.cpl
        就像PC机中.dll文件不能直接运行,需要借助rundll32.exe来运行一样,WinCE下的.cpl也需要相应的程序来调用,这个程序就是:"ctlpnl.exe".
        比如我们需要调用系统自带的cplmain.cpl的"电源管理",只要在开始菜单的运行中输入:"ctlpnl.exe \windows\cplmain.cpl,5".在路径后面紧跟的"5"只是因为"电源管理"在cplmain.cpl中输入第五个Applet而已.
        由此我们不难得出在程序中运用ShellExecuteEx()函数调用控制面板的Applet的方法.以下这段代码,效果和在命令行中输入命令一样,也是调用"电源管理".
        SHELLEXECUTEINFO info;    
        TCHAR szControlPanelCmdLine[ 200 ];
    swprintf( szControlPanelCmdLine, L"\\windows\\cplmain.cpl,5");
        info.cbSize = sizeof( info );
        info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
        info.lpVerb = NULL;
        info.lpFile = TEXT("ctlpnl.exe");
        info.lpParameters = szControlPanelCmdLine;
        info.lpDirectory = NULL;
        info.nShow = SW_SHOW;
        info.hInstApp = NULL;
        ShellExecuteEx( &info );    
        
        如果想调用cplmain.cpl的其它Applet,只要把数字改为相对应的即可.
        以下所列的第一项序号为0,接下的为1,其后的继续递增.
        0        CPL_Comm    
    1        CPL_Dialing 
    2        CPL_Keyboard 
    3        CPL_Password
    4        CPL_Owner   
    5        CPL_Power   
    6        CPL_System  
    7        CPL_Screen    
    8        CPL_Mouse   
    9        CPL_Stylus  
    10    CPL_Sounds  
    11    CPL_SIP"     
    12    CPL_Remove  
    13    CPL_DateTime 
    14    CPL_Certs      
    15    CPL_Accessib

4.系统自带控制面板的代码
        微软对控制面板的代码是完全公开的,如果安装的是PB4.2,代码可以在"\PUBLIC\WCESHELLFE\OAK\CTLPNL"中找到.
        CTLPNL文件夹中有九个文件夹,分别对应不同的CPL文件:
        ADVBACKLIGHT:高级背光灯管理
        BTHPNL:蓝牙
        CONNPNL:拨号网络
        CONTROL:主控制台,我们在explorer中看到的"控制面板"应该就是这个
        CPLMAIN:会生成cplmain.cpl,控制面板的大多数选项均源自于此
        CTLPNL:和CONTROL相关联的
        DMPNL:没使用过,不太清楚.不过查看rc文件应该是设置上网的.
        INTL2:区域和语言设置
        STGUI:存储器管理

详解WINCE的控制面板相关推荐

  1. 详解WinCE下USB Host驱动开发(2)

    当用户需要卸载USB Host设备驱动时,将会调用USBUnInstallDriver函数 BOOL USBUnInstallDriver();     它与USBInstallDriver类似,不过 ...

  2. 窗口发送消息参数详解

    窗口发送消息参数详解 //    窗口.发送消息    函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果 中文函数原型: 发送消息(hwnd,msg ...

  3. Windows 窗口发送消息参数详解

    窗口发送消息参数详解 // 窗口.发送消息 函数功能: 将指定的消息发送到一个窗口,同win32 api 里面的SendMessage等同的效果中文函数原型: 发送消息(hwnd,msg,wparam ...

  4. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  5. 服务器oracle11g卸载,卸载Oracle11g步骤详解

    卸载Oracle11g步骤详解 用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢? 那就是直接注册表清除,步骤如下: 1. 开始- ...

  6. Virtual PC 2007下虚拟机与本机双XP系统实现互联与上网详解

    Virtual PC 2007下虚拟机与本机双XP系统实现互联与上网详解 1.在虚拟机安装windowsXP系统 2.为了不影响用来上网的原网卡,所以我们选择在主机上装一个虚拟网卡来与虚拟机进行通信, ...

  7. 多图详解教程:Eclipse 3.6连接Tomcat 7

    多图详解教程:最新版本Java环境Eclipse 3.6连接最新版本开源Web服务器Tomcat 7.假如我们想将Java 的项目自己配环境浏览的话可以来看一下本文. 本文总共分为3大步分别为配置JR ...

  8. linux+xampp搭建WordPress个人网站过程详解

    建站准备 建站流程 搭建网站注意事项可以参考以下文章 如何从零开始拥有自己的网站? 新手建站十大必知忠告 超详细新手建站指南以及预算成本估计 注册域名 我是在阿里云万网上注册的域名:注册域名详情地址  ...

  9. 网站服务器怎么组件,网站服务器搭建与配置详解!

    原标题:网站服务器搭建与配置详解! 服务器大家经常会听说,但是可能大家对个中概念还有些不明白,这里跟大家说说网站服务器的搭建与配置. 网站服务器概念 网站服务器是网络应用的基础硬件设施,简言之即存放网 ...

最新文章

  1. 属性匹配工具_测试工具链——高效构建Mock服务
  2. Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题
  3. linux之sed命令的用法
  4. Gradle 之 Android 中的应用
  5. Git、TortoiseGit、GitHub、Gitee、GitLab 安装与入门使用
  6. windows远程连接linux-安装xfce界面,ubuntn添加新用户
  7. 问一个AddDevice和设备符号链的问题??
  8. AcWing 796. 子矩阵的和
  9. TensorFlow 训练单特征和多特征的线性回归
  10. js中动态载入css js样式
  11. rj45接口引脚定义_RJ45接口针脚定义(各种接口针脚定义)
  12. 小程序开发教程 微信小程序视频教程
  13. 操作系统µC/OS的故事,最终Micrium被Silicon Labs收购
  14. MYSQL中linux的前戏
  15. 用where in遇到null时的解决方法1
  16. Xpath简介及用法整理
  17. 数据库系统:第二章关系数据库
  18. word里添加加行号可编辑的代码方式,超级方便简单
  19. 前端传输JSON格式数据 居然尾随了一个等于号...
  20. mysql聚簇和非聚簇索引

热门文章

  1. 如何在linux里面运行ncl,NCL基础讲解(二)——NCL安装与运行
  2. 深度学习 相机标定_基于深度学习的多传感器标定
  3. python文件读写小结
  4. svn 版本升级的问题
  5. ansible-plabybook 常用的有用的命令
  6. 0421 AutoLayout的实践/基本使用
  7. 一步步学习微软InfoPath2010和SP2010--第九章节--使用SharePoint用户配置文件Web service(2)--在事件注册表单上创建表单加载规则...
  8. 设计模式之建造者模式(Builder)
  9. vtun中setsockopt fcntl等有关套接字设置
  10. 【应用】Properties类与Properties配置文件的读写