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 控件 }