首页 数据库 mysql教程 evc小项目杂记(2)

evc小项目杂记(2)

Jun 07, 2016 pm 03:31 PM
测试 程序

两个wince小程序,Gprs功分器测试,和开关机拨号测试,都已经顺利完工,现在有空回头学一下之前一知半解的细节问题。 1. 在cedit中打印log -- //在edittext中打印信息voidCSimTestDlg::ShowMessage(CStringstrMsg){ CEdit*pMsgInfo = (CEdit*)GetDlgItem(IDC


两个wince小程序,Gprs功分器测试,和开关机拨号测试,都已经顺利完工,现在有空回头学一下之前一知半解的细节问题。

1. 在cedit中打印log

-- 

//在edittext中打印信息
voidCSimTestDlg::ShowMessage(CStringstrMsg)
{
      CEdit*pMsgInfo = (CEdit*)GetDlgItem(IDC_EDIT_TIPS);
      pMsgInfo->SetSel(pMsgInfo->GetWindowTextLength(),pMsgInfo->GetWindowTextLength());     //光标移动到当前所显示文本的末尾
      pMsgInfo->ReplaceSel(strMsg);   //在光标末尾插入字符串
          pMsgInfo->ReplaceSel(_T("\r\n"));
}
登录后复制


2.写log文件

--

//自己写的,解决了中文乱码和末尾有小方框的问题,可能还有隐患没发现
//写log记录到\ResidentFlash\开关机测试log.txt
int CSimTestDlg::writelog(CString logStr){
 
      CFilemyFile;
      char*pData = new char[500];
      TCHAR*pStrLog = new TCHAR[500];
 
      CStringstr_time = _T("");
      CStringstr_result = _T("");
      CStringstrFile = _T("");
 
       SYSTEMTIMEsys;     
      GetLocalTime(&sys );
 
     
      str_time.Format(_T("%4d/%02d/%02d%02d:%02d:%02d"),sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond);          
      str_result= str_time + logStr;
     
      intfileLength = str_result.GetLength();                 
      wcscpy(pStrLog,(LPCTSTR)str_result);
      intcpylen =MyWideCharToMultiByte_test(pStrLog,pData,fileLength*2);//获得unicode转Ansi之后的长度,说明http://blog.csdn.net/sky1415/article/details/4137872
 
       strFile= _T("\\ResidentFlash\\开关机测试log.txt");
      myFile.Open(strFile,CFile::modeCreate | CFile::modeWrite |CFile::typeBinary|CFile::modeNoTruncate);//modeNoTruncate表示为续写方式
     
      myFile.SeekToEnd();
      myFile.Write(pData,cpylen);
      myFile.Flush();
      myFile.Close();
 
      delete[]pData;     
      delete[]pStrLog;
      return0;
}
intCGPRS_SIGNAL_TESTDlg::MyWideCharToMultiByte_test(WCHAR*wchars, CHAR* schars,int scharsLen)
{
      memset(schars,0, scharsLen);
      CStringm_snd = wchars;
      intlen = m_snd.GetLength();
      CStringtmpstr(m_snd); //复制要发送的字符串
      intmultibytelen = WideCharToMultiByte(//计算从Unicode转换到Ansi后需要的字节数
              CP_ACP,//根据ANSI codepage转换
              WC_COMPOSITECHECK|WC_DEFAULTCHAR, //转换出错用缺省字符代替
              (LPCWSTR)tmpstr.GetBuffer(len),//要转换的字符串地址
              len,//要转换的个数
              0,//转换后字符串放置的地址
              0,//最多转换字符的个数,为0表示返回转换Unicode后需要多少个字节
              0,//缺省的字符:"\0"
             0//缺省的设置
      );
      WideCharToMultiByte(//转换Unicode到Ansi
              CP_ACP,WC_COMPOSITECHECK |WC_DEFAULTCHAR, (LPCWSTR)tmpstr.GetBuffer(len), len,(char*)schars, //转换到缓冲区中
              scharsLen,//最多个字节
              0,0);
      returnmultibytelen;
}
 
登录后复制

 

3. 调用系统程序并打开窗口

-- CreateProcess:http://baike.baidu.com/link?url=aLC_mEQNRDbEOf_wfXOxeH1Q2Q-XpIr9mXQDZKnHLXmPq-1niVJhYH05eTtCEnnE

#define   FILE_PLAY_EXEC     _T("\\ResidentFlash\\player\\PLAYER.EXE")
#define   FILE_PLAY_DATA      _T("\\ResidentFlash\\PandaNormal.avi")
      PROCESS_INFORMATIONinfo;
      CreateProcess(FILE_PLAY_EXEC,FILE_PLAY_DATA, NULL, NULL, FALSE,CREATE_NEW_CONSOLE, NULL, NULL, NULL,&info);
 
登录后复制

4. 定时器设置

--

