zoukankan      html  css  js  c++  java
  • Windows Mobile获取通话记录 C#

    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

  • 相关阅读:
    [super dealloc]内存释放的先后顺序
    NSString的常用方法
    Xcode开发技巧之code snippets(代码片段)
    关于oc运行时 isa指针详解
    ios快捷键
    自动释放池的使用
    【字典树】统计难题
    数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
    字典树模板
    数据结构实验之串三:KMP应用
  • 原文地址:https://www.cnblogs.com/Wolves/p/1893568.html
Copyright © 2011-2022 走看看