控制面板的组件,其实就是一个地地道道的DLL文件,所不同的是其后缀名为.CPL而已.控制面板组件对外必须要实现一个CPlApplet接口,其原型为:LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2).而在此函数之中,为了使组件正常运作,我们必须要处理如下消息:CPL_INIT(初始化,可以在这分配内存等等),CPL_GETCOUNT(显示的组件数目),CPL_NEWINQUIRE(获取组件的信息,才能正常显示),CPL_DBLCLK(双击图标时执行).
为方便观看,将此函数体列出:

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// 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文件内部进行操作;但我们完全可以把.CPL文件当成一个外壳,其作用只是在"控制面板"中显示一个图标,真正的处理是调用另外一个EXE文件.这样的好处是,此.CPL代码通用性强,如果想再添加别的组件,只要更改.CPL少量代码;并且,功能模块的分离,使得我们如果要更改相关功能,也只要修改相应的EXE文件,调试也更加方便.

现在就让我们看一下如何在控制面板中调用EXE文件.
我们需要的是,在控制面板中双击我们显示的图标就调用我们相应的EXE程序;很显然,我们只需要在CPL_DBLCLK消息中添加调用代码即可.
extern "C"  LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
{
  switch (message)
   
   ....
    
    case CPL_DBLCLK:
  {
   //-----------------------------------------------------------------
   //关于FindWindow函数的说明:
   //原型:HWND FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName); 
   //lpClassName:要赋的值是类的字符串名称,在ce下可以运行Remote Spy++进行查看;在本例子中采用此工具看到的是"Dialog".
   //此参数也可以为NULL,前提是所有在运行的窗口标题不同
   //lpWindowName:窗口的标题字符串名称,也即是我们可以看到的窗口标题   
   //------------------------------------------------------------------
   //由于我们的这个exe文件只有一个窗口,下面这个函数也可以这样写FindWindow (NULL,TEXT("背光调节"))
   HWND hWnd = FindWindow (L"Dialog",TEXT("背光调节")); 
   if (hWnd) 
   {       
    //如果已经运行过一个实例,则把它提到窗口前
    SetForegroundWindow (hWnd);
    CloseHandle(hWnd);
    return 0;   
   }
   else
   {
    //调用exe文件.
    if (CreateProcess(_T("\\Windows\\Backlight.exe"), NULL, NULL,NULL, FALSE, 0, NULL, NULL, NULL, &pi))
    {
     CloseHandle(pi.hThread);
     CloseHandle(pi.hProcess);
     return 0;
    }
   }
   return 1;     // CPlApplet failed.
  }
  
  ....
  
}

WinCE 控制面板的创建相关推荐

  1. WinCE控制面板添加应用程序

    WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的,里面就是包含了一些应用程序.WinCE系统的控制面板由Ctlpnl.exe,Control.exe和一些.cpl文件组成,其中C ...

  2. php怎么关联默认打开程序,win10系统打开文件时提示“请在默认程序控制面板中创建关联”如何解决...

    近日有win10系统用户反映说在打开文件的时候,突然遇到了"请在默认程序控制面板中创建关联"的提示,导致无法打开文件,这该怎么办呢,本教程就给大家带来win10系统打开文件时提示& ...

  3. html创建关联程序,如何在控制面板中创建电子邮件默认程序关联

    星愿下的期盼的回答: 1.在电脑的左下角点击开始图标,然后找到[默认程序]功能并点击打开. 2.进入到默认程序界面后找到[将文件类型或协议与程序关联]并点击. 3.会打开设置关联界面,在[名称]一栏找 ...

  4. html创建关联程序,Win10系统如何在默认程序控制面板中创建关联

    最近有win10纯净版64位系统网友在打开某些文件的时候,系统出现提示"请在默认程序控制面板中创建关联"的情况,导致无法该打开文件,那么该怎么办呢?下面小编就给大家带来Win10系 ...

  5. WinCE 控制面板和驱动通信

    //================================================================================================== ...

  6. Windows10记一次去掉桌面图标箭头引发的血案:该文件没有与之关联的应用来执行操作,请安装一个程序,若已安装程序,请在默认程序控制面板中创建关联。

    前两天我的Windows10系统升级,这次升级试一次大型升级,从1803版本升级到1903版本,本以为升级系统能给我带来不一样的体验,可是没有--升级之后我桌面图标左下方又出现了小箭头,对于我这种强迫 ...

  7. 该文件没有与之关联的程序来执行该操作。请安装一个程序,或者,如果已安装程序,请在“默认程序”控制面板中创建关联。

    今天双击远程桌面快捷方式的时候一直出现上述的提示,但是直接打开远程桌面不通过快捷方式打开是能正常打开访问的.这时第一时间想到的是使用重启大法,很不幸失败了.然后启用B计划,开始百度,百度了很多方法,有 ...

  8. 详解WINCE的控制面板

    曾经在我的一篇<控制面板的创建>中介绍过WinCE控制面板的结构,不过由于那篇文章其目的只在于控制面板如何调用EXE程序,故对控制面板也仅是泛泛而谈.不过在这篇文章中,我们将对WinCE的 ...

  9. 该文件没有程序与之关联来执行该操作。请在控制面板的文件夹选项中创建关联 解决代码...

    打开控制面板-文件夹选项,或者打开任意一个文件夹,在菜单栏--工具--文件夹选项 1.切换到文件类型选项卡,在以注册的文件类型中找到要打开的文件类型 2.选中后点击下面的"高级"按 ...

最新文章

  1. Java进阶篇(五)——Java的I/O技术
  2. 调用别的类中的变量(但是还是有问题)
  3. Windows 7下,中兴U880通过电脑无线网卡共享上网(共享无线上网)
  4. 云服务器安装虚拟机方法,云服务器安装虚拟机方法
  5. CVE-2017-7529Nginx越界读取缓存漏洞POC
  6. 《Python编程从入门到实践》记录之列表解析
  7. sso单点登录系统(解决session共享)
  8. 前端开发 —— js 常用工具函数(utilities)
  9. 二十 二分搜索树的完整实现及其复杂度分析
  10. 常见OJ提交结果对照表
  11. 这种情况,支付宝转账可撤回了!一定要会
  12. win10打开视频显示HEVC视频扩展
  13. Html5动态桌面,动态桌面软件《Wallpaper Engine》 让你的电脑桌面动起来!
  14. Matlab数理统计工具箱应用简介(转)
  15. 【5G NR】工作频段和信道安排
  16. 2022-2028全球与中国Microsoft Dynamics ERP咨询服务市场现状及未来发展趋势
  17. 高校计算机水平能力联合测试成绩,学校关于开展2017年度专业技术职务任职资格评审工作的通知...
  18. 服务器异常的处理方式
  19. Unity TileMap工具教程
  20. github上的python项目 运行,12月Github上热门的Python开源项目

热门文章

  1. oracle rac添加用户组,oracle 11g rac 与 oracle 10 rac所需要建立的组和用户
  2. 设计模式(二) 模板方法
  3. sql server 备份计划
  4. 001. Ansible简介
  5. HDU 3094 树上删边 NIM变形
  6. JS 判断手机操作系统代码
  7. 不同page页面选择不同页面模板的方法
  8. LPC1768的SPI通讯
  9. Depth-first Search深度优先搜索专题1
  10. [Leetcode]第[43]题[JAVA][字符串相乘][字符串相加]