//.cpp注册定时器
BEGIN_MESSAGE_MAP(CGPRS_SIGNAL_TESTDlg,CDialog)
       //{{AFX_MSG_MAP(CGPRS_SIGNAL_TESTDlg)
      ON_BN_CLICKED(IDC_BUTTON_START,OnButtonStart)
      ON_BN_CLICKED(IDC_BUTTON_STOP,OnButtonStop)
      ON_WM_TIMER()//定时器设置
      ON_MESSAGE(WM_GPRSRECV,OnGPRSRecv)//接收消息
      //}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
//.cpp实现OnTimer,对话框定时消失
voidCGPRS_SIGNAL_TESTDlg::OnTimer(UINT_PTRnIDEvent)
{
      //TODO: Add your control notification handler code here
 
      HWNDhWnd = ::FindWindow(NULL, _T("提示"));   //查找标题为B的窗口,返回窗口句柄
 
      if(hWnd)   //如果窗口句柄存在
       {
              ::SendMessage(hWnd,WM_CLOSE,NULL, NULL);//可行
              //DestroyWindow();   //关闭整个窗口,不行
              //keybd_event(13,0,0,0);//模拟回车键按下,有啪的一声
             //keybd_event(VK_RETURN,0,0,0); //模拟回车键按下,有啪的一声
      }
      KillTimer(nIDEvent);   //关闭定时器
      CDialog::OnTimer(nIDEvent);
}
//.h文件中声明
        afx_msg void OnTimer(UINT_PTRnIDEvent);//接收消息
登录后复制

5.设置控件背景色

--

//.h文件中,注册函数
afx_msg HBRUSH OnCtlColor(CDC* pDC,CWnd*pWnd, UINT nCtlColor);
 
//cpp中重载消息响应函数
BEGIN_MESSAGE_MAP(CLytNandTestDlg, CDialog)
//{{AFX_MSG_MAP(CLytNandTestDlg)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
 
//cpp文件中实现方法,根据id设置不同颜色
/************************************************************************/
/*               UI显示                                                 */
/************************************************************************/
HBRUSH CLytNandTestDlg::OnCtlColor(CDC*pDC,CWnd* pWnd, UINT nCtlColor)
{
      HBRUSHhbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
     
      //Are we painting theIDC_MYSTATIC control? We can use
      //CWnd::GetDlgCtrlID() to perform the most efficient test.
      if(pWnd->GetDlgCtrlID() == IDC_SHOW)
      {
            
             RETAILMSG(1,(_T("OnCtlColor\n")));
              //Set the text color to red.
              pDC->SetTextColor(RGB(255,255,255));
            
              m_brush=   ::CreateSolidBrush( RGB(0,0,255));
            
              //Set the background mode fortext to transparent
              //so background will show thru.
              pDC->SetBkMode(TRANSPARENT);
            
              //Return handle to our CBrushobject.
              hbr= m_brush;
      }
     
     
      returnhbr;
}
登录后复制


6.注册表读写

-- 调用示例

//修改注册表,自动开机
reg->WriteRegMultiString(HKEY_LOCAL_MACHINE,_T("init\\"),L"Launch80",_T("\\ResidentFlash\\OurAPP\\开关机测试v1.3.exe"));         
reg->DeleteRegValue(HKEY_LOCAL_MACHINE,_T("init\\"),L"Launch80");
登录后复制

源码

/***************************************************************************
$Id$
Copyright (C) Centerm Information Co.,Ltd.All rights reserved.
 
Model Name:
Reg.cpp
 
Description:
注册表测试
 
Environment:
WinCE5.0、6.0
 
History:
<author>      <time>     <version>      <desc>
Wangxuehong 2009-2-10      2.00         创建
***************************************************************************/
 
#include "StdAfx.h"
#include "Reg.h"
 
// 向注册表写入字符串
void CReg::WriteRegString(HKEY hKey,TCHAR*Key, TCHAR *Name, TCHAR *Value, DWORD size)
{
      HKEYhk;
      LONGreCode;
      DWORDdwDisposition;
 
      reCode=RegCreateKeyEx(hKey,Key,0,TEXT("S"),REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hk,&dwDisposition);
      if(reCode== ERROR_SUCCESS)
      {
              RegSetValueEx( hk,Name,0, REG_SZ,(LPBYTE)Value, (size + 1)*2 );
              RegCloseKey(hk);
      }
}
 
// 向注册表写入字符串
void CReg::WriteRegStr(HKEY hKey,TCHAR*Key, TCHAR *Name, TCHAR *Value)
{
      HKEYhk;
      LONGreCode;
      DWORDdwDisposition;
 
      reCode=RegCreateKeyEx(hKey,Key,0,TEXT("S"),REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hk,&dwDisposition);
      if(reCode== ERROR_SUCCESS)
      {
              RegSetValueEx(hk,Name,0, REG_SZ,(LPBYTE)Value, (lstrlen(Value)+1)*sizeof(TCHAR));
             RegCloseKey(hk);
      }
}
 
