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();}

原创粉丝点击