⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 windows mobile读取sim卡联系人.txt

📁 一段开发手机时候用得着的代码片段
💻 TXT
字号:
最近一个项目,需要给用户在项目中增加一个联系人导入的小组建,Windows Mobile自身系统所带的联系人很容易读取,微软已经封装了相应的类库,对于SIM卡的联系人,需要自己进行封装。

写了个类,已经可以读取SIM联系人的手机号码和联系人姓名了,但在我的双网双待的机器上,怎么也读不出来,毕竟像我这样BT的机器并不多,代码全部粘贴出来,以供需要之人参考。

    /// <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);
                
            }
        }

    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -