locked
windows mobile上如捕获当前有日历事件发生呢 RRS feed

  • 问题

  • 比如我添加了一个约会,在某时某刻,这个约会到了.然后系统给我提示,我还想做点其他事情,我该如何捕获这个事件呢
    2009年6月4日 7:16

答案

  • 上面的方法已经可以捕获到了,只是加一下判断就可以了。

    #define CALENDAR_APP_NAME                TEXT("CALENDAR.EXE")
    #define CALENDAR_APP_NAME_ALLDAY   TEXT("CALENDAR.EXE //allday")

    case CNT_CLASSICTIME: //在此处判断是否为MS Calendar的就可以了。
       判断是否等于:
         if( wcscmp(pcenih->pcent->lpszApplication,CALENDAR_APP_NAME) == 0 )   //日历事件不是全天的判断
         
         else if( memcmp(pcenih->pcent->lpszApplication,CALENDAR_APP_NAME_ALLDAY,wcslen(CALENDAR_APP_NAME_ALLDAY)) == 0 )  //日历事件是全天的判断

     我是通过这种方法来判断的。


    li_guotao
    2009年7月13日 9:46

全部回复

  • 这个可以通过捕获微软的Notification来实现。

    //获得通知句柄数
      bRet = CeGetUserNotificationHandles(NULL, 0, &dwHowMany);
      if( !bRet )
       break;

      //分配句柄指针
      handles = new HANDLE[dwHowMany];
      if( !handles )
       break;

      //获得通知句柄
      bRet = CeGetUserNotificationHandles(handles, dwHowMany, &dwHowMany);
      if( !bRet )
       break;

      DEBUGMSG( DBG_TRACE,(TEXT("CeGetUserNotificationHandles Nofity GetMany = %ld"),dwHowMany) );
      for( DWORD i = 0; i < dwHowMany; i++ )
      {
       //获得通知消息占用缓冲区大小
       bRet = CeGetUserNotification(handles[i],0,&dwBytesNeeded,NULL);
       if( !bRet && dwBytesNeeded == 0 )
        continue;

       //分配缓冲区
       pBuffer = new BYTE[dwBytesNeeded];
       if( !pBuffer )
        continue;

       //获得用户通知信息
       bRet = CeGetUserNotification(handles[i],dwBytesNeeded,&dwBytesNeeded,pBuffer);
       if( !bRet )
       {
        delete[] pBuffer;
        pBuffer = NULL;
        continue;
       }

       //包含有关通知事件
       CE_NOTIFICATION_INFO_HEADER *pcenih = (CE_NOTIFICATION_INFO_HEADER*)pBuffer;
       if (pcenih->pcent->lpszApplication)
       {
          switch(pcenih->pcent->dwType)
         {
           case CNT_CLASSICTIME: //在此处判断是否为MS Calendar的就可以了。
         }
       }
      }
    }

    括号不对的话,自已对应一下。

    希望你成功!


    http://blog.csdn.net/li_guotao

    2009年7月10日 9:47
  • 这个好像是已经捕获到通知后的处理函数,那如何注册捕获这个通知呢。谢谢哈
    2009年7月10日 9:51
  • 上面的方法已经可以捕获到了,只是加一下判断就可以了。

    #define CALENDAR_APP_NAME                TEXT("CALENDAR.EXE")
    #define CALENDAR_APP_NAME_ALLDAY   TEXT("CALENDAR.EXE //allday")

    case CNT_CLASSICTIME: //在此处判断是否为MS Calendar的就可以了。
       判断是否等于:
         if( wcscmp(pcenih->pcent->lpszApplication,CALENDAR_APP_NAME) == 0 )   //日历事件不是全天的判断
         
         else if( memcmp(pcenih->pcent->lpszApplication,CALENDAR_APP_NAME_ALLDAY,wcslen(CALENDAR_APP_NAME_ALLDAY)) == 0 )  //日历事件是全天的判断

     我是通过这种方法来判断的。


    li_guotao
    2009年7月13日 9:46
  • 呵呵,谢谢,我意思你的代码是同步的,那应该放到那个消息处理函数中.
    还有#define CALENDAR_APP_NAME                TEXT("CALENDAR.EXE")
    #define CALENDAR_APP_NAME_ALLDAY   TEXT("CALENDAR.EXE //allday")这些类型是如何知道的
    比如还有其他几种.
    还有CNT_CLASSICTIME宏是什么内容
    2009年7月14日 1:13
  • 呵呵,谢谢,我意思你的代码是同步的,那应该放到那个消息处理函数中.
    还有#define CALENDAR_APP_NAME                TEXT("CALENDAR.EXE")
    #define CALENDAR_APP_NAME_ALLDAY   TEXT("CALENDAR.EXE //allday")这些类型是如何知道的
    比如还有其他几种.
    还有CNT_CLASSICTIME宏是什么内容

    您没有使用MSDN和google的习惯?
    I'm a device.
    2009年7月14日 4:51
    版主