在 Pocket PC Phone 中,您可以使用一系列 Windows CE API 调用(统称为 SIM 管理器)来访问 SIM 卡上的信息。以下为 SIM 管理器 API(按功能分组):
表 1:SIM 管理器 API
会话以调用 SimInitialize 开始,这将返回一个 SIM 句柄,此后,在调用 SIM 管理器 API 函数时均需要此句柄。通过将此句柄传递给 SimDeinitialize 来终止会话。
例子程序:
如何读取SIM卡联系人:
void ReadSimContact(SIMPHONEBOOKENTRY ContactOutBuf)
{
HSIM hSim = NULL;
SIMCAPS simcaps;
if (FAILED(SimInitialize(SIM_INIT_NONE, NULL, 0, &hSim)))
return;
if (FAILED(SimGetDevCaps(hSim, SIM_CAPSTYPE_PBINDEXRANGE, &simcaps)))
return;
DWORD dwRecNum = 0;
DWORD dwCurRec = 0;
dwRecNum = simcaps.dwMaxPBIndex - simcaps.dwMinPBIndex+1;
dwCurRec = simcaps.dwMinPBIndex;
while( dwCurRec <= dwRecNum )
{
if( SimReadPhonebookEntry(hSim, SIM_PBSTORAGE_SIM, dwCurRec, &ContactOutBuf) == S_OK)//If the index is unused
{
dwCurRec++;
}
else//联系人已经读完 跳出循环
{
break;
}
}
SimDeinitialize(hSim);
hSim = NULL;
}
写入SIM卡联系人:
BOOL WriteSimContact(SIMPHONEBOOKENTRY ContactInBuf)
{
HSIM hSim = NULL;
SIMCAPS simcaps;
if (FAILED(SimInitialize(SIM_INIT_NONE, NULL, 0, &hSim)))
return FALSE;
if (FAILED(SimGetDevCaps(hSim, SIM_CAPSTYPE_PBINDEXRANGE, &simcaps)))
return FALSE;
DWORD dwRecNum = 0;
DWORD dwCurRec = 0;
dwRecNum = simcaps.dwMaxPBIndex - simcaps.dwMinPBIndex+1;
dwCurRec = simcaps.dwMinPBIndex;
SIMPHONEBOOKENTRY ContactOutBuf = {0};
while( dwCurRec <= dwRecNum ) //往后写
{
if(FAILED(SimReadPhonebookEntry(hSim, SIM_PBSTORAGE_SIM, dwCurRec, &ContactOutBuf)))//If the index is unused
{
if( SimWritePhonebookEntry (hSim, SIM_PBSTORAGE_SIM,dwCurRec , &ContactInBuf)== S_OK )//Write the entrySIM_PBINDEX_FIRSTAVAILABLE
{
dwCurRec++;
}
}
else
{
dwCurRec++;
}
}
SimDeinitialize(hSim);
hSim = NULL;
return TRUE;
}
删除SIM卡联系人:
BOOL DeleteSimContact(void)
{
HSIM hSim = NULL;
SIMCAPS simcaps;
if (FAILED(SimInitialize(SIM_INIT_NONE, NULL, 0, &hSim)))
{
return FALSE;
}
if (FAILED(SimGetDevCaps(hSim, SIM_CAPSTYPE_PBINDEXRANGE, &simcaps)))
{
return FALSE;
}
DWORD dwRecNum = 0;
DWORD dwCurRec = 0;
dwRecNum = simcaps.dwMaxPBIndex - simcaps.dwMinPBIndex+1;
dwCurRec = simcaps.dwMinPBIndex;
while( dwCurRec <= dwRecNum )
{
SimDeletePhonebookEntry(hSim,SIM_PBSTORAGE_SIM,dwCurRec);
dwCurRec++;
}
SimDeinitialize(hSim);
hSim = NULL;
return TRUE;
}