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

📄 smsagentdlg.cpp

📁 通过串口连接GSM手机或者短信猫
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}

		}
		break;
		
	default:
		break;		
	}
	
	return CDialog::DefWindowProc(message, wParam, lParam);
}

void CSMSAgentDlg::OnTimer(UINT nIDEvent) 
{
	switch(nIDEvent)
	{
	case 1:
		{
			SMSSearch();
		}
		break ;
	case 2:
		{	
			ReceiveSMS();
		}
		break;
	default:
		break ;
	}
	
	CDialog::OnTimer(nIDEvent);
}

void CSMSAgentDlg::SMSSearch()
{
	CString sqlstr;
	char msg[256]={0};
	sqlstr.Format ("select top 1 Rowid,distsimcode,context,sendtime, sendflag from SMSSend_Task where sendflag=0  order by  sendtime desc");
	try 
		{
			_variant_t v,vNull(0L);
			_RecordsetPtr rs = m_cnn->Execute(_bstr_t(sqlstr), &v, adCmdText);
			if(rs->ADOEOF)
			{			
			sprintf(msg,"当前SMSSend_Task表无待发任务!");
			SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
			rs->Close();

			}
			else
			{
				while(!rs->ADOEOF)
				{
					vNull=rs->GetCollect ("Rowid");
					int Rowid=vNull.intVal ;
					vNull=rs->GetCollect ("distsimcode");
					CString distsimcode=vNull.bstrVal ;
					vNull=rs->GetCollect ("context");
					CString context=vNull.bstrVal ;
					if(strlen(distsimcode)>4)
					{
						typedef int(_stdcall *Sms_Send)(CString Sms_TelNum,CString Sms_Text);
						Sms_Send Proc;
						Proc = (Sms_Send)GetProcAddress(hinstDLL,"Sms_Send");
						int iValue = Proc(distsimcode,context);
						
						if (iValue == 1)
						{
							sprintf(msg,"成功发送:%s,%s",distsimcode,context);
							SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
							sprintf(msg,"%d",Rowid);
							SendMessage(WM_USER+20, 0, (LPARAM)&msg[0]); 
							
						} else{
							sprintf(msg,"重排待发:%s,%s",distsimcode,context);
							SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
							sprintf(msg,"%d",Rowid);
							SendMessage(WM_USER+30, 0, (LPARAM)&msg[0]); 
						}
						distsimcode="";
					}
					rs->MoveNext();
				}
					
			}
		

	}
		catch(_com_error& e) {
		CString err(LPCSTR(e.Description()));
		sprintf(msg,"执行%s遇到%s",sqlstr,err);
		SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
	}


}

BOOL CSMSAgentDlg::DBConnect()
{
	char msg[512] = {0};
	HRESULT hr = m_cnn.CreateInstance(__uuidof(Connection));
	if(!SUCCEEDED(hr)) 
	{
		sprintf(msg, "数据库连接失败");
		SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
		return FALSE;
	}
	
	try {	
		COleVariant v(0L);	
		char searchdatasource[256] = {0};
		char searchdatabase[256] = {0};
		char searchuserid[256] = {0};
		char searchpassword[256] = {0};
		char searchcnnstr[256] = {0};
		GetPrivateProfileString("DATABASE", "HOST", "127.0.0.1", searchdatasource, sizeof(searchdatasource), "./config.ini");
		GetPrivateProfileString("DATABASE", "DB", "SMSAgent", searchdatabase, sizeof(searchdatabase), "./config.ini");
		GetPrivateProfileString("DATABASE", "USR", "sa", searchuserid, sizeof(searchuserid), "./config.ini");
		GetPrivateProfileString("DATABASE", "PWD", "", searchpassword, sizeof(searchpassword), "./config.ini");
		sprintf(searchcnnstr, "Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=%s;Initial Catalog=%s;User Id=%s;Pwd=%s;",
			searchdatasource, searchdatabase, searchuserid, searchpassword);
		m_cnn->Open(_bstr_t(searchcnnstr), L"", L"", -1);
	}
	catch(_com_error &e) 
	{
		CString err(LPCSTR(e.Description()));
		sprintf(msg, "数据库连接错误提示:%s", err);
		SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
		return FALSE;
	}
	sprintf(msg,"数据库连接成功!");
	SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
	return TRUE;

}


void CSMSAgentDlg::InitSMSAgent()
{	char msg[128]={0};
	char szBuf[256],szBuf1[128],szHost[128];
	GetPrivateProfileString("DATABASE", "HOST","",
		szBuf1, sizeof(szBuf1), "./config.ini");
	GetPrivateProfileString("DATABASE", "DB","",
		szHost, sizeof(szHost), "./config.ini");
	sprintf(szBuf,"SMSAgent平台>串口号:【%d】 连接速率:【%d】 数据库主机:【%s】数据库:【%s】 "
		,GetPrivateProfileInt("COMM","COMPORT",0,"./config.ini")
		,GetPrivateProfileInt("COMM","RATE",0,"./config.ini")
		,szBuf1,szHost);
	SetWindowText(szBuf);
	int SendTime=GetPrivateProfileInt("COMM","SendTime",0,"./config.ini");
	int RevTime=GetPrivateProfileInt("COMM","RevTime",0,"./config.ini");
	SetTimer(1,SendTime*1000,NULL) ;
	SetTimer(2,RevTime*1000,NULL) ;

	if(DBConnect())
	{
		sprintf(msg,"程序初始化完成,开始自动值守!");
		SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
	}
	else
	{

	sprintf(msg,"数据库连接失败,线程初始化放弃,请检查数据库连接!");
	SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
	}
}

