两个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>

ace-guard client exe是腾讯代理游戏的反作弊程序,是ewido的守护进程,保护“ewido.exe”进程不被恶意软件关闭;使用它可以检测游戏用户是否有开挂行为,可自动进行封号处理。

要自动化任务和管理多个系统,任务计划软件是您武器库中的宝贵工具,尤其是对于系统管理员而言。Windows任务计划程序完美地完成了这项工作,但最近许多人报告说操作员拒绝了请求错误。该问题存在于操作系统的所有迭代中,即使已经广泛报告和涵盖,也没有有效的解决方案。继续阅读以找到真正对其他人有用的内容!操作员或管理员拒绝了任务计划程序0x800710e0中的请求是什么?任务计划程序允许在没有用户输入的情况下自动执行各种任务和应用程序。您可以使用它来安排和组织特定应用程序、配置自动通知、帮助传递消息等。它

Windows的操作随着每个版本而变得越来越好,具有诱人的功能来改善用户体验。用户希望在Windows10和11上探索的一项功能是能够按面部对照片进行排序。此功能允许您通过面部识别对朋友和家人的照片进行分组。听起来很有趣,对吧?继续阅读如何了解如何利用该功能。我可以在Windows上按面孔对照片进行分组吗?是的,您可以使用“照片”应用在Windows10和11上按人脸对图片进行分组。但是,此功能在照片应用程序版本上不可用。此外,您可以使用“人脉”选项卡将这些照片链接到联系人。因此,使用此功能可以

“microsoft visual c++”是可以卸载的,但是不建议卸载;“microsoft visua”这些都是一些微软的组件,里面包括一些“C++”标准库、原始数据库等相关信息,很多软件尤其是游戏中需要“microsoft visual c++”中的环境组件,如果缺少了“C++”标准库的支持,可能会造成软件的无法运行。

在iOS中,当您将iPhone从纵向旋转到横向时,许多App会显示不同的视图。根据应用程序及其使用方式,这种行为并不总是可取的,这就是Apple在“控制中心”中包含方向锁定选项的原因。但是,某些应用程序在禁用方向锁定的情况下工作得更有用-想想YouTube或照片应用程序,将设备旋转到横向可以提供更好的全屏观看体验。如果您倾向于保持锁定状态,则必须在每次打开这些类型的应用程序时在“控制中心”中禁用它以获得全屏体验。然后,当您关闭应用程序时,您必须记住重新打开方向锁定,这并不理想。幸运的是,您可以创

Microsoft应用商店是内置存储库,用户可以在其中下载、更新和卸载适用于Windows操作系统的应用。可悲的是,许多用户不知道如何在MicrosoftStore上卸载应用程序。因此,本文将带您了解如何快速从Microsoft商店卸载应用程序。或者,如果您的Windows11PC上缺少Microsoft应用商店应用程序,我们提供了有关下载和安装应用商店应用程序的详细指南。是否可以直接从Microsoft应用商店卸载应用?否,Microsoft应用商店不提供直接从平台卸载应用的选项。您只能通过平

给定一个方阵M[r][c],其中“r”是一定数量的行,“c”是列,使得r=c,我们必须检查“M”是否是单位矩阵。恒等矩阵恒等矩阵也称为大小为nxn方阵的单位矩阵,其中对角元素的整数值为1,非对角元素的整数值为0就像下面给定的示例-$$I1=\begin{bmatrix}1\end{bmatrix},\I2=\begin{bmatrix}1&0\0&1\end{bmatrix},\I3=\begin{bmatrix}1&0&0\0&1&0\0&

卸载程序的文件名是“uninstall.exe”或“uninst.exe”,是用以协助使用者将软件自电脑中删除的一种电脑软件。使用方法:1、在文件资源管理器中挖掘并导航到应用程序EXE文件所在的文件路径;2、通过文件路径打开应用程序的安装目录,找到“uninstall.exe”文件;3、双击卸载文件“uninstall.exe”即可开始程序删除过程。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Dreamweaver Mac版
시각적 웹 개발 도구
