데이터 베이스 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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

iPhone에서 Google 지도를 기본 지도로 설정하는 방법 iPhone에서 Google 지도를 기본 지도로 설정하는 방법 Apr 17, 2024 pm 07:34 PM

iPhone의 기본 지도는 Apple의 독점 위치 정보 제공업체인 지도입니다. 지도가 점점 좋아지고 있지만 미국 이외의 지역에서는 잘 작동하지 않습니다. Google 지도와 비교하면 아무것도 제공할 수 없습니다. 이 기사에서는 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단계 – 검색 결과 아래에 “시계”가 표시되면 길게 누르고

Furmark에 대해 어떻게 생각하시나요? - Furmark는 어떻게 자격을 갖춘 것으로 간주됩니까? Furmark에 대해 어떻게 생각하시나요? - Furmark는 어떻게 자격을 갖춘 것으로 간주됩니까? Mar 19, 2024 am 09:25 AM

Furmark에 대해 어떻게 생각하시나요? 1. 메인 인터페이스에서 "실행 모드"와 "디스플레이 모드"를 설정하고 "테스트 모드"도 조정한 후 "시작" 버튼을 클릭하세요. 2. 잠시 기다리면 그래픽 카드의 다양한 매개변수를 포함한 테스트 결과가 표시됩니다. Furmark는 어떻게 자격을 갖추었나요? 1. 푸르마크 베이킹 머신을 사용하여 약 30분 동안 결과를 확인합니다. 기본적으로 85도 정도, 최고 온도는 87도, 실내 온도는 19도입니다. 대형 섀시에 섀시 팬 포트 5개 전면 2개, 상단 2개, 후면 1개로 구성됐으나 팬은 1개만 설치됐다. 모든 액세서리는 오버클럭되지 않습니다. 2. 정상적인 상황에서 그래픽 카드의 정상 온도는 "30-85℃" 사이여야 합니다. 3. 주변온도가 너무 높은 여름에도 정상온도는 "50~85℃"

작업 스케줄러를 사용하여 웹사이트를 여는 방법 작업 스케줄러를 사용하여 웹사이트를 여는 방법 Oct 02, 2023 pm 11:13 PM

매일 같은 시간에 같은 웹사이트를 자주 방문하시나요? 이로 인해 여러 브라우저 탭을 열어두고 일상적인 작업을 수행하는 동안 브라우저가 복잡해지는 데 많은 시간을 소비하게 될 수 있습니다. 그렇다면 브라우저를 수동으로 실행할 필요 없이 열어보는 것은 어떨까요? 매우 간단하며 아래와 같이 타사 앱을 다운로드할 필요가 없습니다. 웹사이트를 열려면 작업 스케줄러를 어떻게 설정하나요? 키를 누르고 검색 상자에 작업 스케줄러를 입력한 다음 열기를 클릭합니다. Windows 오른쪽 사이드바에서 기본 작업 생성 옵션을 클릭합니다. 이름 필드에 열려는 웹사이트의 이름을 입력하고 다음을 클릭하세요. 그런 다음 트리거에서 시간 빈도를 클릭하고 다음을 클릭합니다. 이벤트를 반복할 기간을 선택하고 다음을 클릭하세요. 활성화 선택

iPhone에서 카메라 및 마이크에 대한 접근을 허용할 수 없습니다 iPhone에서 카메라 및 마이크에 대한 접근을 허용할 수 없습니다 Apr 23, 2024 am 11:13 AM

앱을 사용하려고 할 때 "카메라 및 마이크에 대한 접근을 허용할 수 없습니다"라는 메시지가 표시됩니까? 일반적으로 필요에 따라 특정 사람에게 카메라 및 마이크 권한을 부여합니다. 단, 권한을 거부할 경우 카메라와 마이크가 작동하지 않으며 대신 이런 오류 메시지가 표시됩니다. 이 문제를 해결하는 것은 매우 기본적이며 1~2분 안에 완료할 수 있습니다. 수정 1 – 카메라, 마이크 권한 제공 설정에서 직접 필요한 카메라 및 마이크 권한을 제공할 수 있습니다. 1단계 - 설정 탭으로 이동합니다. 2단계 – 개인 정보 보호 및 보안 패널을 엽니다. 3단계 - 거기에서 "카메라" 권한을 켭니다. 4단계 - 내부에서 휴대폰 카메라에 대한 권한을 요청한 앱 목록을 찾을 수 있습니다. 5단계 - 지정된 앱의 "카메라"를 엽니다.

새로운 Xianxia 모험에 참여하세요! 'Zhu Xian 2' 'Wuwei Test' 사전 다운로드가 가능합니다 새로운 Xianxia 모험에 참여하세요! 'Zhu Xian 2' 'Wuwei Test' 사전 다운로드가 가능합니다 Apr 22, 2024 pm 12:50 PM

새로운 판타지 요정 MMORPG '주선2'의 '무작용 테스트'가 4월 23일 출시된다. 원작으로부터 수천 년이 지난 주선 대륙에서는 어떤 새로운 요정 모험 이야기가 펼쳐질 것인가? 육계선불세계, 불멸수련을 위한 전임 학원, 불멸수련의 자유로운 삶, 불멸세계의 온갖 즐거움이 불멸친구들이 직접 탐험하는 것을 기다리고 있습니다! 이제 'Wuwei 테스트' 사전 다운로드가 공개되었습니다. 요정 친구들은 공식 웹사이트에 접속하여 다운로드할 수 있습니다. 서버가 출시되기 전에는 게임 서버에 로그인할 수 없습니다. 사전 다운로드 및 설치 후에는 활성화 코드를 사용할 수 있습니다. 완성 됐습니다. "Zhu Xian 2" "Inaction Test" 개장 시간: 4월 23일 10:00 - 5월 6일 23:59 Zhu Xian의 정통 속편 "Zhu Xian 2"의 새로운 요정 모험 장은 "Zhu Xian" 소설을 기반으로 합니다. 원작의 세계관을 바탕으로 게임 배경이 설정되었습니다.

Microsoft는 Windows 10 및 11 PC에 HP Smart 앱을 자동으로 설치합니다. Microsoft는 Windows 10 및 11 PC에 HP Smart 앱을 자동으로 설치합니다. Nov 30, 2023 pm 11:25 PM

Windows 10 및 11에는 필요하지 않은 여러 앱이 함께 제공됩니다. 보고서에 따르면 HPSmart 앱이라는 앱이 블로트웨어 목록에 하나 더 추가되었습니다. WindowsLatest의 보고서에 따르면 HPSmart라는 새로운 앱이 Windows 10 노트북의 시작 메뉴에 추가된 것으로 나타났습니다. 그러나 여기서 끝나지 않았고, 작성자는 Windows 11에서 실행되는 가상 머신에도 애플리케이션이 자동으로 설치되었다는 사실을 발견했습니다. 이 상황에서 흥미로운 점은 HP 제품이 PC에 연결되지 않은 경우에도 앱이 자동으로 설치된다는 보고서가 있다는 것입니다. 일부 사용자는 Reddit에 유사한 문제가 발생했다고 보고했습니다.

See all articles