MFC檢測網路連線和ping IP地址
阿新 • • 發佈:2019-02-06
/****************************************************************** * 函式介紹:執行程式 * 輸入引數: * 輸出引數: * 返回值 : *******************************************************************/ DWORD CCommonFun::WinExecAndWait32(LPCTSTR lpszAppPath, LPCTSTR lpParameters, LPCTSTR lpszDirectory, DWORD dwMilliseconds, BOOL bIsWait, int nShow) { SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = NULL; ShExecInfo.lpFile = lpszAppPath; ShExecInfo.lpParameters = lpParameters; ShExecInfo.lpDirectory = lpszDirectory; ShExecInfo.nShow = nShow; //SW_SHOW ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); if ( ShExecInfo.hProcess == NULL) return 1; if ( !bIsWait ) return 0; if (WaitForSingleObject(ShExecInfo.hProcess, dwMilliseconds) == WAIT_TIMEOUT) { TerminateProcess(ShExecInfo.hProcess, 0); return 1; } DWORD dwExitCode; BOOL bOK = GetExitCodeProcess(ShExecInfo.hProcess, &dwExitCode); ASSERT(bOK); return dwExitCode; }
#include <Sensapi.h> #pragma comment(lib, "Sensapi.lib") BOOL CheckNetIsOK(const CString sUpdateIP) { //Judge Network is Connected int nCount = 1; do { DWORD dw; if( IsNetworkAlive(&dw)) { break; } else { Sleep(10000); CString sNetWorkConnect; sNetWorkConnect.Format("第%d次網路未成功連線, 10秒後重試", nCount); m_recvCtrl.SetWindowText(sNetWorkConnect); nCount++ ; } } while (nCount <4); if (nCount == 4) { m_recvCtrl.SetWindowText("網路連線失敗, 共檢測40秒"); return FALSE; } DWORD n = WinExecAndWait32(_T("ping.exe"), sUpdateIP + " -n 2"/*sCmdPara*/, NULL, 10000); if (n == 0) { return TRUE; } else { CString sNetWorkConnect; sNetWorkConnect.Format("網路連線正常, Ping:%s 失敗, 請檢測此IP對應的伺服器是否正常工作", sUpdateIP); m_recvCtrl.SetWindowText(sNetWorkConnect); return FALSE; } }