WinCE7系统事件通知 by斜风细雨QQ:253786989 2012-01-03
WinCE7操作系统支持多个不同的系统事件,如:“NOTIFICATION_EVENT_SYNC_END”,代表PC与WinCE系统数据同步完成。如果想在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系统发生“PC与WinCE系统数据同步完成”和“发生设备加载或者卸载”两个事件之一时,自动运行“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