Windows Mobile获取通话记录

简介:
在现有的.net compact framework中,无论是1.0、2.0还是3.5版本,都没有直接获取用户通话记录的接口,那么,我们只能自己封装底层API来实现了。
改接口在phone.dll中,调用PhoneGetCallLogEntry方法会返回一个通话记录结构,在该结构中,包含号码、姓名、通话开始时间、通话结束时间等信息。在我们调用此API之前,首先要PhoneOpenCallLog打开通话记录句柄,同时在操作结束后,要调用 PhoneCloseCallLog关闭句柄,废话少说,看代码。
[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)]
private static extern int PhoneOpenCallLog(ref IntPtr pHandle);



[DllImport("phone.dll", EntryPoint = "PhoneCloseCallLog", SetLastError = true)]
private static extern int PhoneCloseCallLog(IntPtr pHandle);



[DllImport("phone.dll", EntryPoint = "PhoneGetCallLogEntry", SetLastError = true)]
private static extern int PhoneGetCallLogEntry(IntPtr pHandke, ref CALLLOGENTRY pEntry);


//下面是测试代码
/// <summary>
/// 获取通话记录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
try
{
Cursor.Current = Cursors.WaitCursor;
IntPtr handle = IntPtr.Zero;

CALLLOGENTRY entry = new CALLLOGENTRY();
PhoneOpenCallLog(ref handle);
entry.cbSize = (uint)Marshal.SizeOf(entry);

if (handle != IntPtr.Zero)
{

listView.Items.Clear();
listView.Columns[0].Width = this.Width;
while (PhoneGetCallLogEntry(handle, ref entry) == 0)
{

string phoneNumber = Marshal.PtrToStringUni(entry.pszNumber);
string name = Marshal.PtrToStringUni(entry.pszName);
if (name == null)
{
name = string.Empty;
}

ListViewItem item = new ListViewItem(phoneNumber.Trim());
item.SubItems.Add(name.Trim());

listView.Items.Add(item);
}
PhoneCloseCallLog(handle);

}
else
{

int error = Marshal.GetLastWin32Error();
}
}
catch (Exception ep)
{
MessageBox.Show(ep.Message);
}
finally
{
Cursor.Current = Cursors.Default;
}
}

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





     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/819933,如需转载请自行联系原作者




相关文章
|
Windows 网络协议
Windows Mobile远程控制软件Pocket Controller Pro简介
不仅PPC/WindowsMobile系统可以使用该控制软件,只要是WINCE内核的系统都可以使用,我在WinCE.net 4.2系统测试通过,只不过640*480的分辨率,控制速度不是那么理想。
932 0
|
数据格式 XML Windows
Windows Mobile 5.0编程—奥运场馆速查
我忙里偷闲,用VS2005开发了一个关于奥运场馆的小程序,时值2008北京奥运前夕,也算是为奥运做了“贡献”
666 0
|
Windows Web App开发 API
UWP 判断windows mobile是使用的实体键还是虚拟按键
原文:UWP 判断windows mobile是使用的实体键还是虚拟按键 最近在写启动屏幕,发现虚拟按钮会挡住,启动屏幕的最下面的元素,大概有50 px。可是有什么办法知道手机是用的实体键还是虚拟按键吗? 如下图。
1123 0