// 向注册表写入多字符串
void CReg::WriteRegMultiString(HKEYhKey,TCHAR *Key, TCHAR *Name, TCHAR *Value)
{
      HKEY    hk;
      LONG     reCode;
      DWORD dwDisposition;
      TCHAR   *pStr;
      WORD    Strl;
 
      pStr =     Value;     Strl    =     0;
      while(*pStr)
      {
              while(*pStr)
              {
                     pStr++;
                     Strl++;
              }
              pStr++;
              Strl++;
      }
      reCode=RegCreateKeyEx(hKey,Key,0,TEXT("S"),REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hk,&dwDisposition);
      if(reCode== ERROR_SUCCESS)
      {
              RegSetValueEx(hk,Name,0,REG_MULTI_SZ, (LPBYTE)Value, (Strl+1)*2);
              RegCloseKey(hk);
      }
}
 
// 向注册表写入二进制
void CReg::WriteRegBin(HKEY hKey,TCHAR*Key, TCHAR *Name, VOID *Value, DWORD size)
{
      HKEYhk;
      LONGreCode;
      DWORDdwDisposition;
 
      reCode=RegCreateKeyEx(hKey,Key,0,TEXT("S"),REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hk,&dwDisposition);
 
      if(reCode==ERROR_SUCCESS)
      {
              RegSetValueEx(hk,Name,0,REG_BINARY, (LPBYTE)Value, size*2);
              RegCloseKey(hk);
      }
}
 
// 向注册表写入INT
void CReg::WriteRegInt(HKEY hKey, TCHAR*Key,TCHAR *Name, DWORD Value)
{
      LONGreCode;
      HKEYhk;
      DWORDdwDisposition;
 
      reCode=RegCreateKeyEx(hKey,Key,0,TEXT("S"),REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
              NULL,&hk,&dwDisposition);
 
      if(reCode== ERROR_SUCCESS)
      {
             RegSetValueEx(hk,Name,0,REG_DWORD, (LPBYTE)&Value, 4);
              RegCloseKey(hk);
      }
}
 
// 向注册表写入DWORD
BOOL CReg::ReadRegDWord(HKEY hKey,TCHAR*Key, TCHAR *Name,DWORD *dwValue)
{
      HKEY    hk;
      DWORD data = 0;
      DWORD DataSize = sizeof(DWORD);
      DWORD dwType  = 0;
      LONG     reCode;
 
      reCode=RegOpenKeyEx(hKey,Key, 0, KEY_READ, &hk);
 
      if(reCode==  ERROR_SUCCESS) {
              reCode= RegQueryValueEx(hk, Name,NULL, &dwType, (BYTE*)&data,&DataSize);            
              RegCloseKey(hk);
              if(reCode==ERROR_SUCCESS)  *dwValue = data;
              elsereturn FALSE;
      }
      else  return FALSE;
 
      returnTRUE;
}
 
// 从注册表读取一个INT
DWORD CReg::ReadRegInt(HKEY hKey,TCHAR*Key, TCHAR *Name)
{
      HKEY    hk;
      DWORD data = 0;
      DWORD DataSize = sizeof(DWORD);
      DWORD dwType  = 0;
      LONG     reCode;
 
      reCode= RegOpenKeyEx(hKey, Key, 0, KEY_READ, &hk);
 
       if(reCode== ERROR_SUCCESS)
      {
              reCode= RegQueryValueEx(hk, Name,NULL, &dwType, (BYTE*)&data,&DataSize);
              RegCloseKey(hk);
      }
      else
              data= 0;  
      returndata;
}
 
// 从注册表读取字符串
DWORD CReg::ReadRegString(HKEY hKey,TCHAR*Key, TCHAR *Name, TCHAR* data)
{
      HKEYhk;
      LONGreCode;
      DWORDDataSize = 1024;
      DWORDdwType;
 
      reCode= RegOpenKeyEx(hKey,Key,0,KEY_READ,&hk);
 
      if(reCode== ERROR_SUCCESS)
       {
              reCode=RegQueryValueEx(hk,Name,NULL,&dwType,(BYTE*)data,&DataSize);
              if(dwType != REG_SZ &&dwType != REG_MULTI_SZ )
              {
                     DataSize= 0;
                     data[0]= 0;
              }
             RegCloseKey(hk );
              returnDataSize;
      }
      else
      {
              data[0]= 0;
              return0;
      }
}
 
// 从注册表读取二进制
DWORD CReg::ReadRegBin(HKEY hKey,TCHAR*Key, TCHAR *Name, TCHAR* data)
{
      HKEYhk;
      LONGreCode;
      DWORDDataSize = 1024;
      DWORDdwType;
 
      reCode= RegOpenKeyEx(hKey,Key,0,KEY_READ,&hk);
 
      if(reCode == ERROR_SUCCESS )
      {
              reCode=RegQueryValueEx(hk,Name,NULL,&dwType,(BYTE*)data,&DataSize);
             RegCloseKey(hk);
              returnDataSize;
      }
      else
      {
              data[0]= 0;
              return0;
      }
}
 
