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
本文介绍如何使用C#在WindowsMobile设备上通过调用phone.dll中的API获取通话记录。包括打开和关闭通话记录句柄的方法,并解析通话记录结构,如号码、姓名、通话时间等。
234

被折叠的 条评论
为什么被折叠?



