note : InternetGetConnectedState
发布日期:2021-06-30 22:04:16 浏览次数:2 分类:技术文章

本文共 4113 字,大约阅读时间需要 13 分钟。

/// @file   srcNetTips.cpp/// @brief  判断本机是否联网///         如果有需要联网后,才会进行的任务. 判断是否能上网,再干活,效率高/// @ref    http://www.cnblogs.com/mikespook/archive/2004/06/25/73784.html#include "stdafx.h"#include 
#include
#include
///< for std::wstring/// for InternetGetConnectedState#include
#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(){ BOOL bRc = FALSE; DWORD dwFlags = 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();}

转载地址:https://lostspeed.blog.csdn.net/article/details/16371091 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:测试网络连接状态的批处理
下一篇:demo : 用宏简化大型switch/case - LoadStringW

发表评论

最新留言

不错!
[***.144.177.141]2024年04月23日 00时52分04秒