老问题怎么获取本机手机号
移动的用白名单
那么电信和联通的了?
访问wap页面
header里面取??
[解决办法]
/*******************************************************************************************函数名称: TEL_GetCnum描 述: 取得本机号码(MSISDN)。存储容量取决于SIM卡,但每个SIM卡应该只使用一个号码, 所以此外只取第一个本机号码,通过AT+CPBR=?查询到可以记录两条输入参数: wzNumber:电话号码缓冲区, wzName:姓名缓冲区输出参数: 电话号码和姓名返 回: TRUE: 成功 FALSE: 失败N O T E : 取得本机号命令为AT+CNUM,返回值如下格式: +CNUM: "004000520087007A004B0054005F007600E8006D","13145939103",129 因为AT+CNUM不支持中文,所以改为AT+CPBR命令查询********************************************************************************************/BOOL CGsmModel::TEL_GetCnum(WCHAR *wzNumber, WCHAR *wzName){//+CPBR: 1,"13145939103",129,"0054006500730074002000530049004D" char szStorage[16] = {0}; if(!TEL_GetPhoneBookStorage(szStorage))//查询当前的存储单元 return FALSE; if(strcmp(szStorage,"ON"))//如果不是本机号码的存储单元 { if(!TEL_SetPhoneBookStorage("ON"))//设置到本机号码的电话簿存储单元 return FALSE; } BOOL bRet = TEL_ReadPhoneBook(1,wzNumber,wzName);//取得本机号码 if(strcmp(szStorage,"ON"))//如果不是本机号码的存储单元 { while(!TEL_SetPhoneBookStorage(szStorage))//恢复为原来的电话簿存储单元 Sleep(0); } return bRet;}/*******************************************************************************************函数名称: TEL_GetPhoneBookStorage描 述: 取得当前的电话簿存储单元类型输入参数: 存储电话簿存储单元名称的缓冲区输出参数: 电话簿存储单元名称 "ON" SIM卡(或ME)中的号码(MSISDN)清单(也可以使用+CNUM命令读出该存储器中的信息) $(AT R97)$ "FD" SIM固定拨号号码电话簿(此功能开启及存储容量取决于SIM卡) "DC" ME最近拨号号码电话簿(非标准的) "RC" ME最近接听号码电话簿(非标准的) "MC" ME最近未接号码电话簿(非标准的) "MT" ME电话簿和缩位拨号电话簿的合并(非标准的)包括ME和SIM电话簿 (存储容量取决于SIM卡,事实上,EM310不存在ME电话簿) "EN" 紧急呼叫号码电话簿(此功能开启及存储容量取决于SIM卡) "BD" 被禁止的拨号号码电话簿(此功能开启及存储容量取决于SIM卡) "SD" 服务拨号号码电话簿(此功能开启及存储容量取决于SIM卡) 返 回: TRUE: 成功 FALSE: 失败N O T E : 缓冲区请先清零,再传入********************************************************************************************/BOOL CGsmModel::TEL_GetPhoneBookStorage(char *szStorage){//+CPBS: "MT",3,250 if(SendATCmd("AT+CPBS?\r\n")) { char *szBegin = strstr(m_strRespBuf, "CPBS");//移到CPBS if(!szBegin) return FALSE; szBegin = strchr(szBegin,'"'); if(!szBegin) return FALSE; szBegin++;//移过引号 char *szEnd = strchr(szBegin,'"'); if(!szEnd) return FALSE; strncpy(szStorage,szBegin,szEnd-szBegin); return TRUE; } return FALSE;}/*******************************************************************************************函数名称: TEL_SetPhoneBookStorage描 述: 设置当前的电话簿存储单元输入参数: 电话簿存储单元名称 "ON" SIM卡(或ME)中的号码(MSISDN)清单(也可以使用+CNUM命令读出该存储器中的信息) $(AT R97)$ "FD" SIM固定拨号号码电话簿(此功能开启及存储容量取决于SIM卡) "DC" ME最近拨号号码电话簿(非标准的) "RC" ME最近接听号码电话簿(非标准的) "MC" ME最近未接号码电话簿(非标准的) "MT" ME电话簿和缩位拨号电话簿的合并(非标准的)包括ME和SIM电话簿 (存储容量取决于SIM卡,事实上,EM310不存在ME电话簿) "EN" 紧急呼叫号码电话簿(此功能开启及存储容量取决于SIM卡) "BD" 被禁止的拨号号码电话簿(此功能开启及存储容量取决于SIM卡) "SD" 服务拨号号码电话簿(此功能开启及存储容量取决于SIM卡) 输出参数: 返 回: TRUE: 成功 FALSE: 失败N O T E : 传入参数不能带双引号,本函数会自动添加双引号********************************************************************************************/BOOL CGsmModel::TEL_SetPhoneBookStorage(char *szStorage){ char szCmd[MAX_PATH] = {0}; sprintf(szCmd,"AT+CPBS=\"%s\"\r\n",szStorage); return SendATCmd(szCmd);}/*******************************************************************************************函数名称: TEL_ReadPhoneBook描 述: 读取指定位置的电话号码记录输入参数: 电话号码的索引位置(SIM卡最多只支持250条记录,ME最多只支持200条记录。), 电话号码缓冲区以及姓名缓冲区输出参数: 电话号码和姓名返 回: TRUE: 成功 FALSE: 失败********************************************************************************************/BOOL CGsmModel::TEL_ReadPhoneBook(UINT index, WCHAR *wzNumber, WCHAR *wzName){ char szCmd[MAX_PATH] = {0}; sprintf(szCmd,"AT+CPBR=%u\r\n",index); if(SendATCmd(szCmd))//取指定的号码 { char *szBegin = strstr(m_strRespBuf, "CPBR");//移到CPBR if(!szBegin) return FALSE; szBegin = strchr(szBegin,'"');//移到号码前的引号 if(!szBegin) return FALSE; szBegin++;//移到号码处,即移过号码前的引号 char *szEnd = strchr(szBegin,'"');//找到号码后的引号 if(!szEnd) return FALSE; mbstowcs(wzNumber,szBegin,szEnd-szBegin);//取得电话号码,取到号码后都可以返回TRUE szBegin = szEnd + 1;//移过号码后的引号 szBegin = strchr(szBegin,'"');//找到姓名编码前的引号 if(!szBegin) return TRUE; szBegin ++;//移过姓名编码前的引号 szEnd = strchr(szBegin,'"');//找到姓名编码后的引号 if(!szEnd) return TRUE; char szName[BUFF_SIZE] = {0}; strncpy(szName,szBegin,szEnd-szBegin);//取得姓名 Str_ConvertToUnicode(szName, wzName); return TRUE; } return FALSE;}