首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

wince系统功能或设置如何调用

2013-01-07 
wince系统功能或设置怎么调用本帖最后由 shepher 于 2011-12-23 21:55:11 编辑我知道的wince可以用一个函

wince系统功能或设置怎么调用
本帖最后由 shepher 于 2011-12-23 21:55:11 编辑 我知道的wince可以用一个函数就可以打开的系统功能或设置有:
触摸屏校准功能——>TouchCalibrate
系统SIP软件盘——>SipShowIM

其他的还有些什么呢?
比如 
日期/时间属性窗口——>?
网络设置窗口——>?
密码——>?
所有者——>?
电源——>?
音量——>?
....

该怎么调用呢?
最好是VC的


[解决办法]
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:存储器管理

以下内容有错误==========================================================================
用如下的方法:
CreateProcess(_T("\\Windows\\ctlpnl.exe"), _T("cplmain.cpl,3"), NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi);
ctlpnl.exe:是控制面板管理程序
cplmain.cpl:是系统提供的控制面板组件,其实就是一个dll.
CreateProcess的第二个参数是这样的_T("*.cpl,X,Y"),Y可以忽略,忽略时是零。
You have to run ctlpnl.exe program with "cplmain.cpl,X,Y" argument where X is Id of the control panel applet and Y is an index of a tab page (most applets have several tabs). 

cplmain.cpl,17是Network card吧。
用这段代码可以打开的。
CreateProcess(_T("\\Windows\\ctlpnl.exe"), _T("cplmain.cpl,17"), NULL, NULL, FALSE, 0, NULL, NULL, NULL,NULL);

下面这些是一些比较常用的
cplmain.cpl,22
设置 - 证书
cplmain.cpl,19
设置 - 连接
cplmain.cpl,18


设置 - 区域设置
cplmain.cpl,16
设置 - 时钟
cplmain.cpl,15
设置 - 无线数据交换
cplmain.cpl,13
设置 - 今日
cplmain.cpl,12
设置 - 按键
cplmain.cpl,11
设置 - 菜单
cplmain.cpl,10
设置 - 删除程序
cplmain.cpl,9
设置 - 声音和提醒
cplmain.cpl,8
设置 - 输入
cplmain.cpl,7
设置 - 调整屏幕
cplmain.cpl,5
设置 - 关于
cplmain.cpl,4
设置 - 内存
cplmain.cpl,2
设置 - 主人信息
iTask.cpl,0
设置 - iTask内容
MyCPL.cpl,3
设置 - iPAQ 音频
MyCPL.cpl,2
设置 - 电源
MyCPL.cpl,1
设置 - 背景光
MyCPL.cpl,0
设置 - 资源管理器
BTConfigCE.cpl,0
设置 - Bluetooth
cplmain.cpl,4,2
设置 - 关闭程序
bkpmgr.cpl,0
设置 - 备份管理

[解决办法]
SystemParametersinfo  函数功能:该函数查询或设置系统级参数

热点排行