note : InternetGetConnectedState
来源:互联网 发布:视频cms系统版权 编辑:程序博客网 时间:2024/05/22 15:03
/// @file srcNetTips.cpp/// @brief 判断本机是否联网/// 如果有需要联网后,才会进行的任务. 判断是否能上网,再干活,效率高/// @ref http://www.cnblogs.com/mikespook/archive/2004/06/25/73784.html#include "stdafx.h"#include <windows.h>#include <tchar.h>#include <string> ///< for std::wstring/// for InternetGetConnectedState#include <Wininet.h>#pragma comment(lib, "Wininet.lib")// #define SWITCH_DEBUG ///< 调试开关#ifdef SWITCH_DEBUG#define DebugPrint _tprintf#else#define DebugPrint #endif/// @fn fn_IsInternetConnected/// @brief 判断本机是否联网BOOL fn_IsInternetConnected();WCHAR * b2WCHAR(BOOL bIn);int _tmain(int argc, _TCHAR* argv[]){ BOOL bNetOK = FALSE; size_t nTryCnt = 1000; ///< 1000次 size_t nTmSleep = 1000 * 3; ///< 每次睡3秒 while (nTryCnt-- > 0) { ::Sleep(nTmSleep); bNetOK = fn_IsInternetConnected(); _tprintf(L"bNetOK = %s\r\n", bNetOK ? L"TRUE" : L"FALSE"); } getwchar();return 0;}BOOL fn_IsInternetConnected(){ BOOLbRc = FALSE; DWORDdwFlags = 0; BOOL bIs_INTERNET_CONNECTION_CONFIGURED = FALSE; BOOL bIs_INTERNET_CONNECTION_LAN = FALSE; BOOL bIs_INTERNET_CONNECTION_MODEM = FALSE; BOOL bIs_INTERNET_CONNECTION_MODEM_BUSY = FALSE; BOOL bIs_INTERNET_CONNECTION_OFFLINE = FALSE; BOOL bIs_INTERNET_CONNECTION_PROXY = FALSE; BOOL bIs_INTERNET_RAS_INSTALLED = FALSE; bRc = InternetGetConnectedState(&dwFlags, 0); DebugPrint(L"dwFlags = 0x%X\r\n", dwFlags); bIs_INTERNET_CONNECTION_CONFIGURED = (dwFlags & INTERNET_CONNECTION_CONFIGURED) > 0; bIs_INTERNET_CONNECTION_LAN = (dwFlags & INTERNET_CONNECTION_LAN) > 0; bIs_INTERNET_CONNECTION_MODEM = (dwFlags & INTERNET_CONNECTION_MODEM) > 0; bIs_INTERNET_CONNECTION_MODEM_BUSY = (dwFlags & INTERNET_CONNECTION_MODEM_BUSY) > 0; bIs_INTERNET_CONNECTION_OFFLINE = (dwFlags & INTERNET_CONNECTION_OFFLINE) > 0; bIs_INTERNET_CONNECTION_PROXY = (dwFlags & INTERNET_CONNECTION_PROXY) > 0; bIs_INTERNET_RAS_INSTALLED = (dwFlags & INTERNET_RAS_INSTALLED) > 0; DebugPrint(L"\tbIs_INTERNET_CONNECTION_CONFIGURED = %s\r\n", b2WCHAR(bIs_INTERNET_CONNECTION_CONFIGURED)); DebugPrint(L"\tbIs_INTERNET_CONNECTION_LAN = %s\r\n", b2WCHAR(bIs_INTERNET_CONNECTION_LAN)); /// 用猫拨号上网 DebugPrint(L"\tbIs_INTERNET_CONNECTION_MODEM = %s\r\n", b2WCHAR(bIs_INTERNET_CONNECTION_MODEM)); DebugPrint(L"\tbIs_INTERNET_CONNECTION_MODEM_BUSY = %s\r\n", b2WCHAR(bIs_INTERNET_CONNECTION_MODEM_BUSY)); DebugPrint(L"\tbIs_INTERNET_CONNECTION_OFFLINE = %s\r\n", b2WCHAR(bIs_INTERNET_CONNECTION_OFFLINE)); DebugPrint(L"\tbIs_INTERNET_CONNECTION_PROXY = %s\r\n", b2WCHAR(bIs_INTERNET_CONNECTION_PROXY)); /// 远程访问功能是否已经安装 DebugPrint(L"\tbIs_INTERNET_RAS_INSTALLED = %s\r\n", b2WCHAR(bIs_INTERNET_RAS_INSTALLED)); return ( bRc && bIs_INTERNET_RAS_INSTALLED && bIs_INTERNET_CONNECTION_CONFIGURED); /** /// 能访问网页时 dwFlags = 0x51 bIs_INTERNET_CONNECTION_CONFIGURED = TRUE bIs_INTERNET_CONNECTION_LAN = FALSE bIs_INTERNET_CONNECTION_MODEM = TRUE bIs_INTERNET_CONNECTION_MODEM_BUSY = FALSE bIs_INTERNET_CONNECTION_OFFLINE = FALSE bIs_INTERNET_CONNECTION_PROXY = FALSE bIs_INTERNET_RAS_INSTALLED = TRUE /// 不能访问网页时 /// case 将宽带链接用软件断掉 dwFlags = 0x12 bIs_INTERNET_CONNECTION_CONFIGURED = FALSE bIs_INTERNET_CONNECTION_LAN = TRUE bIs_INTERNET_CONNECTION_MODEM = FALSE bIs_INTERNET_CONNECTION_MODEM_BUSY = FALSE bIs_INTERNET_CONNECTION_OFFLINE = FALSE bIs_INTERNET_CONNECTION_PROXY = FALSE bIs_INTERNET_RAS_INSTALLED = TRUE /// 不能访问网页时 /// case 禁掉本地链接 或 拔掉本地计算机端的网线 dwFlags = 0x10 bIs_INTERNET_CONNECTION_CONFIGURED = FALSE bIs_INTERNET_CONNECTION_LAN = FALSE bIs_INTERNET_CONNECTION_MODEM = FALSE bIs_INTERNET_CONNECTION_MODEM_BUSY = FALSE bIs_INTERNET_CONNECTION_OFFLINE = FALSE bIs_INTERNET_CONNECTION_PROXY = FALSE bIs_INTERNET_RAS_INSTALLED = TRUE */}WCHAR * b2WCHAR(BOOL bIn){ /// @todo 多线程时,换用TLS的变量 static std::wstring strRc; strRc = bIn ? L"TRUE" : L"FALSE"; return (WCHAR *)strRc.c_str();}