直接贴代码~~~~
int CCollectApp::CheckGPRSConnect(void)
{
RASCONN rcArray[100];
RASCONNSTATUS rStatus;
DWORD dwRet=0;
DWORD dw1 = sizeof(rcArray);
DWORD dw2;
ZeroMemory(rcArray, dw1);
rcArray[0].dwSize = sizeof(RASCONN);
dwRet = ::RasEnumConnections(rcArray, &dw1, &dw2);
// ERROR_BUFFER_TOO_SMALL
ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
rStatus.dwSize = sizeof(RASCONNSTATUS);
for (dw1 = 0; dw1 < dw2; dw1++)
{
dwRet = RasGetConnectStatus(rcArray[dw1].hrasconn, &rStatus);
if(dwRet!=0)
{
//::AfxMessageBox(_T("取系统信息出错"),MB_OK,0);
return 2;
}
if (RASCS_Connected == rStatus.rasconnstate)
{
//char *sss= "GZJMJC.GD";
if(strcmp(rcArray[dw1].szEntryName,m_strGPRSName.GetBuffer())==0)
{
m_hGPRScon = rcArray[dw1].hrasconn;
m_bGPRSCon = true;
return 1;
}
m_strGPRSName.ReleaseBuffer();
}
}
return 0;
}
bool CCollectApp::ConnectGPRS(void)
{
RASDIALPARAMS para;
ZeroMemory(¶,sizeof(RASDIALPARAMS));
para.dwSize = sizeof(RASDIALPARAMS);
strcpy(para.szEntryName,m_strGPRSName.GetBuffer()); //"GZJMJC.GD"
m_strGPRSName.ReleaseBuffer();
//para.szEntryName="GZJMJC.GD";
DWORD statu = ::RasDial(NULL,NULL,¶,0,OnGPRSConnect,&m_hGPRScon);
if(statu == 0)
{
DWORD n = 0;
while(!m_bGPRSCon)
{
n++;
Sleep(10);
if(n>15*100)
break;
DoMessageLoop();
}
}
if(m_bGPRSCon)
return true;
else
{
m_hGPRScon = NULL;
return false;
}
}
bool CCollectApp::ConnectGPRS(CTitleTipDlg *dlg)
{
RASDIALPARAMS para;
ZeroMemory(¶,sizeof(RASDIALPARAMS));
para.dwSize = sizeof(RASDIALPARAMS);
strcpy(para.szEntryName,m_strGPRSName.GetBuffer()); //"GZJMJC.GD"
m_strGPRSName.ReleaseBuffer();
//para.szEntryName="GZJMJC.GD";
DWORD statu = ::RasDial(NULL,NULL,¶,0,OnGPRSConnect,&m_hGPRScon);
if(statu == 0)
{
DWORD n = 0;
dlg->ShowPrg();
dlg->SetRange(15*100);
while(!m_bGPRSCon)
{
n++;
dlg->StepIt();
Sleep(10);
if(n>15*100 || gzproto->blCancel)
break;
DoMessageLoop();
}
}
if(gzproto->blCancel)
{
TransLog(_T("用户取消当前操作。"), NONLOG, theApp.strUsrName);
}
if(m_bGPRSCon)
return true;
else
{
::RasHangUp(m_hGPRScon);
m_hGPRScon = NULL;
return false;
}
}
void WINAPI OnGPRSConnect(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError)
{
if(dwError == 0)
{
switch(rasconnstate)
{
case RASCS_Connected:
{
theApp.m_bGPRSCon = true;
break;
}
}
}
}
bool CCollectApp::HangUpGPRSCon(void)
{
int l = CheckGPRSConnect();
if(l==1)
m_bGPRSCon = true;
else
m_bGPRSCon = false;
if(!m_bGPRSCon)
return true;
DWORD n = ::RasHangUp(m_hGPRScon);
if(n ==0)
{
while(1)
{
if(!CheckGPRSConnect())
break;
Sleep(10);
}
m_hGPRScon = NULL;
m_bGPRSCon = false;
return true;
}
else
return false;
}
bool CCollectApp::AutoConnectGPRS(CTitleTipDlg *dlg,CString tmpstr,CString tmpstr1)
{
CString tempTitle;
dlg->GetWindowText(tempTitle);
int nCheckCount = 0;
int n = CheckGPRSConnect();
if(n==2)
::AfxMessageBox(_T("取系统信息出错"),MB_OK,0);
else if(n == 0)
m_bGPRSCon = false;
else
m_bGPRSCon = true;
if(gzproto->blCancel)
return m_bGPRSCon;
CString tmpstr2;
if(!m_bGPRSCon)
{
tmpstr2 = _T("系统发现GPRS MODEM没有接入网络,正在接入......");
// dlg->GetDlgItem(IDCANCEL)->EnableWindow(false);
dlg->SetWindowText(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
if(!ConnectGPRS(dlg))
{
while(nCheckCount<3 && !gzproto->blCancel)
{
tmpstr2.Format("接入GPRS网络失败,进行第%d次重连!",nCheckCount+1);// = _T("无法建立GPRS连接,进行!");
dlg->SetWindowText(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
if(!ConnectGPRS(dlg))
{
if(!gzproto->blCancel)
{
tmpstr2.Format("第%d次重连GPRS网络失败!",nCheckCount+1);
TransLog(tmpstr2, NONLOG, strUsrName);
}
nCheckCount++;
}
else
{
tmpstr2 = _T("已成功将GPRS MODEM接入网络!");
if(!gzproto->blCancel)
{
dlg->SetWindowText(tmpstr2);
dlg->ShowMsg(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
}
Sleep(300);
dlg->SetWindowText(tempTitle);
// m_bGPSRCancle = false;
return true;
}
}
}
// m_bGPSRCancle = false;
dlg->GetDlgItem(IDCANCEL)->EnableWindow(true);
if(!m_bGPRSCon)
{
if(!gzproto->blCancel)
{
tmpstr2 = _T("无法建立GPRS连接!");
TransLog(tmpstr2, NONLOG, strUsrName);
}
dlg->SetWindowText(tempTitle);
return false;
}
else
{
tmpstr2 = _T("已成功建立GPRS连接!");
if(!gzproto->blCancel)
{
dlg->SetWindowText(tmpstr2);
dlg->ShowMsg(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
}
Sleep(300);
dlg->ShowMsg(tmpstr);
//TransLog(tmpstr1, JZQMODE, strUsrName);
dlg->SetWindowText(tempTitle);
return true;
}
}
else
{
dlg->SetWindowText(tempTitle);
return true;
}
}
bool CCollectApp::AutoConnectGPRS(CTitleTipDlg *dlg)
{
CString tempTitle;
dlg->GetWindowText(tempTitle);
int nCheckCount = 0;
int n = CheckGPRSConnect();
if(n==2)
::AfxMessageBox(_T("取系统信息出错"),MB_OK,0);
else if(n == 0)
m_bGPRSCon = false;
else
m_bGPRSCon = true;
if(gzproto->blCancel)
return m_bGPRSCon;
CString tmpstr2;
if(!m_bGPRSCon)
{
tmpstr2 = _T("系统发现GPRS MODEM没有接入网络,正在接入......");
// dlg->GetDlgItem(IDCANCEL)->EnableWindow(false);
dlg->SetWindowText(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
if(!ConnectGPRS(dlg))
{
while(nCheckCount<3 && !gzproto->blCancel)
{
tmpstr2.Format("接入GPRS网络失败,进行第%d次重连!",nCheckCount+1);// = _T("无法建立GPRS连接,进行!");
dlg->SetWindowText(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
if(!ConnectGPRS(dlg))
{
if(!gzproto->blCancel)
{
tmpstr2.Format("第%d次重连GPRS网络失败!",nCheckCount+1);
TransLog(tmpstr2, NONLOG, strUsrName);
}
nCheckCount++;
}
else
{
tmpstr2 = _T("已成功将GPRS MODEM接入网络!");
if(!gzproto->blCancel)
{
dlg->SetWindowText(tmpstr2);
dlg->ShowMsg(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
}
Sleep(300);
dlg->SetWindowText(tempTitle);
dlg->ShowMsg(tempTitle);
// m_bGPSRCancle = false;
return true;
}
}
}
// m_bGPSRCancle = false;
// dlg->GetDlgItem(IDCANCEL)->EnableWindow(true);
if(!m_bGPRSCon)
{
if(!gzproto->blCancel)
{
tmpstr2 = _T("将GPRS MODEM接入网络失败!");
TransLog(tmpstr2, NONLOG, strUsrName);
}
dlg->SetWindowText(tempTitle);
return false;
}
else
{
tmpstr2 = _T("已成功将GPRS MODEM接入网络!");
if(!gzproto->blCancel)
{
dlg->SetWindowText(tmpstr2);
dlg->ShowMsg(tmpstr2);
TransLog(tmpstr2, NONLOG, strUsrName);
}
Sleep(300);
dlg->SetWindowText(tempTitle);
dlg->ShowMsg(tempTitle);
return true;
}
}
else
{
dlg->SetWindowText(tempTitle);
dlg->ShowMsg(tempTitle);
return true;
}
}
bool CCollectApp::AutoConnectGPRS()
{
int nCheckCount = 0;
int n = CheckGPRSConnect();
if(n==2)
::AfxMessageBox(_T("取系统信息出错"),MB_OK,0);
else if(n == 0)
m_bGPRSCon = false;
else
m_bGPRSCon = true;
CString tmpstr2;
if(!m_bGPRSCon)
{
tmpstr2 = _T("没有建立GPRS连接,正在建立连接......");
CCollectDlg *dlg = (CCollectDlg *)(((CCollectApp *)AfxGetApp())->m_pMainWnd);
if(dlg->m_bTopWinCreat)
dlg->dlgTitleTip->DestroyWindow();
if(dlg->dlgTitleTip !=NULL)
{
delete (dlg->dlgTitleTip);
dlg->dlgTitleTip = NULL;
}
dlg->dlgTitleTip = new CTitleTipDlg();
dlg->dlgTitleTip->Create(tmpstr2);
dlg->dlgTitleTip->GetDlgItem(IDCANCEL)->EnableWindow(false);
dlg->dlgTitleTip->SetWindowText(tmpstr2);
TransLog(tmpstr2, JZQMODE, strUsrName);
if(!ConnectGPRS(dlg->dlgTitleTip))
{
while(nCheckCount<3)
{
tmpstr2.Format("建立GPRS连接失败,进行第%d次重连!",nCheckCount+1);// = _T("无法建立GPRS连接,进行!");
dlg->dlgTitleTip->SetWindowText(tmpstr2);
TransLog(tmpstr2, JZQMODE, strUsrName);
if(!ConnectGPRS())
{
tmpstr2.Format("第%d次重新连接失败!",nCheckCount+1);
nCheckCount++;
TransLog(tmpstr2, JZQMODE, strUsrName);
}
else
{
tmpstr2 = _T("已成功建立GPRS连接!");
dlg->SetWindowText(tmpstr2);
dlg->dlgTitleTip->ShowMsg(tmpstr2);
TransLog(tmpstr2, JZQMODE, strUsrName);
Sleep(300);
return true;
}
}
}
dlg->dlgTitleTip->GetDlgItem(IDCANCEL)->EnableWindow(true);
if(!m_bGPRSCon)
{
tmpstr2 = _T("无法建立GPRS连接!");
TransLog(tmpstr2, JZQMODE, strUsrName);
if(dlg->m_bTopWinCreat)
dlg->dlgTitleTip->DestroyWindow();
if(dlg->dlgTitleTip != NULL)
{
delete (dlg->dlgTitleTip);
dlg->dlgTitleTip = NULL;
}
return false;
}
else
{
tmpstr2 = _T("已成功建立GPRS连接!");
dlg->dlgTitleTip->ShowMsg(tmpstr2);
Sleep(300);
TransLog(tmpstr2, JZQMODE, strUsrName);
if(dlg->m_bTopWinCreat)
dlg->dlgTitleTip->DestroyWindow();
if(dlg->dlgTitleTip != NULL)
{
delete (dlg->dlgTitleTip);
dlg->dlgTitleTip = NULL;
}
return true;
}
}
else
return true;
}
void CCollectApp::CloseConnect(void)
{
CCollectDlg *dlg = (CCollectDlg *)m_pMainWnd;
dlg->EndIdel();
if(m_ctrlmodem->IsOpen() && theApp.gzproto->uiCommType == COMM_MODEM)
{
m_ctrlmodem->uiModemState = CmdState;
m_ctrlmodem->HangUp();
gzproto->uiReceiveBufferProcPointer = 0;
gzproto->uiReceiveBufferFillPointer = 0;
}
if(psocket->IsOpen())
{
gzproto->CloseCommRoutine();
psocket->StopComm();
psocket->CloseComm();
}
dlg->blConnectingFlag = FALSE;
Sleep(300);
}