透析WINCE的控制面板

时间:2011-07-04

 

  WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当出色。Windows CE作业系统是Windows家族中的成员,专门设计给掌上型电脑(HPCs)所使用的电脑环境。这样的作业系统可使完整的可携式技术与现有的Windows桌面技术整合工作。 Windows CE 被设计成针对小型设备(它是典型的拥有有限内存的无磁盘系统)的通用操作系统,Windows CE 可以通过设计一层位于内核和硬件之间代码来用设定硬件平台,这即是众所周知的硬件抽象层(HAL)(在以前解释时,这被称为 OEMC (原始设备制造)适应层,即 OAL; 内核压缩层,即 KAL. 以免与微软的 Windows NT 操作系统 HAL 混淆) .

 
  1.控制面板的结构
 
  控制面板(control panel)是Windows图形用户界面一部分,可通过开始菜单访问。它允许用户查看并操作基本的系统设置和控制,比如添加硬件,添加/删除软件,控制用户帐户,更改辅助功能选项,等等。控制面板可通过Windows 95,Windows 98和Windows Me中的"开始">"设置">"控制面板"访问,或者Windows XP和Windows Vista中的开始菜单直接访问。同时它也可以通过运行命令"control"命令直接访问。
 
  控制面板其实也是个动态链接库,区别只在于后缀名为。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的内存配置
下一篇:一种行人视频检测中阴影检测去除设计和实现

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料