读取sim 卡联系人信息
代码
SIMMgr.h
- #pragma once
- #include <simmgr.h>
- #pragma comment(lib, "cellcore.lib")
- class CSIMMgr
- {
- public:
- CSIMMgr(void);
- ~CSIMMgr(void);
- BOOL InitializeSIM();
- BOOL GetPhoneBookList();
- private:
- HSIM g_hSim;
- SIMCAPS g_simcaps;
- BYTE * g_pbyteInUse;// PB usage cache
- };
SIMMgr.cpp
- #include "StdAfx.h"
- #include "SIMMgr.h"
- const DWORD g_dwLocation = SIM_PBSTORAGE_SIM;
- CSIMMgr::CSIMMgr(void)
- {
- g_hSim = NULL;
- }
- CSIMMgr::~CSIMMgr(void)
- {
- if (g_hSim)
- SimDeinitialize(g_hSim);
- }
- BOOL CSIMMgr::InitializeSIM()
- {
- if (SUCCEEDED(SimInitialize(SIM_INIT_NONE, NULL, 0, &g_hSim)))
- {
- if (SUCCEEDED(SimGetDevCaps(g_hSim, SIM_CAPSTYPE_PBINDEXRANGE, &g_simcaps)))
- {
- // Allocate PB usage cache
- g_pbyteInUse = new BYTE[
- (g_simcaps.dwMaxPBIndex - g_simcaps.dwMinPBIndex)/(sizeof(*g_pbyteInUse)*8)];
- if (NULL != g_pbyteInUse)
- return TRUE;
- }
- SimDeinitialize(g_hSim);
- g_hSim = NULL;
- }
- return FALSE;
- }
- BOOL CSIMMgr::GetPhoneBookList()
- {
- SIMPHONEBOOKENTRY spbe;
- // Clear PB usage cache
- ZeroMemory(g_pbyteInUse, (g_simcaps.dwMaxPBIndex - g_simcaps.dwMinPBIndex)/(sizeof(*g_pbyteInUse)*8));
- // Iterate through the entries, adding valid PB entries to the LV
- for(DWORD i = g_simcaps.dwMinPBIndex; i <= g_simcaps.dwMaxPBIndex; i++)
- {
- // assume: error means location is not being used
- if (SUCCEEDED(SimReadPhonebookEntry(g_hSim, g_dwLocation, i, &spbe)))
- {
- // Update PB usage cache
- g_pbyteInUse[(i-g_simcaps.dwMinPBIndex)/(sizeof(*g_pbyteInUse)*8)] |=
- (1<<((i-g_simcaps.dwMinPBIndex)%(sizeof(*g_pbyteInUse)*8)));
- }
- }
- // set the focus and return
- return TRUE;
- }
具体的每一条sim联系人信息相见
- // -----------------------------------------------------------------------------
- //
- // @doc EXTERNAL
- //
- // @struct SIMPHONEBOOKENTRY | A SIM phonebook entry
- //
- // @comm None
- //
- // -----------------------------------------------------------------------------
- typedef struct simphonebookentry_tag {
- DWORD cbSize; // @field Size of the structure in bytes
- DWORD dwParams; // @field Indicates valid parameter values
- TCHAR lpszAddress[MAX_LENGTH_ADDRESS]; // @field The actual phone number
- DWORD dwAddressType; // @field A SIM_ADDRTYPE_* constant
- DWORD dwNumPlan; // @field A SIM_NUMPLAN_* constant
- TCHAR lpszText[MAX_LENGTH_PHONEBOOKENTRYTEXT]; // @field Text assocaited with the entry
- } SIMPHONEBOOKENTRY, *LPSIMPHONEBOOKENTRY;