日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows CE Notification API的使用方法

發布時間:2025/4/16 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows CE Notification API的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 引言
???? 以Windows CE 為操作系統的掌上電腦(如PocketPC或HPC),除具備PC的功能外,還具備很強的自身控制能力。Windows CE API超越微軟其他操作系統的 API的一個方面是他提供了一個強有力的通知接口(NotificationAPI),該接口允許應用程式自己安排自己在某個確定的時間運行,或在某個系統事件發生時運行,這使得我們能夠應用他來設計研發各種高級控制程式,比如按時間或預訂的事件來自動開啟/關閉電腦,或按時間或預訂的事件來自動開啟/關閉一個或多個應用程式,乃至控制一個或多個應用程式的運行流程。
2 通知API的解析
??? 所謂通知是操作系統對發生的某個事件所發出的響應信號。Windows CE對定時器事件發出的響應信號即“定時器事件通知”,而對系統事件發出的響應信號即“系統事件通知”。定時器事件表明已到達指定時間,系統事件表明發生了系統級事件,如添加或刪除了某設備,系統時間更改了,和其他設備發生同步,檢測到RS232口連接等。假如我們要在給定的時間直接運行某個應用程式(不用用戶干涉),就能夠簡單地使用“定時器事件通知”,而當我們需要監控一些系統事件的發生時,就要使用″系統事件通知″。特別需要強調的是:除非不安裝電池或處于死機狀態,否則掌上電腦的電源始終不關閉;當用戶按下關閉電源按鈕或不使用時,機器也只是處于休眠狀態而并沒有真正切斷電源(在休眠狀態下,他僅提供能保持其時鐘、應用程式及RAM中存儲的數據所需的最少能量)。因此,對于注冊使用“定時器事件通知”或″系統事件通知″的程式,即使系統是關閉的,當定時器事件到達時或發生系統事件時,要運行的應用程式也會啟動。
上述的“定時器事件通知”的使用雖然方便,但有時不能滿足用戶的需要。比如對于復雜的控制流程,不但到了指定時間要運行應用程式,而且要根據用戶的不同反應進行不同的控制。因此,Windows CE還提供了第三種通知接口: ″用戶通知″。″用戶通知″也使用定時器事件,但和“定時器事件通知”不同,“用戶通知”發生時必須被用戶確認,從而到了“用戶通知”指定的時間可根據用戶的不同反應進行不同的流程控制。比如,當用戶僅需在指定的時間作一下提示,則使用“用戶通知”的應用程式可設計為以四種方式(閃動LED,振動設備,播放聲音和顯示提示框)提示用戶,而且用戶可隨時更改提示方式。又比如,當用戶需要不但在指定的時間作一下提示,還要在用戶做出確認后才使程式繼續運行,這就只能使用“用戶通知”而不能使用“定時器事件通知”。
當我們把自己研發的程式注冊到特定的事件通知后,操作系統將在該事件發生時生成一個通知。系統使用通知和用戶和其他程式通信。Windows CE共提供了六個通知接口:
CeSetUserNotification
CeGetUserNotificationPreferences
CeClearUserNotification
CeHandleAppNotifications
CeRunAppAtTime和CeRunAppAtEvent
前四個為″用戶通知″所使用,后兩個分別為“定時器事件通知”和″系統事件通知″所使用。下面分別介紹這六個API的使用方法:
(1)函數CeSetUserNotification用于注冊用戶通知,其原型是:
HANDLE CeSetUserNotification(
HANDLE hNotification,?
TCHAR* pwszAppName,?
SYSTEMTIME* lpTime,?
PCE_USER_NOTIFICATION lpUserNotification?
);
其參數含義是:句柄hNotification配置為0表示創建一個新的通知,而要更改已注冊的通知則配置hNotification為希望更改的用戶通知的句柄(這個句柄是由注冊用戶通知的程式在調用CeSetUserNotification后的返回值);pwszAppName是該應用程式的名稱,當通知發生時,該應用程式的小圖標將在任務欄上顯示;lpTime是個指向SYSTEMTIME結構指針,該結構指定了通知發生的時間;lpUserNotification也是個結構指針,他指向PCE_USER_NOTIFICATION結構, Windows CE用該結構描述用戶怎樣被通知,這個結構的定義是:
typedef struct UserNotificationType {
DWORD ActionFlags;
TCHAR* pwszDialogTitle;
TCHAR* pwszDialogText;
TCHAR* pwszSound;
DWORD nMaxSound;
DWORD dwReserved;
} CE_USER_NOTIFICATION, *PCE_USER_NOTIFICATION;
其中變量ActionFlags是一組定義了在到達指定的時間時以何種形式提示用戶的標志:PUN_LED(閃動屏幕),PUN_VIBRATE(振動設備),PUN_DIALOG(顯示對話框),PUN_SOUND(播放聲音文檔)和PUN_REPEAT(重復聲音文檔10到15秒),他能夠是上述標志的任意組合。從程式調用CeSetUserNotification開始到用戶得到通知的這一時間段中,通知一直處于活動狀態。如要在他超時之前修改此通知,程式可通過再次調用CeSetUserNotification來實現
(2)調用CeGetUserNotificationPreferences,函數原型為:
BOOL CeGetUserNotificationPreferences(
HWND hWndParent,?
PCE_USER_NOTIFICATION lpNotification?
);
這個函數可配置用戶通知,以便讓用戶能有修改提示方式的機會,其中hWndParent是提示框父窗口的窗口句柄。
(3)調用CeClearUserNotification能夠實現在用戶通知到達之前清除他。
(4)調用CeHandleAppNotifications 函數以確認用戶通知。用戶通知到達后需要確認。對于顯示提示框的通知,確認的方式是點擊提示框的確定按鈕或按下設備外殼上的通知按鈕(此時用戶通知僅起到提示的作用,不啟動應用程式);對于不顯示提示框的通知,系統將在任務欄上顯示注冊該通知的程式的圖標,當用戶點擊此圖標時系統將啟動相應的應用程式的一個實例(系統還傳遞一個命令行參數lpCmdLine以表明為什么應用程式會運行,該參數是串 APP_RUN_TO_HANDLE_NOTIFICATION加空格加通知的句柄)。對于不顯示提示框的用戶通知,在應用程式中要調用 CeHandleAppNotifications 函數來確認通知,該函數將任何用于應用程式的活動通知都標記為已處理,并刪除任務欄上的圖標。在實際編碼時還要考慮是否有該應用程式的另一個實例在運行,如有,則應向他發送一個自定義消息由該實例處理此通知并終止自身以節省資源。
(5)調用CeRunAppAtTime生成“定時器事件通知”,函數原型為:
BOOL CeRunAppAtTime(
TCHAR* pwszAppName,?
SYSTEMTIME* lpTime?
);
其參數含義是:lpTime是個結構指針,該結構指定了運行應用程式的時間;pwszAppName是要運行的應用程式的名稱。由于只是在給定的時間自動運行某個應用程式,因此比較簡單。要修改“定時器事件通知”,只要再次調用CeRunAppAtTime。因為后一次調用CeRunAppAtTime將替換前一次的通知。要清除“定時器事件通知”,只要在調用CeRunAppAtTime時,在參數lpTime中傳遞一個NULL指針。
(6)調用CeRunAppAtEvent生成″系統事件通知″,函數原型:
BOOL CeRunAppAtEvent(
TCHAR* pwszAppName,?
LONG lWhichEvent?
);
其參數含義是:pwszAppName是要運行的應用程式的名稱;lWhichEvent 是指出要監控哪一個事件,標志常量如下:
NOTIFICATION_EVENT_NONE 清除事件通知
NOTIFICATION_EVENT_SYNC_END 同步完成通知
NOTIFICATION_EVENT_DEVICE_CHANGE 添加或刪除設備通知?
NOTIFICATION_EVENT_RS232_DETECTED 檢測到RS232連接通知
NOTIFICATION_EVENT_TIME_CHANGE 系統時間更改通知
NOTIFICATION_EVENT_RESTORE_END 設備恢復完成通知
要停止響應系統事件通知,應用程式只要再次調用CeRunAppAtEvent,并在lWhichEvent參數中傳遞其名稱和NOTIFICATION_EVENT_NONE。
3 通知API的使用代碼實例
#include?
CE_USER_NOTIFICATION g_ceun;?
(1) 對CE_USER_NOTIFICATION結構初始化的代碼片段. memset (&g_ceun, sizeof(g_ceun));
g_ceun.ActionFlags = PUN_DIALOG;?
g_ceun.pwszDialogTitle = szDlgTitle;?
g_ceun.pwszDialogText = szDlgText;?
g_ceun.pwszSound = szSound;?
g_ceun.nMaxSound = sizeof(szSound);?
(2)注冊用戶通知的代碼片段:
SYSTEMTIME st; GetLocalTime (&st);
GetModuleFileName (hInst, szExeName,sizeof(szExeName));
hNotify = CeSetUserNotification (0, szExeName,&st, &g_ceun);?
(3)配置用戶通知的代碼段:
CeGetUserNotificationPreferences(hWnd, &g_ceun);?
(4)使用CeHandleAppNotifications并只運行一個實例(為節省資源)的代碼段 :
//判斷應用程式的啟動是否源于用戶通知
If (lstrcmp(szText,APP_RUN_TO_HANDEL_NOTIFICATION==0)
GetModuleFileName (hInst, szText, sizeof(szText));
CeHandleAppNotifications (szText);?
hNotify =(HANDLE)_wtol(pPtr); //取通知的句柄
//檢查是否已有應用程式的實例在運行
hWnd = FindWindow(NULL, szAppName);
if(hWnd)//如有,向他發送一個自定義消息,由他處理此用戶通知
SendMessage(hWnd, MYMSG_TELLNOTIFY, 0, (LPARM)hNotify);
//終止自身, 代碼略去
(5)使用“定時器事件通知”的代碼段:?
SYSTEMTIME st; GetLocalTime (&st);
GetModuleFileName (hInst, szExeName, sizeof(szExeName));
CeRunAppAtTime (szExeName, &st);
(6)使用“系統事件通知”的代碼段:
LONG lEvent;?
if (IsDlgButtonChecked(hWnd, IDC_SYNC_END) ==1)
lEvent != NOTIFICATION_EVENT_SYNC_END;
if (IsDlgButtonChecked(hWnd, IDC_SERIAL_DETECT)==1)?
lEvent !=NOTIFICATION_EVENT_RS232_DETECTED;?
if (IsDlgButtonChecked(hWnd, IDC_DEVICE_CHANGE)== 1)
lEvent != NOTIFICATION_EVENT_DEVICE_CHANGE;
if (IsDlgButtonChecked(hWnd, IDC_TIME_CHANGE)==1)
lEvent != NOTIFACTION_EVENT_TIME_CHANGE;?
if (IsDlgButtionChecked(hWnd, IDC_RESTORE_END) ==1)
lEvent != NOTIFICATION_EVENT_RESTORE_END;
GetModuleFileName (hInst, szExeName, sizeof(szExeName);?
CeRunAPpAtEvent(szExeName, lEvent);?
以上我們介紹了Windows CE Notification API的使用方法,關于Windows CE應用程式研發環境的使用。

總結

以上是生活随笔為你收集整理的Windows CE Notification API的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。