• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數據加載中……

            WINCE通過clog.db表來讀取和刪除通話記錄

              1 void ReadLog()
              2 {
              3     CEGUID ceguid;
              4     ////////////////////////int MAX_PATH = 1280;
              5     TCHAR szVolName[128];
              6     CREATE_INVALIDGUID(&ceguid);
              7     while(::CeEnumDBVolumes(&ceguid,szVolName,MAX_PATH))
              8     {
              9         if(wcsnicmp(L"SystemHeap",szVolName,10)==0)
             10         {
             11             /////將當前數據庫卷定位到SystemHeap上
             12             break;
             13         }
             14     }
             15     
             16     CEOID ceoid;
             17     ceoid = 0;
             18     
             19     CENOTIFYREQUEST *pRequest = (CENOTIFYREQUEST *) LocalAlloc(LPTR,sizeof(CENOTIFYREQUEST));
             20     pRequest->dwSize = sizeof(CENOTIFYREQUEST);
             21     pRequest->hwnd = NULL;
             22     pRequest->hHeap = NULL; 
             23     pRequest->dwFlags = CEDB_EXNOTIFICATION;
             24     
             25     ////////////////////////////打開聯系人數據庫,并注冊事件
             26     HANDLE hdDB;
             27     hdDB = ::CeOpenDatabaseEx(&ceguid,&ceoid,L"clog.db",0,0,pRequest);
             28     
             29     if(hdDB == INVALID_HANDLE_VALUE)
             30     {
             31 
             32         return;
             33     }
             34 
             35     int iCount;
             36     CEOIDINFO    oldinfo;
             37     CEOID CEoid =0;
             38     if(!CeOidGetInfoEx(&ceguid,ceoid,&oldinfo))
             39     {;}
             40 
             41 
             42     iCount = oldinfo.infDatabase.wNumRecords;
             43     DWORD dwIndex;
             44     if(!iCount)
             45         return;
             46     
             47     PBYTE pBuff;
             48     WORD wProps;
             49     DWORD dwRecSize;
             50     PCEPROPVAL pRecord;
             51     if(iCount >0)
             52     {
             53         for(int i = 0; i < iCount; ++ i)
             54         {
             55             ////////////////////////移動記錄指針
             56             CEoid = CeSeekDatabase(hdDB,CEDB_SEEK_BEGINNING,i,&dwIndex);
             57             //ASSERT(CEoid !=0);
             58             pBuff = 0;    
             59             ////////////////////////讀取所有字段值
             60             CEoid = CeReadRecordProps(hdDB,CEDB_ALLOWREALLOC,&wProps,NULL,&(LPBYTE)pBuff,&dwRecSize);
             61             //ASSERT(CEoid !=0);
             62             
             63             pRecord = (PCEPROPVAL)pBuff;
             64             FILETIME StartTime;
             65             FILETIME EndTime;
             66             int CallType;
             67             LPWSTR NumType;
             68             LPWSTR AllTime;
             69             LPWSTR Number;
             70             for(int i = 0; i < wProps; ++i)
             71             {
             72                 switch(pRecord->propid)
             73                 {
             74                 case 0x0006001f : 
             75                     Number = pRecord->val.lpwstr;
             76                     break;
             77                 case 0x0007001f:
             78                     AllTime = pRecord->val.lpwstr;
             79                     break;
             80                 case 0x000a001f:
             81                     NumType = pRecord->val.lpwstr;
             82                     break;
             83                 case 0x00020040:
             84                     StartTime = pRecord->val.filetime;
             85                     break;
             86                 case 0x00030040:
             87                     EndTime = pRecord->val.filetime;
             88                     break;
             89                 case 0x00040003:
             90                     CallType = pRecord->val.lVal;
             91                     break;
             92                 default:
             93                     break;
             94                 }
             95                 pRecord ++;
             96             }
             97                         LocalFree(pBuff);
             98         }
             99     }
            100     /////////////////////////////////////////關閉數據庫
            101     if(! CloseHandle(hdDB))
            102     {
            103 
            104         return;
            105     }
            106 }
             1 void DeleteLog(void)
             2 {
             3     CEGUID ceguid;
             4     TCHAR szVolName[128];
             5     CREATE_INVALIDGUID(&ceguid);
             6     while(::CeEnumDBVolumes(&ceguid,szVolName,MAX_PATH))
             7     {
             8         if(wcsnicmp(L"SystemHeap",szVolName,10)==0)
             9         {
            10             /////將當前數據庫卷定位到SystemHeap上
            11             break;
            12         }
            13     }    
            14     CEOID ceoid;
            15     ceoid = 0;
            16     
            17     CENOTIFYREQUEST *pRequest = (CENOTIFYREQUEST *) LocalAlloc(LPTR,sizeof(CENOTIFYREQUEST));
            18     pRequest->dwSize = sizeof(CENOTIFYREQUEST);
            19     pRequest->hwnd = NULL;
            20     pRequest->hHeap = NULL; 
            21     pRequest->dwFlags = CEDB_EXNOTIFICATION;
            22     
            23     /////打開通話記錄數據庫,并注冊事件
            24     HANDLE hdDB;
            25     hdDB = ::CeOpenDatabaseEx(&ceguid,&ceoid,L"clog.db",0,0,pRequest);
            26     
            27     if(hdDB == INVALID_HANDLE_VALUE)
            28     {
            29         return;
            30     }
            31     
            32     int iCount;
            33     CEOIDINFO    oldinfo;
            34     CEOID CEoid =0;
            35     //     PCEGUID pceguid = ceguid;
            36     if(!CeOidGetInfoEx(&ceguid,ceoid,&oldinfo))
            37     {;}
            38 
            39     //數據庫的記錄總數
            40     iCount = oldinfo.infDatabase.wNumRecords;
            41     if(0 == iCount)
            42         return ;
            43     
            44     CEOID oid;
            45     DWORD dwIndex;
            46     oid = CeSeekDatabase(hdDB, CEDB_SEEK_BEGINNING, 0&dwIndex);
            47     while(oid)
            48     { 
            49         // Update GUI with currently selected record
            50         if(!CeDeleteRecord(hdDB, oid))
            51         {;}
            52 
            53         oid = CeSeekDatabase(hdDB, CEDB_SEEK_CURRENT, 1&dwIndex);
            54     }
            55     
            56     //關閉數據庫
            57     if(! CloseHandle(hdDB))
            58     {
            59         return ;
            60     }
            61 }

            如果我們只是讀取記錄,并不編輯,那么通過phone.h來讀取通話記錄是比較方便的。附上主要代碼
            TCHAR LastIncomingCall[40];
            TCHAR LastMissedCall[40];
            TCHAR LastOutGoingCall[40];

            TCHAR LastIncomingCallName[256];
            TCHAR LastMissedCallName[256];
            TCHAR LastOutGoingCallName[256];

            HANDLE ph;
            CALLLOGENTRY entry;
            DWORD count;
            entry.cbSize = sizeof(CALLLOGENTRY);
            if(PhoneOpenCallLog(&ph)== S_OK)
            {
               if(S_OK == PhoneSeekCallLog(ph, CALLLOGSEEK_BEGINNING, 0, &count))

            //如果用CALLLOGSEEK_END那么count得到是的全部記錄的個數

            //如果用CALLLOGSEEK_BEGINNING那么count得是0
               {
                int lastIncallFlag = 0;
                int lastMissedCallFlag = 0;
                int lastOutgoingCallFlag = 0;

                while(PhoneGetCallLogEntry(ph, &entry) == S_OK)
                {
                 if(( !lastIncallFlag)&&(entry.iom != IOM_OUTGOING) && (!entry.fOutgoing) )
                 {
                  //MessageBox(NULL, entry.pszNumber, TEXT("Last Incoming Call"), 0);
                  lstrcpy(LastIncomingCall,   entry.pszNumber);
                  if(!entry.pszName)
                   lstrcpy(LastIncomingCallName,   TEXT("Unknow"));
                  else
                   lstrcpy(LastIncomingCallName,   entry.pszName);
                  MessageBox(NULL,LastIncomingCall,LastIncomingCallName,0);
                  lastIncallFlag = 1;
                 }
                 if(( !lastMissedCallFlag) && (entry.iom == IOM_MISSED))
                 {
                  lstrcpy(LastMissedCall,   entry.pszNumber);
                  if(!entry.pszName)
                   lstrcpy(LastMissedCallName,   TEXT("Unknow"));
                  else
                   lstrcpy(LastMissedCallName,   entry.pszName);
                  MessageBox(NULL,LastMissedCall,LastMissedCallName,0);
                  lastMissedCallFlag = 1;
                 }
                 if(( !lastOutgoingCallFlag) && (entry.iom == IOM_OUTGOING))
                 {
                  lstrcpy(LastOutGoingCall,   entry.pszNumber);
                  if(!entry.pszName)
                   lstrcpy(LastOutGoingCallName,   TEXT("Unknow"));
                  else
                   lstrcpy(LastOutGoingCallName,   entry.pszName);
                  MessageBox(NULL,LastOutGoingCall,LastOutGoingCallName,0);
                  lastOutgoingCallFlag = 1;
                 }

                 // Make phone
                  /* PHONEMAKECALLINFO phonemakecall;
                  phonemakecall.cbSize = sizeof(PHONEMAKECALLINFO);
                  phonemakecall.dwFlags = PMCF_PROMPTBEFORECALLING;
                  phonemakecall.pszDestAddress = entry.pszNumber;
                  phonemakecall.pszAppName = NULL;
                  phonemakecall.pszCalledParty = NULL;
                  phonemakecall.pszComment = NULL;
                  PhoneMakeCall(&phonemakecall);*/
                }

                //Show the call log filter
                //PhoneShowCallLog(CALLLOGFILTER_OUTGOING);
               }
            }
            PhoneCloseCallLog (ph);

            打開phone.h發現在WM5.0上有兩個兩個函數在SDK里是沒有的

            第一個是

            HRESULT PhoneAddSpeedDial(DWORD dwFlags, DWORD* piKey, const TCHAR* pszDisplayName, const TCHAR* pszTelNumber);

            第二個是

            HRESULT PhoneShowCallLog(CALLLOGFILTER iCallLogFilter);

            typedef enum
            {
                 CALLLOGFILTER_ALL_CALLS,
                 CALLLOGFILTER_MISSED,
                 CALLLOGFILTER_INCOMING,
                 CALLLOGFILTER_OUTGOING
            } CALLLOGFILTER;

            //++++++
            //
            //   PhoneAddSpeedDial
            //
            //        adds a speed dial entry
            //
            // dwFlags - currently unused, set to 0
            //
            // piKey - in/out: the key sequence which will invoke the speed dial.
            //            currently an entry between 2 and 99 (inclusive) is valid.
            //             the API will cause existing entries to be overwritten
            //
            // pszDisplayName - the non-empty display name for the speed dial
            //
            // pszTelNumber - the non-empty tel# to be dialed
            //

            HRESULT PhoneAddSpeedDial(DWORD dwFlags, DWORD* piKey, const TCHAR* pszDisplayName, const TCHAR* pszTelNumber);

             

             

            posted on 2009-05-28 11:17 Benjamin 閱讀(1896) 評論(1)  編輯 收藏 引用 所屬分類: PDA/PPC開發

            評論

            # re: WINCE通過clog.db表來讀取和刪除通話記錄[未登錄]  回復  更多評論   

            while(bRet=::CeEnumDBVolumes(&ceguid,szVolName,MAX_PATH))

            szVolName 獲得的值
            第一次執行 \Documents and Setting\default.vol

            第二次執行 \DBData\SYSCONFIG\notify.db

            只獲得這兩次的值

            沒有你說的 SystemHeap 請問有遇到過嗎,,謝謝
            2015-03-09 15:21 | 陳杰
            国内精品久久久久影院老司| www亚洲欲色成人久久精品| 久久精品国产清自在天天线| 午夜精品久久久久久久| 精品国产乱码久久久久久郑州公司| 久久精品人人做人人爽电影| 亚洲国产日韩欧美综合久久| 久久大香香蕉国产| 久久综合色老色| 日本精品久久久久中文字幕| 久久久亚洲裙底偷窥综合| 国产福利电影一区二区三区,免费久久久久久久精 | 久久精品国产99久久久| 久久久WWW成人| 国产人久久人人人人爽| 亚洲中文字幕伊人久久无码| 久久91精品国产91久久小草| 久久久久波多野结衣高潮| 久久久不卡国产精品一区二区| 国产亚洲精品自在久久| 狠狠色狠狠色综合久久| 亚洲国产一成久久精品国产成人综合 | 久久福利资源国产精品999| 色综合色天天久久婷婷基地| 亚洲AV日韩精品久久久久久久| 久久国产成人亚洲精品影院| 久久国产精品无码一区二区三区| 久久综合精品国产一区二区三区 | 99精品久久精品一区二区| 久久996热精品xxxx| 99久久精品国产一区二区三区| 久久99国产综合精品| 亚洲第一极品精品无码久久| 国产精品久久久久久五月尺| 人人狠狠综合88综合久久| 日本久久中文字幕| 热久久视久久精品18| 99久久综合国产精品免费| 久久AV高潮AV无码AV| 日韩欧美亚洲综合久久| 中文字幕久久久久人妻|