// 删除注册表内容
void CReg::DeleteRegValue(HKEYhKey,TCHAR*Key,TCHAR *Name)
{
      HKEYhk;
      LONGreCode;
 
       reCode= RegOpenKeyEx( hKey, Key, 0,KEY_ALL_ACCESS, &hk );
 
      if(reCode== ERROR_SUCCESS)
      {
              reCode= RegDeleteValue(hk,Name);
              RegCloseKey(hk);
      }
}
 
// 复制注册表内容
BOOL CReg::CopyReg(HKEY hSKey, TCHAR*SKey,TCHAR *SName,HKEY hDKey, TCHAR *DKey, TCHAR *DName)
{
      BOOLret = FALSE;
      HKEYshk, dhk;
      BYTEdata[1024];
      DWORDDataSize = 1024;
      DWORDdwType, dwDisposition;
 
      if(RegOpenKeyEx(hSKey, SKey, 0, KEY_READ, &shk) == ERROR_SUCCESS)
      {
             if(RegCreateKeyEx(hDKey,DKey,0,TEXT("S"),REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
                    NULL,&dhk,&dwDisposition)== ERROR_SUCCESS)
              {
                    if(RegQueryValueEx(shk,SName,NULL,&dwType,data,&DataSize)==ERROR_SUCCESS)
                     {
                           if(RegSetValueEx(dhk,DName,0,dwType,data,DataSize) == ERROR_SUCCESS)
                            {
                                   ret=TRUE;                             
                            }
                     }   
                     RegCloseKey(dhk);
              }
              RegCloseKey(shk);
      }
      returnret;
}
 
 
//设置NumLock状态
void CReg::SetNumLockStatus(BOOL NumLockOn)
{
      SHORTKeyStatus;                            
      KeyStatus= GetKeyState(VK_NUMLOCK);
      if(KeyStatus&& 0x01)//检查状态为开
      {
              if(!NumLockOn)
              {
                    keybd_event(VK_NUMLOCK,(BYTE)0xe045,0,0);
                     keybd_event(VK_NUMLOCK,(BYTE)0xe045,KEYEVENTF_KEYUP,0);
              }
      }
      else//检查状态为关
      {
              if(NumLockOn)
              {
                    keybd_event(VK_NUMLOCK,(BYTE)0xe045,0,0);
                     keybd_event(VK_NUMLOCK,(BYTE)0xe045,KEYEVENTF_KEYUP,0);
              }
      }                                             
}
 
//设置NumLock状态
void CReg::SetNumLockStatusFromReg()
{
      BOOLnumlockStatus =ReadRegInt(HKEY_LOCAL_MACHINE,TEXT("SoftWare\\Start"),TEXT("NumLockOn"));
      SetNumLockStatus(numlockStatus );
}
 
/*
*************************************************
*Desc: 保存注册表
*Para:
*Return:
*Update Record:
*************************************************
*/
typedef DWORD (*pSaveRegData)(HWND hwnd);
BOOL CReg::SaveReg()
{
#ifndef HIVE_BASED
      HINSTANCE  hstbRegLib=NULL;
      pSaveRegDatadllSaveRegData;
 
      hstbRegLib= LoadLibrary(TEXT("SSReg.dll"));
 
      if( hstbRegLib == NULL )
      {
              returnFALSE;
      }
 
      dllSaveRegData= (pSaveRegData) GetProcAddress( hstbRegLib,TEXT("SaveRegData") );
      if( dllSaveRegData == NULL )
      {
              returnFALSE;
      }
      else
      {
              dllSaveRegData(NULL );
      }
 
      FreeLibrary(hstbRegLib );
#else
      DWORDdwRet = 0;
      if(ERROR_SUCCESS == RegFlushKey( HKEY_CURRENT_USER ) )
      {
             //RETAILMSG(DEBUG_BY_AHZIT,(L"RegFlushKey [HKEY_CURRENT_USER]successed.\r\n"));
      }
      else
      {
              //RETAILMSG(DEBUG_BY_AHZIT,(L"RegFlushKey[HKEY_CURRENT_USER] failed.\r\n"));     
              returnfalse;
      }
      dwRet= RegFlushKey( HKEY_LOCAL_MACHINE );
      if(ERROR_SUCCESS != dwRet )
      {
              //RETAILMSG(DEBUG_BY_AHZIT,(L"RegFlushKey[HKEY_LOCAL_MACHINE] failed, errorcode:[%ld].\r\n", dwRet));
              returnfalse;
      }
      else
      {
             //RETAILMSG(DEBUG_BY_AHZIT,(L"RegFlushKey [HKEY_LOCAL_MACHINE]successed.\r\n"));    
      }
#endif
      returnTRUE;
}
</desc></version></time></author>
登录后复制