BOOL CSMSAgentDlg::InitWaveCom()
{

	CString strText;
	CString strtmp;
	CString tmp[256];
	char msg[256]={0};
	int m_intPort=GetPrivateProfileInt("COMM", "COMPORT",4,"./config.ini");
	strtmp="//上海迅赛信息技术有限公司,网址www.xunsai.com//";
	typedef int(_stdcall *Sms_Connection)(CString CopyRight,int Com_Port,int Com_BaudRate,CString *Mobile_Type);
	Sms_Connection Proc;
	Proc = (Sms_Connection)GetProcAddress(hinstDLL,"Sms_Connection");
	int iValue = Proc(strtmp,m_intPort,9600,tmp);
    if (iValue == 1)
	{
	    strText.Format("短信猫连接成功!(短信猫型号为:%s)",*tmp);
		sprintf(msg,"%s",strText);
		SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 

	} else if (iValue == 0) {
		sprintf(msg,"短信猫连接失败!(请重新连接短信猫)...");
		SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
		return FALSE;
	}
		return TRUE;
}

void CSMSAgentDlg::ReceiveSMS()
{
	CString strText;
	CString tmp[1024];
	char msg[512]={0};
	CString smsindex,orgsimcode,revtime,revcontext;
	typedef int(_stdcall *Sms_Receive)(CString Sms_Type,CString *Sms_Text);
	Sms_Receive Proc;
	Proc = (Sms_Receive)GetProcAddress(hinstDLL,"Sms_Receive");
	int iValue = Proc("4",tmp);	
	strText.Format("%s",*tmp);
	if(strlen(strText)>10)
	{
	CString stra=strText.Right (strlen(strText)-5); //取所有有用的字符串
	strText.Format ("%s|",stra);
	int strpos=0,postmp=0;
	while(!(strpos==-1))
	{	
		
		strpos=strText.Find("|");//寻找短信分隔符
		CString strtmp=strText.Left(strpos);//取出单个短信内容
		strText=strText.Right(strlen(strText)-strpos-1);//保留剩余内容等待下一次使用
		int postmp=0,i=0;
		while(!(postmp==-1))
		{
			
			postmp=strtmp.Find ("#");
			CString str1=strtmp.Left (postmp);
			strtmp=strtmp.Right (strlen(strtmp)-postmp-1);
			if(i==0) smsindex=str1;
			if(i==2) orgsimcode=str1;
			if(i==3) revcontext=str1;
			if(i==4) revtime=strtmp;
			i++;		
		}
		if(!(strpos==-1))
		{
		CString sqlstr;
		sqlstr.Format ("insert into smsmo_list(mosimcode,mocontext,revtime) values('%s','%s','%s') ",orgsimcode,revcontext,revtime);
		sprintf(msg,"%s",sqlstr);
		SendMessage(WM_USER+40, 0, (LPARAM)&msg[0]); 
		sprintf(msg,"接收短信:索引%s,%s,%s,%s",smsindex,orgsimcode,revcontext,revtime);
		SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
		if(DeleteSMS(smsindex)) 
		{
			sprintf(msg,"删除手机短信:索引%s成功!",smsindex);
			SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
		}
		else
		{
			sprintf(msg,"删除手机短信:索引%s失败!",smsindex);
			SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
			
		}		
		}
	
		

	}
	}
	else
	{
	sprintf(msg,"手机没有接收任何短信!",smsindex);
	SendMessage(WM_USER+10, 0, (LPARAM)&msg[0]); 
	}

}

BOOL CSMSAgentDlg::DeleteSMS(CString m_index)
{
	CString strText;
	CString tmp[256];
	typedef int(_stdcall *Sms_Delete)(CString Sms_Index);
	Sms_Delete Proc;
	Proc = (Sms_Delete)GetProcAddress(hinstDLL,"Sms_Delete");
	int iValue = Proc(m_index);	
	if (iValue == 1)
	{
        
	} else{
		return FALSE;    
	}
	return TRUE;
}

void CSMSAgentDlg::OnButton1() 
{
	UpdateData();
	CString strText;
	typedef int(_stdcall *Sms_Send)(CString Sms_TelNum,CString Sms_Text);
	Sms_Send Proc;
	Proc = (Sms_Send)GetProcAddress(hinstDLL,"Sms_Send");
	int iValue = Proc(m_simcode,m_context);
    if (iValue == 1)
	{
        AfxMessageBox("发送成功!");
	} else{
        AfxMessageBox("发送失败!");
	}
}

⌨️ 快捷键说明

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