//=====================================================================================================
//AUTHOR:
//  norains
//DATE:
//  Saturday 25-Feb-2006
//=====================================================================================================
控制面板有不少组件,是直接和驱动通信的,其过程一般如此(以创建一个"MyBacklightChange"事件为例子):
1.驱动初始化,并创建一个线程,在线程内部创建一个通信的事件
 Class MyDriver
 {
  ....
  private:
   void MyInit();
    //一个线程处理程序,注意在这里必须声明为static,否则编译(PB4.1)的时候会出错,不知道为什么
   static DWORD WINAPI MyBacklightChangeThreadProc(PVOID pArg);
  ....
 }

//驱动初始化函数:
 MyDriver::MyInit()
 {
  ....
  
  //-------------------------------
    //创建一个线程
    HANDLE hMyThread;
    DWORD dwMyThreadID;
    //CreateThread函数调用之后,会进入到线程处理函数MyBacklightChangeThreadProc里面去
    hMyThread=CreateThread(NULL,0,MyBacklightChangeThreadProc,0,0,&dwMyThreadID);
    //由于MyBacklightChangeThreadProc是一个死循环,所以一般不会执行到关闭线程这段
    if(hMyThread!=NULL)
    {
     CloseHandle(hMyThread);
    }
   
  ....
 }
 
 
2.在驱动线程内部的死循环体调用WaitForSingleObject()函数进行等待
 DWORD WINAPI SocLcd::MyBacklightChangeThreadProc(PVOID pArg)
{
 //创建一个背光灯事件,事件名称要与控制面板创建的事件名相同
 HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, L"MyBacklightChange");

//死循环,不断接受信息
 while(true)
 {
   //如果控制面板不发送信号,则此线程会一直停留在WaitForSingleObject处
   WaitForSingleObject(hEvent, INFINITE);
   //-------------------------------------------------------------------------
   //只有获得信号之后,才会往这里执行
   //在这里执行相关操作,比如:读写注册表,操作寄存器等等
   //-------------------------------------------------------------------------
 
 }
 CloseHandle(hEvent);
 return 0;
}

3.接下来,我们来看看控制面板如何发送信号

DWORD SendEvent()
{
   //在这里创建一个事件,注意:此事件的名称必须要和驱动接收的名称相同,否则驱动无法获取信号
   HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, L"MyBacklightChange");
   if (hEvent != NULL)
   {
    //发送信号
    SetEvent(hEvent);
    CloseHandle(hEvent);
    return TRUE;
   }  
   return FALSE;
}

windows ce下的控制面板和硬件打交道的组件就是采用此机制和驱动进行通信,唯一多出之处,就是组件会写注册表,然后再发送信号;驱动接到信号之后,先读注册表,根据读取的数值对硬件进行操作.

转载于:https://www.cnblogs.com/wodeyitian/archive/2006/02/25/2460578.html

WinCE 控制面板和驱动通信相关推荐

  1. 【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated)

    SD Card Driver on ADS Summary 了解SD card. 1 WinCE 5.0下SD Stack. 6 Bus Driver 7 Host Controller Driver ...

  2. 狸猫换太子:动态替换WinCE的原生驱动!

    //===================================================================== //TITLE: //    狸猫换太子:动态替换Win ...

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

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

  4. Windows驱动—Windows应用程序和Windows驱动通信编程

    文章目录 介绍 知识前奏 内核方面编程 设备对象和符号链接 分发函数 应用方面编程 打开设备 设备控制请求 代码 应用层代码 内核层代码 完整工程代码 测试效果 介绍 Windows应用程序(Ring ...

  5. PXA270处理器PCMCIA/CF接口设计及WinCE 5.0驱动实现 ----eetchina.com

    PXA270处理器PCMCIA/CF接口设计及WinCE 5.0驱动实现 ----eetchina.com 2008年09月19日 星期五 21:20 本文以Intel PXA270开发平台Mains ...

  6. S3C2440的camera接口特性及WinCE 下的驱动

    S3C2440的camera接口特性及WinCE 下的驱动 发布:2011-06-02 | 作者: | 来源: luhaifei | 查看:1022次 | 用户关注: 摘要:实现了一种全集成可变带宽中 ...

  7. WinCE虚拟串口驱动

    //========================================================================   //TITLE:   //    WinCE虚 ...

  8. usb扫描枪驱动下载 wince_WinCE系列全站仪USB驱动程序(WinCE全站仪USB驱动) 最新中文版...

    WinCE系列全站仪USB驱动程序(WinCE全站仪USB驱动) 最新中文版 WinCE系列全站仪usb驱动程序是一款WinCE系列全站仪连接USB驱动同步软件,适合全系列Windows操作系统,支持 ...

  9. 基于WinCE的I2C驱动程序设计

    http://www.mcu123.com/news/Article/rtos/WinCE/200607/88.html 引言 随着以计算机技术.通信技术和软件技术为核心的信息技术的迅速发展,嵌入式系 ...

最新文章

  1. 转:AbstractQueuedSynchronizer的介绍和原理分析
  2. python运维脚本部署jdk_Jenkins自动执行Python脚本,并输出测试报告
  3. python读取进程内存_Python读取Linux内存进程错误(/ proc / $pid / mem...
  4. 教你些技巧,用 Python 自动化办公做一些有趣的事情!太方便了
  5. 剧透LiveVideoStackCon 2020:除了干货,还有更多优惠的年度通票
  6. 边缘计算和网络切片,为何成为5G的“技术网红”
  7. oracle with as内存,oracle中with as子句的用法小结(转)
  8. input file HTML控件控制
  9. ngui中 代码调用按钮事件(后来改成了按钮绑定键盘..)
  10. DataTable 转换 DataSet
  11. WebUtils-网络请求工具类
  12. vue 第十天 (组件的基本使用)
  13. 腾讯位置服务开发应用-使用教程,案例分享,知识总结
  14. [机器学习与scikit-learn-33]:算法-回归-通过PolynomialFeatures实现数据的升维
  15. 提升自己的实力才是硬道理
  16. 三坐标检测之精密模具检测2021
  17. (论文阅读笔记)Semantic-Aware Domain Generalized Segmentation
  18. 嵌入式地理信息系统技术
  19. 服务启动日志时间跟系统时间不相符问题
  20. 基于能力保护原则的桥梁抗震设计

热门文章

  1. Flask Jinja2模板
  2. Pandas DataFrame 去重
  3. java decompiler 使用_是否有任何Java Decompiler可以正确地反编译对重载方法的调用?...
  4. mysql行转列和列转行_Mysql中行转列和列转行
  5. go数据结构与算法| 稀疏数组
  6. pr抖动插件_某宝价值135元的PS/AE/PR全套插件合集,一键安装,大神必备这一套就够了【第10期】...
  7. redis怎么修改_面试官问我Redis事务,还问我有哪些实现方式
  8. au如何关闭预览编辑器_在线IDE开发入门之从零实现一个在线代码编辑器
  9. MariaDB日志审计 帮你揪出内个干坏事儿的小子
  10. 批量修改一张表格的多个sheet名