using Microsoft.WindowsMobile;
using Microsoft.WindowsMobile.PocketOutlook;
/// <summary>
/// SIM卡联系人操作类
/// </summary>
public class SIMContactManage
{
private const Int64 S_OK = 0x00000000;
public const int SIM_CAPSTYPE_ALL = 0x3F; // 所有联系人
public const int SIM_PBSTORAGE_SIM = 0x10; //
public const int SIM_SMSSTORAGE_SIM = 0x2; //
[StructLayout(LayoutKind.Sequential)]
public struct SIMPHONEBOOKENTRY
{
public uint cbSize; //
public uint dwParams; //
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string lpszAddress; // 联系人电话
public uint dwAddressType; //
public uint dwNumPlan; //
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string lpszText; // 联系人姓名
}
[DllImport("cellcore.dll")]
public static extern int SimInitialize(uint dwFlags,
int lpfnCallBack, uint dwParam, ref int lphSim);
[DllImport("cellcore.dll")]
public static extern int SimGetPhonebookStatus(int hSim,
uint dwLocation, ref uint lpdwUsed, ref uint lpdwTotal);
[DllImport("cellcore.dll")]
public static extern int SimReadPhonebookEntry(int hSim, uint dwLocation, uint dwIndex, ref SIMPHONEBOOKENTRY entry);
[DllImport("cellcore.dll", SetLastError = true)]
public static extern int SimDeinitialize(int hSim);
/// <summary>
/// 获取SIM卡联系人信息
/// </summary>
/// <returns></returns>
public static List<string[]> GetSIMContactList()
{
int hSim = 0;
List<string[]> list = new List<string[]>();
try
{
int result = SimInitialize(0, 0, 0, ref hSim);
if (result != 0)
throw new Exception("SIM打卡失败,请检测SIM是否安装!");
uint uiUsed = 0;
uint uiTotal = 0;
result = SimGetPhonebookStatus(hSim, SIM_PBSTORAGE_SIM, ref uiUsed, ref uiTotal);
for (int i = 1; i <= uiUsed; i++)
{
SIMPHONEBOOKENTRY entry = new SIMPHONEBOOKENTRY();
entry.cbSize = (uint)Marshal.SizeOf(typeof(SIMPHONEBOOKENTRY));
result = SimReadPhonebookEntry(hSim, SIM_PBSTORAGE_SIM, (uint)i, ref entry);
list.Add(new string[2] { entry.lpszText.Trim(), entry.lpszAddress.Trim() });
}
return list;
}
catch
{
throw;
}
finally
{
SimDeinitialize(hSim);
}
}
}
// 窗体丢一按钮和一个ListView 控件
private void button5_Click(object sender, EventArgs e)
{
//通过API获取SIM卡的联系人
List<string[]> list = SIMContactManage.GetSIMContactList();
// 获取手机上的联系人 放到一个集合内
OutlookSession myoutlookSession = new OutlookSession();
String[] items = new String[2];
foreach (Contact c in myoutlookSession.Contacts.Items)
{
list.Add(new string[2] { c.FileAs, c.MobileTelephoneNumber });
}
//按姓名排序
list = list.OrderByDescending(s => s[0]).ToList();
string[] str;
this.listView2.BeginUpdate();
this.listView2.Items.Clear();
for (int i = 0; i < list.Count; i++)
{
str = list[i];
this.listView2.Items.Add(new ListViewItem(new String[] { str[0].ToString(), str[1].ToString() }));
}
this.listView2.EndUpdate();
//注:listView2为ListView 控件
}