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

📄 mobliexdoc.cpp

📁 通过手机数据线连接手机
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		re = ProcessResAddSMS();	break;
	case CW_DEL_SMS:
		re = ProcessResDelSMS();	break;
	case CW_SEND_SMS_BODY:
		re = ProcessResSendSMS();	break;

	case CW_CPBS_QUERY:
		re = ProcessResCPBSQuery();	break;
	case CW_CPBS_SET:
		re = ProcessResCPBSSet();	break;
	case CW_CPBR_QUERY:
		re = ProcessResCPBRQuery();	break;
	case CW_CPBR_GET:
		re = ProcessResCPBRGet();	break;
	case CW_CPBW_SET:
		re = ProcessResCPBWSet();	break;

	case CW_CPBW_QUERY:
	case CW_SEND_SMS_HEAD:
	case CW_TEST_COMMAND:
	case CW_TM:
	default:
		re = FALSE;
	}
	return re;
}

BOOL CMoblieXDoc::ProcessResSendSMS()
{
	m_waitingProcessArray.RemoveAll();
	if( IsLogRes2Wnd() )
	{
		if( m_atState == ATS_OK )
			AddLog( "短信发送成功" );
		else
			AddLog( "短信发送失败" );
	}

	return TRUE;
}

BOOL CMoblieXDoc::ProcessResAddSMS()
{
	m_waitingProcessArray.RemoveAll();
	if( IsLogRes2Wnd() )
	{
		if( m_atState != ATS_OK )
		{
			AddLog( "短信添加失败" );
		}
	}
	::PostMessage( m_hMainWnd, WM_COMMAND, ID_SMS_GET, 0 );

	return TRUE;
}

BOOL CMoblieXDoc::ProcessResDelSMS()
{
	m_waitingProcessArray.RemoveAll();
	if( IsLogRes2Wnd() )
	{
		if( m_atState != ATS_OK )
		{
			AddLog( "短信删除失败" );
			::PostMessage( m_hMainWnd, WM_COMMAND, ID_SMS_GET, 0 );
		}
	}

	return TRUE;
}

BOOL CMoblieXDoc::ProcessResGetSMS()
{
BOOL re;

	if( m_atState != ATS_OK )
	{
		re = FALSE;
	}
	else
	{
	int i, size = m_waitingProcessArray.GetSize();

		m_receivedSMSHeadArray.RemoveAll();
		m_receivedSMSOStrArray.RemoveAll();

		for( i = 0; i < size; i++ )
		{
			if( m_waitingProcessArray[i].Find( "+CMGL:" ) == 0 && i+1 < size )
			{
				m_receivedSMSHeadArray.Add( m_waitingProcessArray[i] );
				i++;
				m_receivedSMSOStrArray.Add( m_waitingProcessArray[i] );
			}
		}
		re = TRUE;
	}

	m_waitingProcessArray.RemoveAll();

	//通知视图更新列表
	::PostMessage( m_hMainWnd, WM_COMMAND, ID_SMS_LIST_UPDATE, 0 );

	if( IsLogRes2Wnd() )
	{
		if( m_atState == ATS_OK )
			AddLog( "读取短信成功" );
		else
			AddLog( "错误: 无法读取短信" );
	}
	return re;
}

