Windows Mobile获取通话记录 C# 文章作者:alalmn文章作者:[E.S.T] alalmn 信息来源:邪恶八进制信息安全团队(www.eviloctal.com)飞龙 QQ316118740 飞龙 BLOG http://hi.baidu.com/alalmn 在现有的.net compact framework中,无论是1.0、2.0还是3.5版本,都没有直接获取用户通话记录的接口,那么,我们只能自己封装底层API来实现了。该接口在phone.dll中,调用PhoneGetCallLogEntry方法会返回一个通话记录结构,在该结构中,包含号码、姓名、通话开始时间、通话结束时间等信息。在我们调用此API之前,首先要PhoneOpenCallLog打开通话记录句柄,同时在操作结束后,要调用PhoneCloseCallLog关闭句柄,废话少说,看代码。

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;
using Microsoft.WindowsMobile.PocketOutlook;

namespace _234
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

[StructLayout(LayoutKind.Sequential)]
public struct CALLLOGENTRY
{
public UInt32 cbSize;
public UInt64 ftStartTime;
public UInt64 ftEndTime;
public short iom;

public bool fOutgoing;
public bool fConnected;
public bool fEnded;

public bool fRoam;
public short cidt;
public IntPtr pszNumber;
public IntPtr pszName;
public IntPtr pszNameType;
public IntPtr pszNote;
};
[DllImport("phone.dll", EntryPoint = "PhoneOpenCallLog", SetLastError = true)] //首先要PhoneOpenCallLog打开通话记录句柄
private static extern int PhoneOpenCallLog(ref IntPtr pHandle);

[DllImport("phone.dll", EntryPoint = "PhoneCloseCallLog", SetLastError = true)] //要调用PhoneCloseCallLog关闭句柄
private static extern int PhoneCloseCallLog(IntPtr pHandle);

[DllImport("phone.dll", EntryPoint = "PhoneGetCallLogEntry", SetLastError = true)]
private static extern int PhoneGetCallLogEntry(IntPtr pHandke, ref CALLLOGENTRY pEntry);
//用PhoneGetCallLogEntry方法会返回一个通话记录结构,在该结构中,包含号码、姓名、通话开始时间、通话结束时间等信息。

private void button1_Click(object sender, EventArgs e)
{
string CallInfo = "";

try
{
IntPtr handle = IntPtr.Zero; //句柄

CALLLOGENTRY entry = new CALLLOGENTRY();
PhoneOpenCallLog(ref handle); //首先要PhoneOpenCallLog打开通话记录句柄
entry.cbSize = (uint)Marshal.SizeOf(entry); //返回类的非托管大小

if (handle != IntPtr.Zero)
{
while (PhoneGetCallLogEntry(handle, ref entry) == 0) //获取通话记录
{ //Marshal.PtrToStringUni 复制指定数目的字符
string phoneNumber = Marshal.PtrToStringUni(entry.pszNumber); //号码
string name = Marshal.PtrToStringUni(entry.pszName); //姓名

if (phoneNumber == null)
{
phoneNumber = string.Empty;
}

if (name == null)
{
name = string.Empty;
}

string temp = (phoneNumber.Trim() + name.Trim());
CallInfo = CallInfo + temp;
}
PhoneCloseCallLog(handle);
//MessageBox.Show("1111111");
//MessageBox.Show(CallInfo.Substring(0, 140));
textBox1.Text = CallInfo;
MessageBox.Show("字符数:"+CallInfo.Length );
//Microsoft.WindowsMobile.PocketOutlook.SmsMessage sms = new SmsMessage("151608XXXXXX", CallInfo.Substring(0, 140));
//sms.Send();
}
else
{
int error = Marshal.GetLastWin32Error();
}
}
catch (Exception ep)
{
}
finally
{
}
}

private void button2_Click(object sender, EventArgs e)
{
Microsoft.WindowsMobile.PocketOutlook.SmsMessage sms = new SmsMessage(textBox3.Text, textBox2.Text); //号码 内容
sms.Send();
}

//private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
//{
//}
}
}

在windows mobile5.0和windows mobile6.0上测试通过。