/***************************************************************************
$Id$
Copyright (C) Centerm Information Co.,Ltd.All rights reserved.
 
Model Name:
Reg.h
 
Description:
注册表测试
 
Environment:
WinCE5.0、6.0
 
History:
<author>      <time>     <version>      <desc>
Wangxuehong 2009-2-10      2.00         创建
***************************************************************************/
 
#pragma once
 
class CReg
{
public:
      voidWriteRegString(HKEY hKey, TCHAR *Key, TCHAR *Name, TCHAR *Value,DWORD size);
      voidWriteRegStr(HKEY hKey, TCHAR *Key, TCHAR *Name, TCHAR *Value);
      voidWriteRegMultiString(HKEY hKey, TCHAR *Key, TCHAR *Name, TCHAR*Value);
      voidWriteRegBin(HKEY hKey, TCHAR *Key, TCHAR *Name, VOID *Value, DWORDsize);
      voidWriteRegInt(HKEY hKey, TCHAR *Key, TCHAR *Name, DWORD Value);
      BOOLReadRegDWord(HKEY hKey, TCHAR *Key, TCHAR *Name,DWORD *dwValue);
      DWORDReadRegInt(HKEY hKey, TCHAR *Key, TCHAR *Name);
      DWORDReadRegString(HKEY hKey, TCHAR *Key, TCHAR *Name, TCHAR* data);
      DWORDReadRegBin(HKEY hKey, TCHAR *Key, TCHAR *Name, TCHAR* data);
      voidDeleteRegValue(HKEY hKey,TCHAR *Key,TCHAR *Name);
      BOOLCopyReg(HKEY hSKey, TCHAR *SKey, TCHAR *SName,HKEY hDKey, TCHAR*DKey, TCHAR*DName);
 
      voidSetNumLockStatus(BOOL NumLockOn);
      voidSetNumLockStatusFromReg();
      BOOLSaveReg();
};
</desc></version></time></author>
登录后复制


 

7. 将系统时间转化为CString, 查询文件是否存在,得到当前绝对路径

--