//处理由CW_CPBS_QUERY产生的数据
//+CPBS: ("FD","ME","MT","SM")
BOOL CMoblieXDoc::ProcessResCPBSQuery()
{
CStrFilter str;
CPhoneBook & pbME = GetPhoneBook(PBM_ME);
CPhoneBook & pbSM = GetPhoneBook(PBM_SM);

	FindStrByHead( m_waitingProcessArray, "+CPBS:", str );
	m_waitingProcessArray.RemoveAll();

	if( m_atState == ATS_OK && !str.IsEmpty() )
	{
	CStringArray saBuf;

		if( str.Separate( '(' ) )
		{
			str = str.m_reRight;
			str.SeparateAll( ',', saBuf );
			for( int i = 0; i < saBuf.GetSize(); i++ )
			{
				if( saBuf[i].Find( "ME" ) >= 0 )
					pbME.m_itemIDMin = 0;
				else if( saBuf[i].Find( "SM" ) >= 0 )
					pbSM.m_itemIDMin = 0;
			}
		}
	}
	else
	{//设置无电话本标识
		pbME.m_itemIDMin = -1;
		pbSM.m_itemIDMin = -1;
	}

	if( pbME.HavePB() )
	{//取手机电话本容量
		SendCommandStr( pbME.GetCommand(PBC_CPBS_SET), CW_CPBS_SET );
		SendCommandStr( pbME.GetCommand(PBC_CPBR_QUERY), CW_CPBR_QUERY );//查询电话本容量
	}
	else
	{
		if( IsLogRes2Wnd() )
		{
			AddLog( "不支持话机电话本" );
		}
	}
	if( pbSM.HavePB() )
	{//取SIM卡电话本容量
		SendCommandStr( pbSM.GetCommand(PBC_CPBS_SET), CW_CPBS_SET );
		SendCommandStr( pbSM.GetCommand(PBC_CPBR_QUERY), CW_CPBR_QUERY );//查询电话本容量
	}
	else
	{
		if( IsLogRes2Wnd() )
		{
			AddLog( "不支持SIM卡电话本" );
		}
	}
	return TRUE;
}

//处理由CW_CPBR_QUERY产生的数据
//+CPBR: (001-300),032,016
BOOL CMoblieXDoc::ProcessResCPBRQuery()
{
CStrFilter str;
int pbMin = -1, pbMax = -1;

	FindStrByHead( m_waitingProcessArray, "+CPBR:", str );
	m_waitingProcessArray.RemoveAll();

	if( m_atState == ATS_OK && !str.IsEmpty() )
	{
		if( str.Separate( '(' ) )
		{
			str = str.m_reRight;
			if( str.Separate( ',' ) )
			{
				str = str.m_reLeft;
				if( str.Separate( '-' ) )
				{
					pbMin = atoi( str.m_reLeft );
					pbMax = atoi( str.m_reRight );
				}
			}
		}
	}

	GetPhoneBook(m_curWorkPBM).m_itemIDMin = pbMin;
	GetPhoneBook(m_curWorkPBM).m_itemIDMax = pbMax;
	
	if( IsLogRes2Wnd() )
	{
	CString str;
		str.Format( "%s容量: %d-%d", GetPhoneBook(m_curWorkPBM).m_des, pbMin, pbMax );
		AddLog( str );
	}

	return TRUE;
}

//处理由CW_CPBS_SET产生的数据
BOOL CMoblieXDoc::ProcessResCPBSSet()
{
	m_curWorkPBM = PBM_NONE;

	if( m_atState == ATS_OK )
	{
		if( m_curSendStr.Find( "=\"ME\"" ) > 0 )
		{
			m_curWorkPBM = PBM_ME;
		}
		else if( m_curSendStr.Find( "=\"SM\"" ) > 0 )
		{
			m_curWorkPBM = PBM_SM;
		}
	}

	m_waitingProcessArray.RemoveAll();

	return TRUE;
}

BOOL CMoblieXDoc::ProcessResCMGSQuery()
{
	m_waitingProcessArray.RemoveAll();
	if( IsLogRes2Wnd() )
	{
		if( m_atState != ATS_OK )
			AddLog( "不支持短信发送" );
	}

	return TRUE;
}

//处理由CW_CPBR_GET产生的数据
BOOL CMoblieXDoc::ProcessResCPBRGet()
{
int i, size = m_waitingProcessArray.GetSize() - 1;//去掉OK行
CPhoneBook &pb = GetPhoneBook( m_curWorkPBM );

	pb.RemoveAll();
	for( i = 0; i < size; i++ )
	{
		m_waitingProcessArray[i].TrimLeft( "+CPBR:" );
		m_waitingProcessArray[i].TrimLeft();
		if( m_waitingProcessArray[i][0] <= '9' )
		{//是数字
			pb.AddItem( m_waitingProcessArray[i] );
		}
	}

	m_waitingProcessArray.RemoveAll();

	::PostMessage( m_hMainWnd, WM_COMMAND, ID_PB_UPDATE, 0 );

	if( IsLogRes2Wnd() )
	{
	const char * str;

		if( m_atState == ATS_OK )
			str = "已成功读取";
		else
			str = "未能读取";
		AddLog( str+pb.m_des );
	}

	return TRUE;
}

