WinCE通知API的解析及在控制程序中的应用_第1页
WinCE通知API的解析及在控制程序中的应用_第2页
WinCE通知API的解析及在控制程序中的应用_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式 系统与单片机应 用 W i n C E 通知 AP I 的解析及在控制程序 中的应用 T he An a l y s i s a n d Appl i c a t i o n o f W i nCE no t i f i c a t i o n AP l 摘要 :本 文介绍 了 Wi n d o w s C E操作 系统提 供 的通 知 接 口的结构和 实现方 法。 关键词 : Wi n d o ws CE、 通 知接 口、 用户通知 Ab s t r a c t : T h i s p a p e r d i s c u s s e s t h e a p p l i c a t i o n o f wi n d o ws c e n o t i f c a t i o n AP I ,a n d p r e s e n t s t h e s o l u t i o n i n p r o g r a mmi n g Ke y wo r d s : W i n d o ws CE; No t i fic a t i o n API ; Us e r No t i fic a t i o n 1引言 以 Wi n d o w s C E 为 操 作 系 统 的掌 上 电脑f 如 P o c k e t P C或 HP C ) , 除 具 有 P C的功 能 外 , 还具 有 很 强 的自身控制能力。 Wi n d o w s C E A P I 超越微软其它操作 系统的 A P I 的一个方面是它提供 了一个强有力的通 知接 口f N o t i fi c a t i o n A P I ) , 该接 E l 允许应用程序 自己安 排 自己在某个确定的时间运行 ,或者在某个系统事件 发生时运行 。 这使得我们可以应用它来设计开发各种 高级控制程序, 比如按时间或预订的事件来 自动开启 关闭计算机 或按时间或预订的事件来 自动开启 关闭 一 个或 多个应 用程序 。乃 至控 制一个或 多个 应用程序 的运行流程 。 2 通知 AP I 的解析 所谓通知是操作系统对发生的某个事件所发出的 响应信号。 Wi n d o w s C E对定时器事件发出的响应信号 即“ 定时器事件通知” 。 而对系统事件发出的响应信号 即“ 系统事件通 知” 。定 时器事件表 明 已经到达指定 时 间, 系统事件表明发生了系统级事件。 如添加或删除了 某设备 , 系统时间更改了, 与其它设备发生同步 , 检测 到 R S 2 3 2口连接等。 如果我们要在给定的时间直接运 行某个应用程序( 不用用户干涉) , 就可以简单地使用 “ 定时器事件通知” ,而当我们需要监控一些系统事件 的发生时 , 就要使用 系统事件通知” 。 特别需要强调的 是 : 除非不安装 电池或处 于死机状 态 否则掌上 电脑 的 电源始终不关闭;当用户按下关闭电源按钮或不使用 一 5 8一 (北京中 国 地 质大 学)田东风 Ti a n, Don g f en g 时。机器也只是处于休眠状态而并没有真正切断电源 ( 在休眠状态下 。 它仅提供能保持其时钟 、 应用程序及 R A M 中存储的数据所需的最少能量) 。 因此, 对于注册 使用“ 定时器事件通知” 或” 系统事件通知” 的程序 。 即 使系统是关闭的。当定时器事件到达时或发生系统事 件时 , 要运行的应用程序也会启动。 上述的“ 定时器事件通知” 的使用虽然方便 。 但有 时不能满足用户的要求 。比如对于复杂的控制流程 , 不但 到 了指定 时间要 运行应用程 序 ,而且要根据 用户 的不 同反应进行不 同 的控 制 。因此 。 Wi n d o w s C E还 提 供了第三种通知接 口: ” 用户通知” 。 用户通知” 也使 用定时器事件 。 但与“ 定时器事件通知” 不同, “ 用户通 知 ” 发生 时必须 被用户确认 , 从而 到 了“ 用 户通 知 ” 指定 的时间可根据用户的不同反应进行不同的流程控制。 比如 ,当用户仅需在指定的时间作一下提示 ,则使用 “ 用户通知”的应用程序可设计 为以四种方式 ( 闪动 L E D, 振动设备 , 播放声音和显示提示框 ) 提示用户 , 而 且用 户可随 时更 改提示方式 。又 比如 当用 户要求不 仅在指定的时间作一下提示, 还要在用户做 出确认后 才使程序继续运行 。 这就只能使用“ 用户通知” 而不能 使用“ 定时器事件通知” 。 当我们把 自己开发 的程 序注册到特定 的事 件通知 后 ,操作系统将在该事件发生时生成一个通知 。系统 使用通知与用户和其它程序通信。 Wi n d o w s C E共提供 了 六 个 通 知 接 口 : C e S e t U s e r N o t mc a t i o n 、 C e G e t U s e r No t i fic a t i o n P r e f e r e n c e s 、 Ce C l e a r t Us e r No t i fi c a t i o n、 C e Ha n d l e A p p No t i f c a t i o n s 、 C e R u n Ap p At T i me 和 C e R u n A p p A t E v e n t 。 前 四个为” 用户通知” 所使用 。 后两个分别 为“ 定时器事件通知” 和” 系统事件通知” 所使用 。下面 分别介绍这六个 A P I 的使用方法 : ( 1 )函数 C e S e t U s e r N o t i fi c a t i o n用于注册用 户通 知 。 其原型是: HANDI C e S e t Us e r No t i fic a t i o n f HANDI h No t i fic a t i o n , T CHAR p ws z Ap p Na me , S YS TI MT I ME l p T i me , P CE US ERNOT I F I C ATI ON l p U s e r N o t i6 c a t i o n ) ; 其参数含义是 : 句柄 h N o t i fi c a t i o n 设 维普资讯 嵌入式 系统 与单片机应 用 置为 0表示创 建一个新 的通 知 ,而要更 改已注册的通 知则设置 h N o t i fi c a t i o n为希望更改的用户通知的句柄 ( 这 个 句 柄 是 由 注 册 用 户 通 知 的 程 序 在 调 用 C e S e t U s e r N o t i f i c a t i o n后的返回值) ; p w s z A p p N a m e 是该 应用程序的名称 , 当通知发生时, 该应用程序的小图标 将 在任 务栏 上显 示 ; l p T i me是 一个 指 向 S YS T E MT I ME 结 构 指 针 该 结 构 指 定 了 通 知 发 生 的 时 间 ; l p U s e r No t i fi c a t i o n 也 是 一 个 结 构 指 针 , 它 指 向 P C E U S E R NO T I F I C AT I O N结构 Wi n d o w s C E用该 结构描述用 户如何被通知 , 这个结构 的定义是 : t y p e d e f s t r u c t U s e r N o t i fi c a t i o n T y p e DW ORD Ac t i o n F l a g s ; T CHAR p ws z Di a l o g T i t l e ; T CHAR p ws z Di a l o g T e x t ; T CHAR p ws z S o u n d ; DW ORD n Ma x S o u n d ; DW ORD d wRe s e r v e d ; l C E _ U S E R _ N O T I F I C A T I O N; 其 中变量 Ac t i o n F l a g s是 一 组 定 义 了在 到 达指 定 的时间时以何种形式提示用户的标志: P U N _ L E D ( 闪动 屏幕) , P U N _ V I B R A T E ( 振动设备) , P U N _ D I A L O G ( 显示 对话框) ,P U N _ S O U N D ( 播放声音文件) 和 P U N R E P E A T ( 重复声 音文件 1 0到 1 5秒) ,它可 以是 上述 标志 的任 意组合。 从程序调用 C e S e t U s e r N o t ifi c a t i o n开始到用户 得 到通 知的这一 时 间段 中 ,通 知一 直处 于活 动状 态 。 如要在它超时之前修改此通知 ,程序可通过再次调用 C e S e t U s e r N o t i fi c a t i o n来实 现 ( 2 ) 调 用 C e G e t U s e r N o t i fi c a t i o n P r e f e r e n c e s ( HWN D h W n d P a r e n t , P CE _US ERNOT I F I CAT I ON l p N o t ifi c a t i o n ) ) 可配置用户通知, 以便让用户能有修改 提示方式的机会 其中 h Wn d P a r e n t 是提示框父窗 口的 窗 口句柄 。 ( 3 ) 调 月 j C e C l e a nU s e r N o t mc a t i o n( H AN DL E h N o - t i fi c a t i o n ) 可 以实 现在用 户通 知到达之前 清除它 。 ( 4 ) 调用 C e H a n d l e A p p N o t i fi c a t i o n s函数 以确认用 户通知。用户通知到达后要求确认。对于显示提示框 的通知 ,确认 的方式是 点击提示框 的确定按钮或按 下 设备外壳上的通知按钮( 此时用户通知仅起到提示的 作用, 不启动应用程序) ; 对于不显示提示框的通知 , 系 统将在任务栏上显示注册该通知的程序的图标 当用 户点击此图标时系统将启动相应的应用程序的一个实 例 ( 系统还传递一个命令行参数 l p C m d L i n e以表明为 什 么 应 用 程 序 会 运 行 ,该 参 数 是 串 A P P _RUN T O HAN DL E NO T I F I C A1 1 O N加空格加 通知 的句柄 ) 。 对于不显示提示框的用户通知,在应用程序中要调用 C e H a n d l e A p p N o t i fi c a t i o n s函数来确认通知 ,该 函数将 所有用于应用程序的活动通知都标记为已处理 ,并删 除任务栏 上的 图标 。在实 际编码时还要 考虑是否 有该 应用程序的另一个实例在运行 , 如有 , 则应向它发送一 个 自定义消息由该实例处理此通知并终止 自身以节省 资源。 ( 5 ) 调 用 B O OL C e Ru n A p p At T i me ( T C HA R p w s z A p p N a m e 。S Y S T E M T I ME *l p T i m e ) 生成“ 定时器事件通 知” 。 其参数含义是 : l p T im e是一个结构指针, 该结构指 定了运行应用程序的时间; p w s z A p p N a m e是要运行的 应 用程序的名称 。 由于只是在 给定 的时 间 自动运行某 个应用程序 ,因此 比较简单。要修改 “ 定时器事件通 知 ” , 只要再 次调 用 C e R u n A p p A t T i me 。 因为后 一次 调 用 C e R u n A p p A t T i m e 将替换前一次的通知。 要清除“ 定 时器事件通 知” ,只要在 调用 C e R u n Ap p A t T i m e时 , 在 参数 l p T i me中传递 一个 N U L L指 针 。 ( 6 ) 调月 j B O O L C e R u n A p p A t E v e n t ( T C H A R p w s z - A p p N a m e , L O N G 1 Wh i c h E v e n t ) 生成” 系统事件通知” , 其 参数含 义是 : p w s z A p p N a me是 要运 行 的应用 程序 的名 称 ; 1 Wh i c h E v e n t是指 出要监视 哪一个事件 标志常量 如下 : NO1 1 n CATI ON _E VE N - N ON E 清除事件通 知 NOTI F I CATI ON E V E N T J S Y N C E N D 同步完 成通知 NOT I F I C AT I ON _E V E N T DE V I C E C HA NG E 添 加或删 除设 备通知 NOTI F I C ATI ON EVENT RS 2 3 2 一DE T E C T E D 检测 到 R S 2 3 2连接通知 NO1 1 F I C A1 1 ON E V E NT J ME C HA NG E 系 统 时 间更改 通知 NO1 1 n C AT I ON EVENT RE S T ORE E N D 设 备 恢复完成通 知 要停止响应系统事件通知 ,应用程序只要再次调 用 C e R u n A p p A t E v e n t , 并在 1 Wh i c h E v e n t 参数中传递其 名称 和 N OT I 兀C A 1 1 O N E V E N T _ NO NE 。 3 通知 A P I的使用代码实例 # i n c l u d e CE _US ER _ NOT I F I CA TI ON g _ceun; ( 1 ) 对 C E U S E R N O T I F I C A T I ON结构 初 始化 的 代码 片段 一 5 9 维普资讯 嵌入式 系统 与单片机 应用 me ms e t ( &g _ _ c e u n , 0 , s i z e o f ( g _ c e u n ) ) ; g _ _ c e u n Ac t i o n F l a g s= P UN DI ALOG; g _ c e u n p ws z Di a l o g Ti t l e= s z Dl g Ti t l e ; g _ _ c e u n p ws z Di a l o g Te x t= s z Dl g T e x t ; g _ _ c e u n p ws z S o u n d= s z S o u n d ; g _ _ c e u n n Ma x S o u n d=s i z e o f ( s z S o u n d ) ; f 2 1 注册用户通知 的代码片段: S Y S T E MT I ME s t ; Ge t L o c a l T i me( &s t ) ; G e t Mo d u l e F i l e N a me ( h I n s t ,s z E x e N a me ,s i z e o f ( s z E x e N a me ) ) ; h N o t i f y=C e S e t U s e r N o t i f i c a t i o n( 0 ,s z E x e Na me , &s t &g _ c e u n ) ; f 3 ) 配置用 户通知 的代码段: C e Ge t U s e r N o t i f i c a t i o n P r e f e r e n c e s ( h Wn d , &g _ c e u n ) ; ( 4 )使用 C e H a n d l e A p p N 0 t i f ic a t i0 n s 并只运行一个 实例f 为节省资源) 的代码段 : 判 断应 用程序 的启 动是否源 于用 户通知 i f ( 1 s t r c mp ( s z T e x t , AP P _RUNT OHANDL EN OT I F I C A T I O N ) = = 0 ) G e t Mo u d l e F i l e N a me ( h I n s t , s z T e x t , s i z e o f ( s z T e x t ) ) ; C e Ha n d l e A p p N 0 t i f i c a t i 0 n s ( s z T e x t ) ; h N o t i f y:f H AND L E ) 一 w t o l ( p P t r ) ; 取通知 的句柄 检查 是否 已有应用程 序的实例在运行 h Wn d:F i n d Wi n d o w ( N UL L s z Ap p N a me ) ; i f ( h Wn d ) t l 有 。 向它发送 一 个 自定 义消息 由它 处理此 用户通知 S e n d Me s s a g e ( h Wn d , MYMS G T E L L NO T I F Y , 0 , ( L P A R A M) h N o t i f y ) ; 终 止 自身, 代 码略去 ( 5 ) 使用“ 定时器事件通知” 的代码段: S YS TEMT I ME s t ; Ge t L o c a l Ti me f &s t ) ; Ge t Mo d u l e F i l e Na me f h I n s t s z Ex e Na me , s i z e o f f s z E x e N a m e ) ) ; C e R u n A p p A t T i me( s z E x e N a me , &s t ) ; ( 6 ) 使用 “ 系统事件 通知” 的代 码段: L ONG 1 E v e n t ; i f ( I s Dl g B u t t o n C h e c k e d ( h Wn d , I D C S Y NC E N D ) = =1 ) 1 Ev e n t I _NOTI F I CATI ON E VEN T_S YNC_END; i f ( I s Dl g B u t t o n C h e c k e d( h Wn d , I D C S E R I AI 。D E T E C = =1 ) 1 Ev e n t l_ NOT I FI CATI ON EVENT _RS 2 3 2一 DE T ECT ED; 一 6 0一 i f f I s D l g B u t t o n C h e c k e d ( h Wn d , I D C D E V I C E C H AN G E ) = =1 ) 1 Ev e n t l =NOTI F I CAT I ON E VEN T_DEVI CE CHANGE; i f ( I s D l g B u t t o n C h e c k e d( h Wn d , I D C T I ME C HA N G E ) = =I ) 1 Ev e n t l _NOTI F I CAT I ON E VEN T_TI ME CHANGE; i f ( I s D l g B u t t o n C h e c k e d( h Wn d , I D C R E S T O R E E N D ) = =I ) 1 Ev e n t l= N0T I FI CAT1 0N EVENT_RES TOREEND; G e t Mo d u l e F i l e Na m e mI n s t , s z E x e N a m e , s i z e o f f s z E x e N a m e ) ) ; C e R u n A p p At E v e n t ( s z E x e N a me , 1 E v e n t ) ; 以上我们介绍了 Wi n d o w s C E N o t i fi c a t i o n A P I 的 使用 方法 ,关 于 Wi n d o w s C E应用 程序开 发环境 的使 用 , 可参考有关资料【 1 1 【 2 【 3 【 4 。 参 考文 献 1 D o u g l a s B o l i n g 著 北京博彦科技发展有限公 司 译 M i c r o s o f t Wi n d o w s C E程序设计 北京 : 北京大学出版社, 1 9 9 9 2 田东风 1 r S o c k红外通讯的原理与实现 微计算机信息, 2 0 0 1 ; ( 1 1 ) 【 3 田尔J x 【 P P C上的 M O D E M通讯程序设计 微汁算机信息, 2 0 0 0 ; ( 2 ) 【 4 田东风 Wi n d o w s C E应用程序开发实例 软件世界, 2 0 0 0 ; ( 1 ) 作者简介: 田东风, 中国地质大学f 北京) 信息工程学院 副教授 , 主要 研究 方 向为人_T智 能 , 嵌 入式 系统应 用 。 电话 : 0 l 0 8 2 3 2 3 l 8 3 ( O) 。 ( 1 0 0 0 8 3 北京中国地质大学信息 工程学院)田东风 现场总线技术应用 2 0 0 例 现场 总线 技 术是 现代 工 厂 、 商 业设 施 、 楼 宇 、 公共 设 施运 行 、 生 产过 程 中的 现场设 备 、 仪 表 、 执行 机 构与 控 制 室 的监测 、 控 制 装置 及管理 与 控 制系统 之 间 的数 字式 、 多点通信互连 的, 数据总线式智能底层控制网络。 现场 总线 技 术 保证 了现 代 工 厂 、 商 业设 施 、 智能 楼 宇 、 公共

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论