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

📄 callsmscomdlg.cpp

📁 wavecom 短信猫开发示例 二次开发包
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	UpdateData(FALSE);
}

void CCallSmsComDlg::OnMobileDisconnect() 
{
	// TODO: Add your control notification handler code here
	CComVariant varWaitSendCount;
	g_spiModemService->DisConnectModem(&varWaitSendCount);
	varWaitSendCount.ChangeType(VT_I4);
	if(varWaitSendCount.lVal!=0)
		::MessageBox(this->GetSafeHwnd(),_T("还有短信没有发送!"),XTTSOFT_SMS_APPNAME,MB_OK);
}

void CCallSmsComDlg::OnMobileConnectmodem() 
{
	// TODO: Add your control notification handler code here
	XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
	g_spiModemService->get_ModemStatus(&eModemStatus);
	if(eModemStatus>XTTSMSCOM::UNINIT_STATUS)
	{
		::MessageBox(this->GetSafeHwnd(),_T("已经连接或正在连接!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	UpdateData(TRUE);
	int iCommPort=m_ctlCommList.GetCurSel();
	if(iCommPort==-1)
	{
		::MessageBox(this->GetSafeHwnd(),_T("端口无效!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	VARIANT_BOOL bFlag=VARIANT_FALSE;
	if(m_bEnableSend==TRUE)
		bFlag=VARIANT_TRUE;
	else
		bFlag=VARIANT_FALSE;
	g_spiModemService->put_EnableSendFunction(bFlag);
	if(m_bAutoRouter==TRUE)
		bFlag=VARIANT_TRUE;
	else
		bFlag=VARIANT_FALSE;
	//设置自动路由,仅对多个短信猫同时连接有效
	g_spiModemService->put_EnableRouterSend(bFlag);
	g_spiModemService->put_Timeouts(m_iOverTime);//超时时间,如果接的是WAVECOM的USB,建议设为30秒及以上
	g_spiModemService->put_SendFailedTry(m_iTryTime);//尝试发送的次数
	

	g_spiModemService->put_SendStartTime(CComVariant(m_StartTime));
	g_spiModemService->put_SendEndTime(CComVariant(m_EndTime));

//	g_spiModemService->put_SimulateSend(VARIANT_TRUE);//设置模拟发送标志,执行此设置后组件将发送过程模拟,而不实际发送短信,节省调试程序费用

	g_spiModemService->put_CountryCode(CComVariant(m_strCountryCode));
	XTTSMSCOM::EMobileCommPort eCommPort=(XTTSMSCOM::EMobileCommPort)(iCommPort+1);
	if(m_bAsynConnect==TRUE)
		g_spiModemService->put_WorkMode(XTTSMSCOM::ASYNCHRONOUS_WORKMODE);//设为异步连接
	else
		g_spiModemService->put_WorkMode(XTTSMSCOM::SYNCHRONOUS_WORKMODE);//设备阻塞模式连接
	XTTSMSCOM::EMobileCommPara eCommPara=(XTTSMSCOM::EMobileCommPara)m_iCommPara;
	g_spiModemService->ConnectModem(eCommPort,eCommPara,&eModemStatus);
	if(eModemStatus==XTTSMSCOM::UNINIT_STATUS)
	{
		CComVariant varErrDes;
		XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
		g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
		CString strErrInfo(_T(""));
		if(varErrDes.vt==VT_BSTR && varErrDes.bstrVal!=NULL)
			strErrInfo.Format(_T("连接短信猫失败!错误码为%d,错误信息为 %s。"),eErrType,(CString )varErrDes.bstrVal);
		else
			strErrInfo=_T("连接短信猫失败!");
		varErrDes.Clear();
		::MessageBox(this->GetSafeHwnd(),strErrInfo,XTTSOFT_SMS_APPNAME,MB_OK);
	}
	else
	{
		if(m_bAsynConnect==FALSE)
			::MessageBox(this->GetSafeHwnd(),_T("连接短信猫成功!"),XTTSOFT_SMS_APPNAME,MB_OK);
	}
}

void CCallSmsComDlg::OnModemReadmsg() 
{
	// TODO: Add your control notification handler code here
	XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
	g_spiModemService->get_ModemStatus(&eModemStatus);
	if(eModemStatus<XTTSMSCOM::OK_STATUS)
	{
		::MessageBox(this->GetSafeHwnd(),_T("还没有正常连接短信猫!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	UpdateData(TRUE);
	int iMsgPosition=m_ctlMsgList.GetCurSel();
	if(iMsgPosition<0)
	{
		::MessageBox(this->GetSafeHwnd(),_T("请先取到总的数量!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	m_strReadInfo.Empty();
	CComVariant varFrom,varArrivedTime,varContent,varMsgType;
	VARIANT_BOOL bReadFlag=VARIANT_FALSE;
	g_spiModemService->ReadSimMsg(iMsgPosition+1,&varFrom,&varArrivedTime,&varContent,&varMsgType,&bReadFlag);
	if(bReadFlag==VARIANT_FALSE)
	{
		CComVariant varErrDes;
		XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
		g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
		CString strErrInfo(_T(""));
		if(varErrDes.vt==VT_BSTR && varErrDes.bstrVal!=NULL)
			strErrInfo.Format(_T("读取短信失败!错误码为%d,错误信息为 %s。"),eErrType,(CString )varErrDes.bstrVal);
		else
			strErrInfo=_T("读取短信失败!");
		::MessageBox(this->GetSafeHwnd(),strErrInfo,XTTSOFT_SMS_APPNAME,MB_OK);
		UpdateData(FALSE);
		return;
	}
	CString strMsgContent(_T("")),strFromNumber(_T(""));
	if(varFrom.vt==VT_BSTR && varFrom.bstrVal!=NULL)
		strFromNumber=varFrom.bstrVal;
	if(varContent.vt==VT_BSTR && varContent.bstrVal!=NULL)
		strMsgContent=varContent.bstrVal;
	varFrom.Clear();
	varContent.Clear();
	COleDateTime MsgTime(varArrivedTime.date);
	m_strReadInfo.Format(_T("手机号:%s;时间:%d年%02d月%02d日 %02d时:%02d分:%02d秒;内容:%s"),\
		strFromNumber,MsgTime.GetYear(),MsgTime.GetMonth(),MsgTime.GetDay(),MsgTime.GetHour(),\
		MsgTime.GetMinute(),MsgTime.GetSecond(),strMsgContent);
	UpdateData(FALSE);
}

void CCallSmsComDlg::OnModemGetcount() 
{
	// TODO: Add your control notification handler code here
	XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
	g_spiModemService->get_ModemStatus(&eModemStatus);
	if(eModemStatus<XTTSMSCOM::OK_STATUS)
	{
		::MessageBox(this->GetSafeHwnd(),_T("还没有正常连接短信猫!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	m_strMsgCount.Empty();
	CComVariant varUsed,varTotal;
	g_spiModemService->GetSimMsgCount(&varUsed,&varTotal);
	varUsed.ChangeType(VT_I2);
	varTotal.ChangeType(VT_I2);
	m_strMsgCount.Format(_T("%d/%d"),varUsed.iVal,varTotal.iVal);
	int iCount=m_ctlMsgList.GetCount(),index=0;
	for(index=0;index<iCount;index++)
		m_ctlMsgList.DeleteString(0);
	CString strIndex(_T(""));
	for(index=1;index<varTotal.iVal+1;index++)
	{
		strIndex.Format(_T("%d"),index);
		m_ctlMsgList.AddString(strIndex);
		strIndex.Empty();
	}
	m_ctlMsgList.SetCurSel(0);
	varUsed.Clear();
	varTotal.Clear();
	UpdateData(FALSE);
}

void CCallSmsComDlg::OnModemSendmsg() 
{
	// TODO: Add your control notification handler code here
	XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
	g_spiModemService->get_ModemStatus(&eModemStatus);
	if(eModemStatus<XTTSMSCOM::OK_STATUS)
	{
		::MessageBox(this->GetSafeHwnd(),_T("还没有正常连接短信猫!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	UpdateData(TRUE);
	m_strSendTo.TrimLeft();
	m_strSendTo.TrimRight();
	if(m_strSendTo.IsEmpty() || m_strSendContent.IsEmpty()==TRUE)
	{
		::MessageBox(this->GetSafeHwnd(),_T("参数错误!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	if(m_bAsynSend==TRUE)
		g_spiModemService->put_WorkMode(XTTSMSCOM::ASYNCHRONOUS_WORKMODE);//设为无阻塞模式发送
	else
		g_spiModemService->put_WorkMode(XTTSMSCOM::SYNCHRONOUS_WORKMODE);//阻塞模式发送
	int iFind=-1;
	BOOL bGroupFlag=FALSE;
	iFind=m_strSendTo.Find(_T(";"));
	if(iFind!=-1)
		bGroupFlag=TRUE;
	m_strMsgID.Empty();
	CComVariant varMsgID;
	g_spiModemService->CreateUniqueID(&varMsgID);
	if(varMsgID.vt==VT_BSTR && varMsgID.bstrVal!=NULL)
		m_strMsgID=varMsgID.bstrVal;
	varMsgID.Clear();
	if(m_strMsgID.IsEmpty()==TRUE)
	{
		::MessageBox(this->GetSafeHwnd(),_T("生成短信ID失败!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	m_arrSendTo.RemoveAll();
	//将发送的短信入库...
	m_arrSendTo.Add(m_strSendTo);
	CString strSignName(_T(""));
	if(m_strSignName.IsEmpty()==FALSE)
		strSignName.Format(_T("[%s]:"),m_strSignName);
	//执行发送
	HRESULT hRet(E_FAIL);
	CComVariant varSplitCount;//拆分的数量
	if(bGroupFlag==FALSE)
	{
		XTTSMSCOM::EMobileMsgStatus eMsgStatus=XTTSMSCOM::UNKNOWN_MSGSTATUS;
		hRet=g_spiModemService->SendMsg(m_strMsgID.AllocSysString(),m_strSendTo.AllocSysString(),m_strSendContent.AllocSysString(),&varSplitCount,XTTSMSCOM::TEXTSMS_MSGTYPE,strSignName.AllocSysString(),m_iSendPri,VARIANT_FALSE,VARIANT_FALSE,&eMsgStatus);
//		g_spiModemService->SendMsg(m_strMsgID.AllocSysString(),m_strSendTo.AllocSysString(),m_strSendContent.AllocSysString(),&varSplitCount,XTTSMSCOM::TEXTSMS_MSGTYPE,strSignName.AllocSysString(),m_iSendPri,VARIANT_TRUE,VARIANT_FALSE,&eMsgStatus);//要求状态报告
		varSplitCount.ChangeType(VT_I2);
		m_sSplitCount=varSplitCount.iVal;
		//iSplitCount为1表示没有拆分
		if(m_bAsynSend==FALSE)
		{
			if(eMsgStatus==XTTSMSCOM::SENTOK_MSGSTATUS)
				::MessageBox(this->GetSafeHwnd(),_T("发送成功!"),XTTSOFT_SMS_APPNAME,MB_OK);
			else
			{
				CComVariant varErrDes;
				XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
				g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
				CString strErrInfo(_T(""));
				if(varErrDes.vt==VT_BSTR && varErrDes.bstrVal!=NULL)
					strErrInfo.Format(_T("发送失败!错误码为%d,错误信息为 %s"),eErrType,(CString )varErrDes.bstrVal);
				else
					strErrInfo=_T("发送失败!");
				::MessageBox(this->GetSafeHwnd(),strErrInfo,XTTSOFT_SMS_APPNAME,MB_OK);
			}
		}
		else
		{
			if(FAILED(hRet))
			{
				CComVariant varErrDes;
				XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
				g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
				CString strErrInfo(_T(""));
				if(varErrDes.vt==VT_BSTR && varErrDes.bstrVal!=NULL)
					strErrInfo.Format(_T("提交到队列失败!错误码为%d,错误信息为 %s"),eErrType,(CString )varErrDes.bstrVal);
				else
					strErrInfo=_T("提交到队列失败!");
				::MessageBox(this->GetSafeHwnd(),strErrInfo,XTTSOFT_SMS_APPNAME,MB_OK);
			}
			else
				::MessageBox(this->GetSafeHwnd(),_T("成功提交到发送队列!"),XTTSOFT_SMS_APPNAME,MB_OK);
		}
		//无阻塞模式发送结果由事件通知
		return;
	}
	//群发
	COleVariant varSendTo(m_strSendTo);//可以直接是以分号“;”分割的字符串
	varSendTo.ChangeType(VT_BSTR);
	hRet=g_spiModemService->SendGroupMsg(m_strMsgID.AllocSysString(),varSendTo,m_strSendContent.AllocSysString(),strSignName.AllocSysString(),m_iSendPri,VARIANT_FALSE,VARIANT_FALSE,&varSplitCount);
	varSplitCount.ChangeType(VT_I2);
	m_sSplitCount=varSplitCount.iVal;
	if(FAILED(hRet))
	{
		CComVariant varErrDes;
		XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
		g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
		CString strErrInfo(_T(""));
		if(varErrDes.vt==VT_BSTR && varErrDes.bstrVal!=NULL)
			strErrInfo.Format(_T("提交到队列失败!错误码为%d,错误信息为 %s"),eErrType,(CString )varErrDes.bstrVal);
		else
			strErrInfo=_T("提交到队列失败!");
		::MessageBox(this->GetSafeHwnd(),strErrInfo,XTTSOFT_SMS_APPNAME,MB_OK);
	}
	else
		::MessageBox(this->GetSafeHwnd(),_T("成功提交到发送队列!"),XTTSOFT_SMS_APPNAME,MB_OK);
}

void CCallSmsComDlg::OnModemDelmsg() 
{
	// TODO: Add your control notification handler code here
	XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
	g_spiModemService->get_ModemStatus(&eModemStatus);
	if(eModemStatus<XTTSMSCOM::OK_STATUS)
	{
		::MessageBox(this->GetSafeHwnd(),_T("还没有正常连接短信猫!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	UpdateData(TRUE);
	int iMsgPosition=m_ctlMsgList.GetCurSel();
	if(iMsgPosition<0)
	{
		::MessageBox(this->GetSafeHwnd(),_T("请先取到总的数量!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	VARIANT_BOOL bDelFlag=VARIANT_FALSE;
	g_spiModemService->DeleteSimMsg(iMsgPosition+1,&bDelFlag);
	if(bDelFlag==VARIANT_FALSE)
	{
		CComVariant varErrDes;
		XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
		g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
		CString strErrInfo(_T(""));
		if(varErrDes.vt==VT_BSTR && varErrDes.bstrVal!=NULL)
			strErrInfo.Format(_T("删除失败!错误码为%d,错误信息为 %s。"),eErrType,(CString )varErrDes.bstrVal);
		else
			strErrInfo=_T("删除失败!");
		::MessageBox(this->GetSafeHwnd(),strErrInfo,XTTSOFT_SMS_APPNAME,MB_OK);
	}
	else
		::MessageBox(this->GetSafeHwnd(),_T("删除成功!"),XTTSOFT_SMS_APPNAME,MB_OK);
}

void CCallSmsComDlg::OnModemClear() 
{
	// TODO: Add your control notification handler code here
	XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
	g_spiModemService->get_ModemStatus(&eModemStatus);
	if(eModemStatus<XTTSMSCOM::OK_STATUS)
	{
		::MessageBox(this->GetSafeHwnd(),_T("还没有正常连接短信猫!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	UpdateData(TRUE);
	int iMsgPosition=m_ctlMsgList.GetCurSel();
	if(iMsgPosition<0)
	{
		::MessageBox(this->GetSafeHwnd(),_T("请先取到总的数量!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	VARIANT_BOOL bClearFlag=VARIANT_FALSE;
	g_spiModemService->ClearSimMsg(&bClearFlag);
	if(bClearFlag==VARIANT_FALSE)
	{
		CComVariant varErrDes;
		XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
		g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
		CString strErrInfo(_T(""));
		if(varErrDes.vt==VT_BSTR && varErrDes.bstrVal!=NULL)
			strErrInfo.Format(_T("清空失败!错误码为%d,错误信息为 %s。"),eErrType,(CString )varErrDes.bstrVal);
		else
			strErrInfo=_T("清空失败!");
		::MessageBox(this->GetSafeHwnd(),strErrInfo,XTTSOFT_SMS_APPNAME,MB_OK);
	}
	else
		::MessageBox(this->GetSafeHwnd(),_T("清空成功!"),XTTSOFT_SMS_APPNAME,MB_OK);
}

void CCallSmsComDlg::OnModemOtherdemo() 
{
	// TODO: Add your control notification handler code here
	//演示其它功能
	COtherDemoDlg DemoDlg;
	DemoDlg.m_sSplitCount=m_sSplitCount;
	DemoDlg.m_arrSendTo.Copy(m_arrSendTo);
	DemoDlg.DoModal();
}

void CCallSmsComDlg::OnModemWritesmca() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	m_strSMCA.TrimLeft();
	m_strSMCA.TrimRight();
	if(g_spiModemService==NULL || m_strSMCA.IsEmpty()==TRUE)
		return;
	XTTSMSCOM::EMobileModemStatus eModemStatus=XTTSMSCOM::UNINIT_STATUS;
	g_spiModemService->get_ModemStatus(&eModemStatus);
	if(eModemStatus<XTTSMSCOM::OK_STATUS)
	{
		::MessageBox(this->GetSafeHwnd(),_T("还没有正常连接短信猫!"),XTTSOFT_SMS_APPNAME,MB_OK);
		return;
	}
	//设置短信中心到SIM卡,如北京的是13800100500
	g_spiModemService->SetSMCA(m_strSMCA.AllocSysString(),VARIANT_TRUE);//设置到SIM卡
	CComVariant varErrDes;
	XTTSMSCOM::EMobileErrorType eErrType=XTTSMSCOM::OK_ERRTYPE;
	g_spiModemService->GetLastError(&varErrDes,&eErrType);//得到错误信息
	if(eErrType==XTTSMSCOM::OK_ERRTYPE)
		::MessageBox(this->GetSafeHwnd(),_T("设置成功!"),XTTSOFT_SMS_APPNAME,MB_OK);
}

void CCallSmsComDlg::OnModemSpecsms() 
{
	// TODO: Add your control notification handler code here
	CSpecSmsDlg SpecSmsDlg(this);
	int iRet=SpecSmsDlg.DoModal();
}

⌨️ 快捷键说明

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