WinCE7用户通知

WinCE7用户通知    by斜风细雨QQ253786989    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类型结构体cnt
CE_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类型结构体cun
CE_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类型结构体cun
TCHAR 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斜风细雨QQ253786989    2011-12-26

你可能感兴趣的:(api,qq,user,文档,Path,WinCE)