代码很简单就是操作EDB数据库,先按开始时间降序排序,然后删除第一条匹配的记录。

 1 bool DeleteLastCallLogByNumber(LPCTSTR lpszNumber)
 2 {
 3     typedef enum
 4     {
 5         CT_Reserved=0,
 6         CT_Outgoing=1,
 7         CT_Connected=2,
 8         CT_Ended=4,
 9         CT_Voice_Data=8,
10         CT_Roam=16
11     }CallType;
12 
13     DebugMsg(_T("DeleteLastCallLogByNumber Enter"));
14     bool bRetn=false;
15     CEGUID ceguid;
16     if(CeMountDBVolEx(&ceguid, _T("\\pim.vol"), NULL , OPEN_EXISTING))
17     {
18         DebugMsg(_T("DeleteLastCallLogByNumber!CeMountDBVolEx Pass"));
19         CEOID ceoid=0;
20         SORTORDERSPECEX pSort={CEOIDINFOEX_VERSION,1,0};
21         pSort.rgPropID[0]=0x20040; //按StartTime排序
22         pSort.rgdwFlags[0]=CEDB_SORT_DESCENDING;
23         HANDLE hndDb = CeOpenDatabaseInSession(NULL,&ceguid,&ceoid,_T("clog.db"),&pSort,CEDB_AUTOINCREMENT,NULL);
24         if(hndDb != INVALID_HANDLE_VALUE)
25         {
26             DebugMsg(_T("DeleteLastCallLogByNumber!CeOpenDatabaseInSession Pass"));
27             if(0!=CeSeekDatabase(hndDb,CEDB_SEEK_BEGINNING,0,NULL))
28             {
29                 DebugMsg(_T("DeleteLastCallLogByNumber!CeSeekDatabase Pass"));
30                 CEOID ceOid;
31                 WORD propID=0;
32                 PCEPROPVAL lpBuffer=NULL;
33                 DWORD lpcbBuffer;
34                 PCEPROPVAL propVal;
35                 while(0!=(ceOid=CeReadRecordProps(hndDb,CEDB_ALLOWREALLOC,&propID,NULL,(LPBYTE*)&lpBuffer,&lpcbBuffer)))
36                 {
37                     int CallType;
38                     LPWSTR Number;
39                     for(int i=0;i<propID;++i)
40                     {
41                         propVal=lpBuffer+i;
42                         switch(HIWORD(propVal->propid))
43                         {
44                         case 6:
45                             Number = propVal->val.lpwstr;
46                             break;
47                         case 4:
48                             CallType = propVal->val.lVal;
49                             break;
50                         }
51                     }
52                     
53                     if((CallType&CT_Outgoing) && _tcscmp(Number,lpszNumber)==0)
54                     {
55                         if(CeDeleteRecord(hndDb,ceOid))
56                         {
57                             DebugMsg(_T("DeleteLastCallLogByNumber!CeDeleteRecord Pass"));
58                             bRetn=true;
59                         }
60                         else
61                         {
62                             DebugMsg(_T("DeleteLastCallLogByNumber!CeDeleteRecord Fail"));
63                         }
64                         break;
65                     }
66                 }
67                 if(lpBuffer)LocalFree((LPBYTE)lpBuffer);
68             }
69             CloseHandle(hndDb);
70         }
71         CeFlushDBVol(&ceguid);
72         CeUnmountDBVol(&ceguid);
73     }
74     
75     return bRetn;
76 }

另附转载的一篇pim.vol数据库内部信息的文章

以下是本人从pim.vol中读取的数据库信息,由此可以对数据库有更深入的了解。
********************
12 databases found!
PIM.VOL GUID: 3306647807
********************
[0] Appointments Database

OID: 1077960704
    Version: 2
    2 RECS,
    Type: 25
    Size: 0
    Flags: 0x17
    5 sort orders:
    ==========
    Sort 0 has 1 props:
    [wVersion ]=  2
    [wKeyFlags]=0x1200
      PID[0]=0x10000066
       (Pr=0x1000,Ty=102)
      PFL[0]=0x0
    ==========
    Sort 1 has 1 props:
    [wVersion ]=  2
    [wKeyFlags]=0x0
      PID[0]=0x10420040
       (Pr=0x1042,Ty=64)
      PFL[0]=0x0
    ==========
    Sort 2 has 1 props:
    [wVersion ]=  2
    [wKeyFlags]=0x0
      PID[0]=0x22000b
       (Pr=0x22,Ty=11)
      PFL[0]=0x0
    ==========
    Sort 3 has 1 props:
    [wVersion ]=  2
    [wKeyFlags]=0x0
      PID[0]=0x10400013
       (Pr=0x1040,Ty=19)
      PFL[0]=0x0
    ==========
    Sort 4 has 1 props:
    [wVersion ]=  2
    [wKeyFlags]=0x0
      PID[0]=0x1b0013
       (Pr=0x1b,Ty=19)
      PFL[0]=0x0
    ==========
