C#获取手机以及手机卡的联系人集合

    技术2022-05-19  20

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

     

     

     

     


    最新回复(0)