转载自:http://hi.baidu.com/alalmn/blog/item/58188dd398367439970a1659.html

Windows Mobile获取通话记录 C#相关推荐

  1. uniapp通讯录等敏感权限检查、申请。获取通话记录等内容

    本篇文章是我对我搜集到的相关方面的一些整合希望可以帮助到大家. plus.android.requestPermissions([Permission], //所需申请权限名称,可以是数组functi ...

  2. uni-app获取通话记录 自定义基座打包能成功获取

    // 获取通话记录var CallLog = plus.android.importClass("android.provider.CallLog");var main = plu ...

  3. request获取int类型的值_获取通话记录或通讯录的数量为负值

    安卓源码避坑指南5--获取通话记录或通讯录的数量为负值 通过蓝牙PBAP协议同步通讯录.通话记录时,想必对其数量大小也是很感兴趣的,因此一般的设计思路都是先获取到同步对象的总大小,然后再同步该对象的具 ...

  4. Android 获取通话记录和短信内容

    Android 获取通话记录和短信内容 一.获取通话记录 1.权限声明,需要在Manifest.xml文件中声明权限(读取通话记录权限): <uses-permission android:na ...

  5. android 获取通话记录对应卡槽,短信记录对应卡槽

    最新公司有需求 要求屏蔽监听插入双卡后的用户指定一张卡,找了半天资料现在总结一下 1.获取通话记录对应卡槽 通话记录数据库(content://call_log/calls)中有存字段simid Ur ...

  6. android 获取通话记录不准确(为上次记录)

    问题: 使用 new ContentObserver(new Handler()) {@Overridepublic void onChange(boolean selfChange, Uri uri ...

  7. Android 获取通话记录、联系人

    文章目录 1.简介 2.代码结构 3.activity_main.xml 布局文件 4.AndroidManifest.xml 添加权限 5.MainActivity .java 功能文件 6.获取联 ...

  8. Android小米(miui)获取通话记录为null解决办法

    Android小米(miui)获取通话记录为null解决办法 在开发中发现,查询通话记录时使用 contentResolver.query( CallLog.Calls.CONTENT_URI, Co ...

  9. Android获取通话记录的未接来电、自定义通知栏事件处理

    此文非教程,作常用工具类记录,因此主要是代码--- --前言 公司项目有这么一个需求,获取用户的通话记录,如果存在24小时内的未接来电则发送状态栏通知,通知上除了可以直接回拨还可以及引导用户打开app ...

最新文章

  1. 哪些人适合学习java技术
  2. 小型Web应用扫描工具Grabber
  3. C++继承中的同名成员变量处理方法
  4. 机器人简化图画手绘图_高通推出全新RB3 机器人平台,年内支持5G连接
  5. mysql长连接与短连接
  6. 8张图告诉你如何运营微信公众号
  7. 透视映射和射影映射的关系 Perspective and Projectivity
  8. 边记边学PHP-(十五)MySQL数据库基础操作2
  9. 第十四期:5 个 JS 不良编码习惯,你占几个呢?
  10. matlab mtime,matlab中的视频分析工具箱 提供matlab中的视频分析工具 - 下载 - 搜珍网...
  11. element中的table相关
  12. 企业多园区统一灾备建设最佳实践
  13. 前端json编辑器和富文本编辑器的使用
  14. RAID磁盘阵列与磁盘阵列卡
  15. vue开发规范(单文件组件)
  16. html背景图片纵向缩小,css怎么把背景图片缩小?
  17. python生成字符画_Python生成字符画 | 文艺数学君
  18. 输入文本的html,输入文本的步骤主要包括
  19. PDPS软件:3D空间扫描功能介绍与使用方法
  20. 锂矿降龙十八掌之时乘六龙

热门文章

  1. [Vampier-magnetic material]3:cylinder core-shell material
  2. office excel2013如何启用solver选项
  3. kafka 控制台命令
  4. mybatis实战总结
  5. linux每日命令(1):which
  6. 项目管理工具Redmine各功能测试
  7. maven 转 gradle
  8. Android 常用操作
  9. 【Oracle】lsnrctl reload 命令简介
  10. el captain设置环境变量