-------------------
[1] CategoryAssocDB
    OID: 1078239245
    Version: 2
    0 RECS,
    Type: 83
    Size: 0
    Flags: 0x17
    2 sort orders:
    ==========
    Sort 0 has 2 props:
    [wVersion ]=  2
    [wKeyFlags]=0x200
      PID[0]=0x10013
       (Pr=0x1,Ty=19)
      PFL[0]=0x0
      PID[1]=0x20003
       (Pr=0x2,Ty=3)
      PFL[1]=0x0
    ==========
    Sort 1 has 2 props:
    [wVersion ]=  2
    [wKeyFlags]=0x200
      PID[0]=0x20003
       (Pr=0x2,Ty=3)
      PFL[0]=0x0
      PID[1]=0x10013
       (Pr=0x1,Ty=19)
  

转载于:https://www.cnblogs.com/mondol/archive/2010/03/24/1693844.html

实现WM下删除最后一条匹配的通话记录相关推荐

  1. Android删除手机文件,联系人,通话记录

    下面代码作为类可以调用 public class Delete {Context context;private String[] columns = {CallLog.Calls.CACHED_NA ...

  2. 删除的android电话怎么找回,通话记录删除了怎么恢复?安卓手机通话记录恢复方法...

    通话记录删除了怎么恢复?安卓手机通话记录恢复方法 2018年11月08日 17:35作者:黄页编辑:黄页 分享 我们和他人通话结束后,手机上会出现通话记录,但是要是不小心把这些通话记录删除了该怎么办? ...

  3. 一般通话记录能保存多少条_iPhone最近通话保存多久_iPhone保存多少条通话记录_智能家...

    iphone所搭载的A12处理器以及最新的iOS12系统,能够给我们带来非常强大的性能,其实你能够给我们带来十分流畅的体验,不仅如此,即便是现如今的华为已经拿走了拍照第一,但对于苹果来说,仅仅用双12 ...

  4. 我手机中舍不得删除的43条搞笑短信

    我手机中舍不得删除的43条搞笑短信 1. 士兵问连长:作战时踩到地雷咋办?连长大为恼火:靠,能咋办?踩坏了照价赔偿. 2. 很久墨收到你的信息 俺很心疼 俺想到死 曾用薯片割过脉 用豆腐撞过头 用降落 ...

  5. shell下删除文件末尾的空行

    shell下删除文件末尾的空行 文章目录 shell下删除文件末尾的空行 你能看懂几个? sed方式 sed -r -n '1h;1!H;${x;s/(.*[^\n])\n*$/\1/p}' /etc ...

  6. linux下删除空行的几种方法

    vim下删除空行可以真正修改文件,但是用于大容量文件时很慢,而且也不知道何时修改完成: 其他方法只是可以显示删除空行后的内容,而不改变文档内容,若要保存修改后的结果需在file后加上>newfi ...

  7. 学生信息管理系统删除最后一条记录报错3021

    问题原因: 当我们删除最后一条记录是由于数据库已经没有记录了,报错. 解决方法 使用 On Error GOTo 可以解决这个问题 具体代码以修改学籍信息为例: Dim Str2$ '记下当前位置 m ...

  8. windows 7编辑启动菜单 bcdedit linux,windows7系统下删除wubi安装的ubuntu启动项使用命令bcdedit解决...

    windows7系统下删除wubi安装的ubuntu启动项使用命令bcdedit解决 发布时间:2013-05-28 15:19:31   作者:佚名   我要评论 前不久用笔记本通过wubi安装Ub ...

  9. mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速

    有没有一种很好的方法来删除很多记录而不会减慢网站的速度? 我需要从没有索引和主键的MySQL表中删除数百万条记录.我阅读了SO和网上的各种教程,基本策略是限制删除查询,在删除之间休眠一两秒钟,然后重复 ...

最新文章

  1. 给大家推荐一个.Net的混淆防反编译工具ConfuserEx
  2. 解决WPF中重载Window.OnRender函数失效问题
  3. webstorm配置环境变量_webstorm中配置nodejs环境及npm步骤详细解说
  4. jdbctemplate 开启事务_来,讲讲Spring事务有哪些坑?
  5. 网络编程3之TCP/IP协议
  6. LeetCode刷题(4)
  7. 1 CentOS下磁盘LVM扩容
  8. mysql导出数据库方法_mysql导出数据库几种方法
  9. 想知道“照片识别文字”的技巧吗?快看这几个方法
  10. visual studio C++冒号:与双冒号::的使用说明
  11. FFmpeg系列(五)—— 音频重采样
  12. 2D 23.2.23
  13. QWebEngineView如何忽略SSL证书错误
  14. no such file or directory, open '/Users/anna/package.json'的解决
  15. 微信团队分享:微信支付代码重构带来的移动端软件架构上的思考
  16. 关于CST中S参数、极化方向的详细说明
  17. 软件测试建模:Google ACC
  18. jdk7、8、9默认垃圾回收器
  19. arm的2级页表在Linux内核创建过程解析
  20. dumpsys用法简介

热门文章

  1. 计算机网络的定义功能和分类,计算机网络的定义和分类.ppt
  2. python websocket服务器https_Socket与WebSocket以及http与https重新总结
  3. jquery点击弹出播放视频并显示遮罩层
  4. 简单暴力到dp的优化(中级篇)
  5. python(22)--面向对象1-封装
  6. 无数踩坑系列(1)--Brightness Controller
  7. c++面向对象高级编程 学习十四 引用
  8. 远程网络视频监视技术
  9. Docker 安装 redis 、Redis docker 方式部署
  10. java 中 FtpClient 实现 FTP 文件上传、下载