//处理由CW_CPBW_SET产生的数据
BOOL CMoblieXDoc::ProcessResCPBWSet()
{
	m_waitingProcessArray.RemoveAll();
	if( IsLogRes2Wnd() )
	{
		if( m_atState == ATS_OK )
			AddLog( "写入电话本成功" );
		else
			AddLog( "写入电话本失败" );
	}

	return TRUE;
}

long CMoblieXDoc::GetReceivedSMSNum()
{
	return m_receivedSMSHeadArray.GetSize();
}

BOOL CMoblieXDoc::GetReceivedSMS(long id, CString &callNo, CString &sendTime, CString &body)
{
	if( id < 0 || id > m_receivedSMSHeadArray.GetUpperBound() )
	{//ID非法
		return FALSE;
	}
CSMS sms;
	sms.Decode( m_receivedSMSOStrArray[id] );
	callNo = sms.m_callNo;
	sms.GetFormatedSCST( sendTime );
	body = sms.m_sms;

	return TRUE;
}

BOOL CMoblieXDoc::DelSMS(long id)
{
CStrFilter buf;
	
	if( id < 0 || id > m_receivedSMSHeadArray.GetUpperBound() )
	{
		return FALSE;
	}
	buf = m_receivedSMSHeadArray[id];
	buf.Separate( ' ' );
	if( buf.m_reRight.IsEmpty() )
	{//没有分离到所需参数
		return FALSE;
	}
	buf = buf.m_reRight;
	buf.Separate( ',' );
	if( buf.m_reLeft.IsEmpty() )
	{//没有分离到所需参数
		return FALSE;
	}
int i = atoi( buf.m_reLeft );
	if( i <= 0 )
	{//没有分离到所需参数
		return FALSE;
	}
	buf.Format( "AT+CMGD=%d\r", i );
	SendCommandStr( buf, CW_DEL_SMS );//当前模式设为删除短信

	m_receivedSMSHeadArray.RemoveAt( id );
	m_receivedSMSOStrArray.RemoveAt( id );
	
	return TRUE;
}

BOOL CMoblieXDoc::SendSMS(const char * sca, const char *callNo, const char *body)
{
CSMS sms;
CString oSMS;
CString sBuf;

	sms.m_callNo = callNo;
	sms.m_sms = body;
	sms.m_sca = sca;

	if( !sms.Encode( oSMS ) )
	{
		return FALSE;
	}

	sBuf.Format( "AT+CMGS=%d\r", sms.m_pduLen );
	SendCommandStr( sBuf, CW_SEND_SMS_HEAD );//当前模式设为发短信头
	sBuf = "正在向<";
	sBuf += callNo;
	sBuf += ">发送...";
	SendCommandStr( oSMS + '\x01A', CW_SEND_SMS_BODY, sBuf );//当前模式设为发短信

	return TRUE;
}

BOOL CMoblieXDoc::AddSMS(const char * sca, const char *callNo, const char *body)
{
CSMS sms;
CString oSMS;
CString sBuf;

	sms.m_callNo = callNo;
	sms.m_sms = body;
	sms.m_sca = sca;

	if( !sms.Encode( oSMS ) )
	{
		return FALSE;
	}

	sBuf.Format( "AT+CMGW=%d\r", sms.m_pduLen );
	SendCommandStr( sBuf, CW_SEND_SMS_HEAD );//当前模式设为发短信头
	SendCommandStr( oSMS + '\x01A', CW_ADD_SMS, "正在添加短信..." );//当前模式设为添加短信

	return TRUE;
}