//系统时间转化为字符串
CString Systime2CString(SYSTEMTIME m_time){
 
   TCHARszDateTime[100] = {0};
 
  _stprintf(szDateTime, _T("%04d/%02d/%02d%02d:%02d:%02d"),m_time.wYear,m_time.wMonth,
              m_time.wDay,m_time.wHour,m_time.wMinute, m_time.wSecond);
  CString str = szDateTime;
      returnstr;
}
//文件是否存在
BOOL IsFileExist(LPTSTR lpFilePath) 
{  
      WIN32_FIND_DATAm_fd;
      if(FindFirstFile(lpFilePath ,&m_fd) ==INVALID_HANDLE_VALUE )
              returnFALSE;
      returnTRUE;
}
 
 
/*
//获得当前绝对路径
void GetCurPath(WCHAR* strFilePath)
{
    
   int i = 0;
   int sLen = 0;
   sLen = GetModuleFileName(NULL,strFilePath,260);
   for(i=sLen;i!=0;i--)
    {
      if(strFilePath[i]==WCHAR('\\'))
       {
          break;
       }
       strFilePath[i]= WCHAR('\0');
    }
}
登录后复制


8.关机

--

//关机挂起
void CSimTestDlg::halt(){
      inttestCnt  =mprofile->GetPrivateProfileInt(div,ID_testcnt, 0, iniFilePath);
      mprofile->WritePrivateProfileInt(div,ID_testcnt, testCnt+1,iniFilePath);
      Sleep(300);
      SetSystemPowerState(NULL,POWER_STATE_OFF, POWER_FORCE);
}
登录后复制

9.ras拨号

//获取ppp网络状态
BOOL CSimTestDlg::IsConnect()
{
  if(NULL != hRasConn)
   {
      RASCONNSTATUS rasConStatus;
      rasConStatus.dwSize = sizeof(RASCONNSTATUS);
      RasGetConnectStatus(hRasConn,&rasConStatus);
            
      if(RASCS_Connected == rasConStatus.rasconnstate)
      {
          return TRUE;
      }
   }
  return FALSE;
}
 
 
//移除已经拨上去的ras
void CSimTestDlg::RemoveConnect(){
     
      RASCONNentries[25];
      DWORDbufsize=0;
      DWORDnumEntries=0;
      bufsize=25*sizeof(RASCONN);
      entries[0].dwSize=sizeof(RASCONN);
      RASCONNSTATUSstatus;
      status.dwSize=sizeof(RASCONNSTATUS);
      if(RasEnumConnections(entries,&bufsize,&numEntries)==0)
       {
              for(DWORDi=0;i<numentries if while retailmsg for ras disconnect break dword winapi pppdtread pdata csimtestdlg dworddwlast dworddwcurrent dwinterval="5000;" intwaitcount="0;" cstringlog='_T("");' cstringlog_whyfail='_T("");' intdialfailreason="0;" pdlg->reDialCnt= 0;
      DWORDstate_wait_for_event;     //是否已经拨号失败即“断开连接”
      inttestCnt =mprofile->GetPrivateProfileInt(div, ID_testcnt, 0, iniFilePath);
 
      while(shouldEndTest==FALSE&& pDlg->reDialCnt m_test_state=STATE_TESTING_DAIL;//正在拨号的提示
 
              //获得当前系统时间
              dwLast= GetTickCount();
              pDlg->RemoveConnect();          
     
             while(pDlg->IsConnect()&&shouldEndTest==FALSE)
              {
                    if(pDlg->hRasConn!=NULL)
                     {
                           RETAILMSG(1,(_T("退出1\r\n")));
                           RasHangUp(pDlg->hRasConn);         
                     }          
                    Sleep(100);//100MS
                    dwCurrent=::GetTickCount();
                    if(dwCurrent-dwLast>=dwInterval)
                     { 
                           pDlg->SetDlgItemText(IDC_STATUS,_T("5s还没退出重启模块.....等待7S"));//ui
                           pDlg->m_gpio=CreateFile(_T("GPI1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
 
                            if(pDlg->m_gpio!= INVALID_HANDLE_VALUE ) {
 
                                  DeviceIoControl(pDlg->m_gpio,IOCTL_CDMA_OFF,NULL,NULL,NULL,NULL,NULL,NULL);
                                  if(myDelay(2000)==FALSE)
                                   {
                                         DialFailReason= -1;
                                          gotoDialFail;
                                   }
                                  DeviceIoControl(pDlg->m_gpio,IOCTL_CDMA_ON,NULL,NULL,NULL,NULL,NULL,NULL);
                                  if(myDelay(7000)==FALSE)
                                   {
                                         DialFailReason= -1;
                                         gotoDialFail;
                                   }
                                  CloseHandle(pDlg->m_gpio);
                                   pDlg->m_gpio=INVALID_HANDLE_VALUE;
                                  pDlg->SetDlgItemText(IDC_STATUS,_T("重启成功....."));//ui
                            }
                   
                     }
 
              }
 
              if(shouldEndTest==TRUE)
              {
                     gotoDialSuccOrAllFailExit;
              }
 
 
              //开始拨号   
              DWORDret;
              waitcount=0;
              RASDIALPARAMSrasDialParams;
              memset(&rasDialParams, 0,sizeof( RASDIALPARAMS ) );
              rasDialParams.dwSize=sizeof(RASDIALPARAMS);
             _tcscpy(rasDialParams.szEntryName,_T("我的连接"));
             ret=RasDial(NULL,NULL,&rasDialParams,0xFFFFFFFF,pDlg->GetSafeHwnd(),&pDlg->hRasConn);
 
              if(ret!=0)
              {
                    pDlg->SetDlgItemText(IDC_STATUS,_T("本次拨号建立失败"));
                    pDlg->m_test_state=STATE_DAIL_FAIL;
                     DialFailReason= -2;
                     gotoDialFail;
              }   
 
      //等待ppp连接
              while(waitcountIsConnect())
                     {   
                            //只要连接成功则认为PPP正常      
                            pDlg->m_test_state=STATE_DAIL_SUCC;
                           gotoDialSuccOrAllFailExit;
                     }else{
                            //如果已经监测到ras处在断开状态,直接退出等待
                           state_wait_for_event= WaitForSingleObject(pDlg->hEvent_exitWaitPPP,1000);
                           if(state_wait_for_event==WAIT_OBJECT_0){
                                  DialFailReason= -5;
                                  gotoDialFail;                           
                            }
                     }
 
              }
 
              if(waitcount>=60){
                    pDlg->SetDlgItemText(IDC_STATUS,_T("等待ppp连接超时"));
                     DialFailReason= -3;
              }elseif(shouldEndTest==TRUE){
                     pDlg->SetDlgItemText(IDC_STATUS,_T("用户取消本次测试"));
                     DialFailReason= -4;
              }   
              gotoDialFail;
 
 
      //拨号失败,重试
      DialFail:
             pDlg->m_test_state=STATE_DAIL_FAIL;
              {
                     inttestCnt1  =mprofile->GetPrivateProfileInt(div,ID_dialFailCnt, 0, iniFilePath);
                    mprofile->WritePrivateProfileInt(div,ID_dialFailCnt, testCnt1+1,iniFilePath);
                   
                     switch(DialFailReason){
                     case-1:
                            log_whyfail=_T("软件退出\r\n");
                            break;
                     case-2:
                            log_whyfail=_T("RasDial失败\r\n");
                            break;
                     case-3:
                            log_whyfail=_T("等待ppp连接超时\r\n");
                            break;
                     case-4:
                            log_whyfail=_T("用户取消本次测试\r\n");
                     case-5:
                            log_whyfail= _T("连接已断开\r\n");
                            break;
                     }
                     if(pDlg->reDialCnt==0){
                           log.Format(_T("第[ %d ]次开机,拨号失败原因:")+log_whyfail,(testCnt));
                     }else{
                           log.Format(_T("重拨( %d ),拨号失败原因:")+log_whyfail,pDlg->reDialCnt);
                     }                 
                     pDlg->writelog(log);
                     pDlg->reDialCnt++;
              }
 
 
      }//while
 
//拨号成功,或者重试次数用完
DialSuccOrAllFailExit:
 
             pDlg->m_bt_start.EnableWindow(FALSE);
//           pDlg->m_bt_stop.EnableWindow(TRUE);
             pDlg->m_bt_exit.EnableWindow(FALSE);
            
              //拨号成功退出
              if(pDlg->m_test_state==STATE_DAIL_SUCC){
                     if(pDlg->reDialCnt==0){
                           log.Format(_T("第[ %d ]次开机,拨号成功\r\n"),testCnt);
                     }else{
                           log.Format(_T("第[ %d ]次开机,重拨次数[ %d]\r\n"), testCnt,pDlg->reDialCnt);
                     }
                     pDlg->writelog(log);
                     return0;
              }
              //用完重试次数退出
             elseif(pDlg->reDialCnt>=10){
                     log.Format(_T("第[ %d ]次开机,重拨次数[ %d ]\r\n"),testCnt,pDlg->reDialCnt);
                     pDlg->stopTest();
                     return-1;
              }
              //用户退出
              elseif(shouldEndTest==TRUE){
                     log=_T("用户主动退出测试!");
                     return-2;
              }                 
              //其他情况
              else
                     return-3;
}
 
LRESULTCSimTestDlg::OnRasDialEvent(WPARAMwp, LPARAM lp)
{
      RASCONNSTATErasState=(RASCONNSTATE)wp;
      switch(rasState)
       {
      caseRASCS_OpenPort:
             SetDlgItemText(IDC_STATUS,_T("打开端口......"));
              break;
      caseRASCS_PortOpened:
             SetDlgItemText(IDC_STATUS,_T("端口已打开."));
              break;
      caseRASCS_ConnectDevice:
             SetDlgItemText(IDC_STATUS,_T("连接设备......"));
              break;
      caseRASCS_DeviceConnected:
             SetDlgItemText(IDC_STATUS,_T("设备已连接."));
              break;
      caseRASCS_Authenticate:
              SetDlgItemText(IDC_STATUS,_T("验证用户及密码......"));
              break;
      caseRASCS_Authenticated:
             SetDlgItemText(IDC_STATUS,_T("通过."));
              break;
      caseRASCS_Connected:
             SetDlgItemText(IDC_STATUS,_T("已连接."));
 
              break;
      caseRASCS_Disconnected:
             SetDlgItemText(IDC_STATUS,_T("连接已断开."));
 
              //??
              //SetEvent(hEvent_exitWaitPPP);
              //hRasConn=NULL;
             //m_bt_exit.EnableWindow(TRUE);   
 
              break;
       default:
              returnTRUE;
      }
      returnTRUE;
}
</numentries>
登录后复制




本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1666
14
CakePHP 教程
1425
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
如何在iPhone中使Google地图成为默认地图 如何在iPhone中使Google地图成为默认地图 Apr 17, 2024 pm 07:34 PM

iPhone上的默认地图是Apple专有的地理位置提供商“地图”。尽管地图越来越好,但它在美国以外的地区运行不佳。与谷歌地图相比,它没有什么可提供的。在本文中,我们讨论了使用Google地图成为iPhone上的默认地图的可行性步骤。如何在iPhone中使Google地图成为默认地图将Google地图设置为手机上的默认地图应用程序比您想象的要容易。请按照以下步骤操作–先决条件步骤–您必须在手机上安装Gmail。步骤1–打开AppStore。步骤2–搜索“Gmail”。步骤3–点击Gmail应用旁

如何通过C++编写一个简单的倒计时程序? 如何通过C++编写一个简单的倒计时程序? Nov 03, 2023 pm 01:39 PM

C++是一种广泛使用的编程语言,在编写倒计时程序方面非常方便和实用。倒计时程序是一种常见的应用,它能为我们提供非常精确的时间计算和倒计时功能。本文将介绍如何使用C++编写一个简单的倒计时程序。实现倒计时程序的关键就是使用计时器来计算时间的流逝。在C++中,我们可以使用time.h头文件中的函数来实现计时器的功能。下面是一个简单的倒计时程序的代码

iPhone中缺少时钟应用程序:如何修复 iPhone中缺少时钟应用程序:如何修复 May 03, 2024 pm 09:19 PM

您的手机中缺少时钟应用程序吗?日期和时间仍将显示在iPhone的状态栏上。但是,如果没有时钟应用程序,您将无法使用世界时钟、秒表、闹钟等多项功能。因此,修复时钟应用程序的缺失应该是您的待办事项列表的首位。这些解决方案可以帮助您解决此问题。修复1–放置时钟应用程序如果您错误地从主屏幕中删除了时钟应用程序,您可以将时钟应用程序放回原位。步骤1–解锁iPhone并开始向左侧滑动,直到到达“应用程序库”页面。步骤2–接下来,在搜索框中搜索“时钟”。步骤3–当您在搜索结果中看到下方的“时钟”时,请按住它并

如何使用任务计划程序打开网站 如何使用任务计划程序打开网站 Oct 02, 2023 pm 11:13 PM

您是否每天在大约相同的时间频繁访问同一网站?这可能会导致花费大量时间打开多个浏览器选项卡,并在执行日常任务时使浏览器充满混乱。好吧,打开它而不必手动启动浏览器怎么样?这非常简单,不需要您下载任何第三方应用程序,如下所示。如何设置任务计划程序以打开网站?按键,在搜索框中键入任务计划程序,然后单击打开。Windows在右侧边栏上,单击“创建基本任务”选项。在名称字段中,输入要打开的网站的名称,然后单击下一步。接下来,在触发器下,单击时间频率并点击下一步。选择您希望活动重复多长时间并点击下一步。选择启

无法允许访问 iPhone 中的摄像头和麦克风 无法允许访问 iPhone 中的摄像头和麦克风 Apr 23, 2024 am 11:13 AM

您在尝试使用应用程序时是否收到“无法允许访问摄像头和麦克风”?通常,您可以在需要提供的基础上向特定对象授予摄像头和麦克风权限。但是,如果您拒绝权限,摄像头和麦克风将无法工作,而是显示此错误消息。解决这个问题是非常基本的,你可以在一两分钟内完成。修复1–提供相机、麦克风权限您可以直接在设置中提供必要的摄像头和麦克风权限。步骤1–转到“设置”选项卡。步骤2–打开“隐私与安全”面板。步骤3–在那里打开“相机”权限。步骤4–在里面,您将找到已请求手机相机权限的应用程序列表。步骤5–打开指定应用的“相机”

furmark怎么看?-furmark怎么算合格? furmark怎么看?-furmark怎么算合格? Mar 19, 2024 am 09:25 AM

furmark怎么看?1、在主界面中设置“运行模式”和“显示模式”,还能调整“测试模式”,点击“开始”按钮。2、等待片刻后,就会看到测试结果,包含了显卡各种参数。furmark怎么算合格?1、用furmark烤机,半个小时左右看一下结果,基本上在85度左右徘徊,峰值87度,室温19度。大号机箱,5个机箱风扇口,前置两个,上置两个,后置一个,不过只装了一个风扇。所有配件都没有超频。2、一般情况下,显卡的正常温度应该在“30-85℃”之间。3、就算是大夏天周围环境温度过高,正常温度也是“50-85℃

加入全新仙侠冒险!《诛仙2》'无为测试”预下载开启 加入全新仙侠冒险!《诛仙2》'无为测试”预下载开启 Apr 22, 2024 pm 12:50 PM

新派幻想仙侠MMORPG《诛仙2》“无为测试”即将于4月23日开启,在原著千年后的诛仙大陆,会发生怎样的全新仙侠冒险故事?六境仙侠大世界,全日制修仙学府,自由自在的修仙生活,仙界中的万般妙趣都在等待着仙友们亲自前往探索!“无为测试”预下载现已开启,仙友们可前往官网下载,开服前无法登录游戏服务器,激活码可在预下载安装完成后使用。《诛仙2》“无为测试”开放时间:4月23日10:00——5月6日23:59诛仙正统续作全新仙侠冒险篇章《诛仙2》以《诛仙》小说为蓝图,在继承原著世界观的基础上,将游戏背景设

国产FPS新王炸!《三角洲行动》大战场超出预期 国产FPS新王炸!《三角洲行动》大战场超出预期 Mar 07, 2024 am 09:37 AM

《三角洲行动》于今日(3月7日)将开启一场名为“代号:ZERO”的大规模PC测试。而在上周末,这款游戏在上海举办了一次线下快闪体验活动,17173也有幸受邀参与其中。此次测试距离上一次仅仅相隔四个多月,这不禁让我们好奇,在这么短的时间内,《三角洲行动》将会带来哪些新的亮点与惊喜?四个多月前,我已先行在线下品鉴会和首测版本中体验了《三角洲行动》。当时,游戏仅开放了“危险行动”这一模式。然而,《三角洲行动》在当时的表现已然令人瞩目。在各大厂商纷纷涌向手游市场的背景下,如此一款与国际水准相媲美的FPS

See all articles