WinCE7系统事件通知

来源:互联网 发布:paxos算法推导 编辑:程序博客网 时间:2024/04/28 12:38
 

WinCE7系统事件通知    by斜风细雨QQ:253786989    2012-01-03

   WinCE7操作系统支持多个不同的系统事件,如:“NOTIFICATION_EVENT_SYNC_END”,代表PCWinCE系统数据同步完成。如果想在WinCE7系统支持的这若干个系统事件之一发生时自动启动某个应用程序,这就是“WinCE7系统事件通知”的用处。

  范例代码:

TCHAR szArgs[] = TEXT("Event notification!");CE_NOTIFICATION_TRIGGER nt;HANDLE hNotify;TCHAR szText[128] = {0};memset (&nt, 0, sizeof (CE_NOTIFICATION_TRIGGER));nt.dwSize = sizeof (CE_NOTIFICATION_TRIGGER);nt.dwType = CNT_EVENT;nt.dwEvent = NOTIFICATION_EVENT_SYNC_END | NOTIFICATION_EVENT_DEVICE_CHANGE;nt.lpszApplication = TEXT("NotificationApp.exe");nt.lpszArguments = szArgs; // 设置系统事件通知hNotify = CeSetUserNotificationEx (0, &nt, NULL);if (hNotify)  {     wsprintf (szText, TEXT ("Event notification set for %08x"), nt.dwEvent);}else{     wsprintf (szText, TEXT("Set Event notification failed rc: %d"), GetLastError());}MessageBox (szText, TEXT("设置系统事件通知"), MB_OK | MB_ICONINFORMATION);

  设置系统事件通知,同样使用CeSetUserNotificationEx函数。关于CeSetUserNotificationEx函数的使用参考“WinCE7用户通知”。上面的范例代码,在WinCE7系统发生“PCWinCE系统数据同步完成”和“发生设备加载或者卸载”两个事件之一时,自动运行“NotificationApp.exe”。

  在“NotificationApp.exe”执行起来之后,有可能需要判断一下该app被系统执行的原因。到底是WinCE7系统发生了事件“NOTIFICATION_EVENT_SYNC_END”还是“NOTIFICATION_EVENT_DEVICE_CHANGE”。这可以通过获取命令行参数来进行判断,拿上面的范例代码来说,假如设备的COM1新加载了一个串口设备,则命令行字符串可能如下:“Event notification! /ADD COM1:”。这是在参考书上看到的,具体每个事件的命令行参数是什么,我在MSDN帮助文档中没有找到。要用的话,可能还要具体的测试一下或者查一些资料才能得知。

  WinCE7系统可能支持的事件如下,具体还要看WinCE7的帮助文档:

NOTIFICATION_EVENT_SYNC_END

系统同步完成

NOTIFICATION_EVENT_DEVICE_CHANGE

设备加载或者卸载

NOTIFICATION_EVENT_RS232_DETECTED

RS232串口连接

NOTIFICATION_EVENT_TIME_CHANGE

系统时间更改

NOTIFICATION_EVENT_TZ_CHANGE

系统时区更改

NOTIFICATION_EVENT_RESTORE_END

一个完整的设备数据恢复完成

NOTIFICATION_EVENT_WAKEUP

设备唤醒

NOTIFICATION_EVENT_MACHINE_NAME_CHANGE

设备名称更改

NOTIFICATION_EVENT_RNDIS_FN_DETECTED

RNDIS连接

NOTIFICATION_EVENT_INTERNET_PROXY_CHANGE

代理服务器更改

WinCE7系统事件通知    by斜风细雨QQ:253786989    2012-01-03