void CMoblieXDoc::OnLogReadToWnd() 
{
	m_logRead2Wnd = !m_logRead2Wnd;
}

void CMoblieXDoc::OnUpdateLogReadToWnd(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( m_logRead2Wnd );
}

void CMoblieXDoc::OnLogResToWnd() 
{
	m_logRes2Wnd = !m_logRes2Wnd;
}

void CMoblieXDoc::OnUpdateLogResToWnd(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( m_logRes2Wnd );
}

void CMoblieXDoc::OnLogWriteToWnd() 
{
	m_logWrite2Wnd = !m_logWrite2Wnd;
}

void CMoblieXDoc::OnUpdateLogWriteToWnd(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( m_logWrite2Wnd );
}

void CMoblieXDoc::AddLog(CStringArray &strArray)
{
	m_logArray.Append( strArray );
	::PostMessage( m_hMainWnd, WM_COMMAND, ID_LOG_OUTPUT, 0 );
}

void CMoblieXDoc::AddLog(const char *str)
{
	m_logArray.Add( str );
	::PostMessage( m_hMainWnd, WM_COMMAND, ID_LOG_OUTPUT, 0 );
}

void CMoblieXDoc::OnCommReadOk() 
{
	if( !ProcessRecievedStr() )
	{//未处理
		return;
	}

	if( IsLogRead2Wnd() && m_readStrArray.GetSize() > 0 )
	{//需要记录到终端窗口
		AddLog( m_readStrArray );
	}

	m_readStrArray.RemoveAll();
}

void CMoblieXDoc::OnTest() 
{
}

BOOL CMoblieXDoc::FindStrByHead(CStringArray &sa, const char *sHead, CString &reStr)
{
int i, size = sa.GetSize();
	for( i = 0; i < size; i++ )
	{
		if( sa[i].Find( sHead ) == 0 )
		{
			reStr = sa[i];
			return TRUE;
		}
	}
	return FALSE;
}

CPhoneBook & CMoblieXDoc::GetPhoneBook(int pbmID)
{
	switch( pbmID )
	{
	case PBM_ME:
		return m_phoneBookME;
	default:
		break;
	}
	return m_phoneBookSM;
}

void CMoblieXDoc::UpdateDlgPBSData()
{
	m_dlgPBSelect.m_pb.RemoveAll();
	m_dlgPBSelect.m_pb.Append( m_phoneBookME );
	m_dlgPBSelect.m_pb.Append( m_phoneBookSM );
	m_dlgPBSelect.DoFilter();
}


void CMoblieXDoc::OnPbPathSet() 
{
	m_dlgPBPath.DoModal();	
}

void CMoblieXDoc::OnCloseDocument() 
{
	OnCommClose();	
	CDocument::OnCloseDocument();
}

void CMoblieXDoc::OnSmsSaveAll() 
{
CFileDialog dlgFile( FALSE, "txt", "sms.txt" );
CStdioFile outFile;

	if( dlgFile.DoModal() != IDOK )
	{
		return;
	}

	if( !outFile.Open( dlgFile.GetPathName(), CFile::modeCreate | CFile::modeWrite ) )
	{
		AfxMessageBox( "无法打开文件" );
		return;
	}

long i, size;
CString sCallNo;
CString sSendTime;
CString sBody;

	size = GetReceivedSMSNum();
	for( i = 0; i < size; i++ )
	{
		if( GetReceivedSMS(i, sCallNo, sSendTime, sBody) )
		{
			outFile.WriteString( sCallNo + '\t' );
			if( m_dlgPBSelect.m_pb.No2Name( sCallNo, sCallNo ) )
			{
				outFile.WriteString( sCallNo );
			}
			outFile.WriteString( '\t' + sSendTime + '\t' );
			outFile.WriteString( sBody + '\n' );
		}
	}
	outFile.Close();
}

void CMoblieXDoc::OnUpdateSmsSaveAll(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( GetReceivedSMSNum() > 0 );	
}

⌨️ 快捷键说明

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