我们会遇到这样的情况,在机场候机大厅的航班时刻显示屏上,经常会弹出一个错误对话框,因为无人值守,所以这个对话框会长时间的停留在显示屏上。对于这样的问题,我们不能要求机场专门有一个人负责盯着,我们需要定制出一个智能的操作系统来屏蔽这些对话框,使设备能够长时间稳定的运行。Windows Embedded Standard 2009中就具有这样的功能,它能够实现消息框的默认回复功能。
    运行在操作系统上的应用程序和功能,通常需要用户输入。例如,显示在一个消息框中的系统消息,要求用户至少需要点击确认并释放消息框,使该系统能继续操作。在一个无外设系统,或任何没有用户操作的系统上,不与消息框交互,可能会导致工作流程中断并且系统无法执行任务。Windows Embedded Standard 2009为您提供隐藏或禁止这些消息的能力。
在Win32中拦截消息
    Windows为开发人员提供了一个机制,事件到达目的地之前,可以拦截它们。这种机制被称为Win32钩子,由于这一机制以及涉及到的开发代码,超出了本文的范围,所以我们在这里仅简单介绍一下钩子的原理。Win32提供了16个预定义的钩子,您可以使用它们创建一个钩子回调函数,用来过滤您指定要处理的钩子。然后,您可以使用SetWindowsHookEx Win32 API注册钩子过程。例如,您可以为WH_KEYBOARD_LL钩子创造一个钩子过程,拦截所有键盘事件,这样就可以防止特定的键达到目的地了。要拦截应用程序消息,您可以实现MessageProc Win32 API并且处理对话框中事件上的一个过滤器。
    Windows Embedded Standard 2009为您提供了一个简单的解决回复一个对话框的办法:消息框默认回复组件,它允许您指定默认处理消息选项。例如,如果该消息框有两个按钮,“OK”和“Cancel”,如果“OK”是默认值,“OK”将被选中。这相当于点击“OK”。此外,消息框的内容被发送到Windows事件日志。这是很有帮助的,因为消息框重要,不应该被忽视。事件日志可以被远程查看,或编程访问。
实现消息框默认回复
    要实现消息处理,添加Message Box Default Reply组件,它位于目标设计器中组件浏览器“Embedded Enabling Features”分支下。图3-4描述了消息框默认回复组件设置。配置非常简单:启用或禁用消息框显示,设置错误的严重性写入日志,并且启用或禁用信息发送到事件日志。
lzg_ad: 在WES中实现消息框默认回复功能_第1张图片
小结
    消息框默认回复组件的目的是拦截消息。它提供了一些通常需要用户输入的消息处理标准选项。您可以创建一个更详细和自定义的消息拦截功能,通过编程实现Win32钩子来执行消息框默认回复组件提供的能力以外的任务。