WinCE7使用者通知 by斜風細雨QQ:253786989 2011-12-26
設定使用者通知主要是讓系統在某個時間點,彈出一個“通知”給使用者一個提醒。還可以由此執行一個我們預先指定好的app。
(1) 設定使用者通知
HANDLE CeSetUserNotificationEx( HANDLE hNotification, CE_NOTIFICATION_TRIGGER* pcnt, CE_USER_NOTIFICATION* pceun );
如果是設定新的使用者通知,hNotification設定為0。如果是修改一個已經註冊過的使用者通知,則用該通知的控制代碼給hNotification參數賦值。第二個參數是CE_NOTIFICATION_TRIGGER類型,主要用來設定通知類型(對於使用者通知有兩種類型:CNT_TIME和CNT_PERIOD),以及某一個類型通知必要參數。第三個參數是系統通知使用者的方式,比如顯示一個通知對話方塊,或者閃爍LED,裝置震動,播放音效檔等等。其中閃爍LED和裝置震動並不是每個WinCE裝置都支援。
下面用代碼示範一下:
// 填充CE_NOTIFICATION_TRIGGER類型結構體cntCE_NOTIFICATION_TRIGGER cnt;memset(&cnt, 0, sizeof(CE_NOTIFICATION_TRIGGER));cnt.dwSize = sizeof(CE_NOTIFICATION_TRIGGER);cnt.dwType = CNT_PERIOD;cnt.lpszApplication = TEXT("NotificationApp.exe");cnt.lpszArguments = TEXT("This is my user notification string.");SYSTEMTIME st = {0}, ste = {0};GetLocalTime (&st);st.wMinute += 2;if (st.wMinute > 59) { st.wHour++; st.wMinute -= 60;}ste = st;ste.wMinute += 2;if (ste.wMinute > 59) { ste.wHour++; ste.wMinute -= 60;}cnt.stStartTime = st;cnt.stEndTime = ste;// 填充CE_USER_NOTIFICATION類型結構體cunCE_USER_NOTIFICATION cun;memset (&cun, 0, sizeof (CE_USER_NOTIFICATION));cun.ActionFlags = PUN_DIALOG;cun.pwszDialogTitle = TEXT("對話方塊方式使用者通知");cun.pwszDialogText = TEXT("時間到!");
// 設定使用者通知HANDLE hNotify = CeSetUserNotificationEx(0, &cnt, &cun);TCHAR szText[128] = {0};if (hNotify) { wsprintf (szText, TEXT("設定使用者通知成功,時間: %d:%02d:%02d"), st.wHour, st.wMinute, st.wSecond);}else{ wsprintf (szText, TEXT("設定使用者通知失敗. rc = %d"), GetLastError());}MessageBox (szText, TEXT("設定使用者通知"), MB_OK | MB_ICONINFORMATION);
上面的代碼採用彈出對話方塊的方式通知使用者,彈出的“通知”對話方塊的標題是“對話方塊方式使用者通知”,文本是“時間到!”。如果2分鐘使用者還沒有理會“通知”對話方塊,則“通知”對話方塊自動銷毀。如果點擊“通知”對話方塊的Open按鈕,則根目錄下的“NotificationApp.exe”將會被執行。
(2)配置使用者通知
上面代碼中,是採用固定的通知方式(彈出對話方塊方式)。也可以讓使用者來選擇通知方式(彈出對話方塊,閃爍LED,裝置震動,播放音效檔等等)。
BOOL CeGetUserNotificationPreferences( HWND hWndParent, PCE_USER_NOTIFICATION lpNotification );
調用這個函數會彈出一個對話方塊(Notification Options Dialog),可以讓使用者選擇通知方式,如果是播放音效檔,還可以通過一個組合框選擇系統中支援的音效檔。使用者選擇完成之後,點擊“OK”按鈕,則該函數返回TRUE,lpNotification參數將由使用者所做的修改來填充。
示範代碼:
// 填充CE_USER_NOTIFICATION類型結構體cunTCHAR szSound[MAX_PATH] = TEXT ("alarm1.wav");cun.ActionFlags = PUN_DIALOG;cun.pwszDialogTitle = TEXT("對話方塊方式使用者通知");cun.pwszDialogText = TEXT("時間到!");cun.pwszSound = szSound;cun.nMaxSound = sizeof(szSound);CeGetUserNotificationPreferences (m_hWnd, &cun);
在調用CeGetUserNotificationPreferences函數之前,填充cun作為(Notification Options Dialog)預設設定。在該函數返回之後,cun結構體已經包含了使用者所作的修改。這時在調用CeSetUserNotificationEx設定通知時,可以將此處的cun作為其第3個參數傳遞即可。
(3) 清除使用者通知
在某個由CeSetUserNotificationEx函數設定的通知發生之前,可以調用CeClearUserNotification函數清除該通知.
BOOL CeClearUserNotification( HANDLE hNotification );
(4) 響應使用者通知
在第一段示範代碼中,使用者通知將執行NotificationApp.exe應用程式,在該程式中我們可以通過調用CeHandleAppNotifications函數來響應使用者通知。對於第一段示範代碼來說,在NotificationApp.exe中調用CeHandleAppNotifications函數之後,“通知”對話方塊將銷毀,使用者通知得到響應。
BOOL CeHandleAppNotifications( TCHAR* pwszAppName );
示範代碼:
CeHandleAppNotifications(TEXT("NotificationApp.exe"));
“WinCE7使用者通知”功能主要用到的API函數就是上面幾個,在工作中有這個需要的時候,還是多做一些實驗,多看一下MSDN文檔,才能認識的更深刻些。
WinCE7使用者通知 by斜風細雨QQ:253786989 2011-12-26