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 |
Proxy 伺服器更改 |
WinCE7系統事件通知 by斜風細雨QQ:253786989 2012-01-03