BOOLEAN ConnectionAvailable(VOID) { INetworkListManager* networkListManager = NULL; if (SUCCEEDED(CoCreateInstance( &CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, &networkListManager ))) { VARIANT_BOOL isConnected = VARIANT_FALSE; VARIANT_BOOL isConnectedInternet = VARIANT_FALSE; // Query the relevant properties. INetworkListManager_get_IsConnected(networkListManager, &isConnected); INetworkListManager_get_IsConnectedToInternet(networkListManager, &isConnectedInternet); // Cleanup the INetworkListManger COM objects. INetworkListManager_Release(networkListManager); // Check if Windows is connected to a network and it's connected to the internet. if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE) return TRUE; // We're not connected to anything } return FALSE; }
BOOLEAN ConnectionAvailable(VOID) { if (WindowsVersion > WINDOWS_VISTA) { INetworkListManager* pNetworkListManager = NULL; // Create an instance of the INetworkListManger COM object. if (SUCCEEDED(CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, &pNetworkListManager))) { VARIANT_BOOL isConnected = VARIANT_FALSE; VARIANT_BOOL isConnectedInternet = VARIANT_FALSE; // Query the relevant properties. INetworkListManager_get_IsConnected(pNetworkListManager, &isConnected); INetworkListManager_get_IsConnectedToInternet(pNetworkListManager, &isConnectedInternet); // Cleanup the INetworkListManger COM objects. INetworkListManager_Release(pNetworkListManager); // Check if Windows is connected to a network and it's connected to the internet. if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE) return TRUE; // We're not connected to anything //return FALSE; } } typedef BOOL(WINAPI *_InternetGetConnectedState)( __out PULONG lpdwFlags, __reserved ULONG dwReserved ); BOOLEAN isSuccess = FALSE; ULONG wininetState = 0; _InternetGetConnectedState InternetGetConnectedState_I = NULL; HMODULE inetHandle = NULL; __try { if (!(inetHandle = LoadLibrary(L"wininet.dll"))) __leave; InternetGetConnectedState_I = (_InternetGetConnectedState)GetProcAddress(inetHandle, "InternetGetConnectedState"); if (!InternetGetConnectedState_I) __leave; if (InternetGetConnectedState_I(&wininetState, 0)) isSuccess = TRUE; } __finally { if (inetHandle) { FreeLibrary(inetHandle); } } return isSuccess; }
static BOOL ConnectionAvailable( VOID ) { if (WindowsVersion > WINDOWS_XP) { INetworkListManager *pNetworkListManager; // Create an instance of the INetworkListManger COM object. if (SUCCEEDED(CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, &pNetworkListManager))) { VARIANT_BOOL isConnected = VARIANT_FALSE; VARIANT_BOOL isConnectedInternet = VARIANT_FALSE; // Query the relevant properties. INetworkListManager_get_IsConnected(pNetworkListManager, &isConnected); INetworkListManager_get_IsConnectedToInternet(pNetworkListManager, &isConnectedInternet); // Cleanup the INetworkListManger COM object. INetworkListManager_Release(pNetworkListManager); pNetworkListManager = NULL; // Check if Windows is connected to a network and it's connected to the internet. if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE) { // We're online and connected to the internet. return TRUE; } // We're not connected to anything. return FALSE; } // If we reached here, we were unable to init the INetworkListManager, fall back to InternetGetConnectedState. goto NOT_SUPPORTED; } else NOT_SUPPORTED: { DWORD dwType; if (InternetGetConnectedState(&dwType, 0)) { return TRUE; } else { LogEvent(NULL, PhFormatString(L"Updater: (ConnectionAvailable) InternetGetConnectedState failed to detect an active Internet connection (%d)", GetLastError())); } //if (!InternetCheckConnection(NULL, FLAG_ICC_FORCE_CONNECTION, 0)) //{ // LogEvent(PhFormatString(L"Updater: (ConnectionAvailable) InternetCheckConnection failed connection to Sourceforge.net (%d)", GetLastError())); // return FALSE; //} } return FALSE; }
static void test_INetworkListManager( void ) { IConnectionPointContainer *cpc; INetworkListManager *mgr; INetworkCostManager *cost_mgr; NLM_CONNECTIVITY connectivity; VARIANT_BOOL connected; HRESULT hr; hr = CoCreateInstance( &CLSID_NetworkListManager, NULL, CLSCTX_INPROC_SERVER, &IID_INetworkListManager, (void **)&mgr ); if (hr != S_OK) { win_skip( "can't create instance of NetworkListManager\n" ); return; } connectivity = 0xdeadbeef; hr = INetworkListManager_GetConnectivity( mgr, &connectivity ); ok( hr == S_OK, "got %08x\n", hr ); ok( connectivity != 0xdeadbeef, "unchanged value\n" ); trace( "GetConnectivity: %08x\n", connectivity ); connected = 0xdead; hr = INetworkListManager_IsConnected( mgr, &connected ); ok( hr == S_OK, "got %08x\n", hr ); ok( connected == VARIANT_TRUE || connected == VARIANT_FALSE, "expected boolean value\n" ); connected = 0xdead; hr = INetworkListManager_IsConnectedToInternet( mgr, &connected ); ok( hr == S_OK, "got %08x\n", hr ); ok( connected == VARIANT_TRUE || connected == VARIANT_FALSE, "expected boolean value\n" ); /* INetworkCostManager is supported starting Win8 */ hr = INetworkListManager_QueryInterface( mgr, &IID_INetworkCostManager, (void **)&cost_mgr ); ok( hr == S_OK || broken(hr == E_NOINTERFACE), "got %08x\n", hr ); if (hr == S_OK) { DWORD cost; hr = INetworkCostManager_GetCost( cost_mgr, NULL, NULL ); ok( hr == E_POINTER, "got %08x\n", hr ); cost = 0xdeadbeef; hr = INetworkCostManager_GetCost( cost_mgr, &cost, NULL ); ok( hr == S_OK, "got %08x\n", hr ); ok( cost != 0xdeadbeef, "cost not set\n" ); INetworkCostManager_Release( cost_mgr ); } hr = INetworkListManager_QueryInterface( mgr, &IID_IConnectionPointContainer, (void**)&cpc ); ok( hr == S_OK, "got %08x\n", hr ); IConnectionPointContainer_Release( cpc ); INetworkListManager_Release( mgr ); }
BOOL ConnectionAvailable( VOID ) { BOOLEAN isSuccess = FALSE; HMODULE libraryHandle = NULL; INetworkListManager* networkListPtr = NULL; __try { if (WindowsVersion < WINDOWS_VISTA) { ULONG inetState = 0; _InternetGetConnectedState inetGetConnectedState_I = NULL; if (!(libraryHandle = LoadLibrary(L"wininet.dll"))) __leave; if (!(inetGetConnectedState_I = (_InternetGetConnectedState)GetProcAddress(libraryHandle, "InternetGetConnectedState"))) __leave; if (inetGetConnectedState_I(&inetState, 0)) isSuccess = TRUE; } else { VARIANT_BOOL isConnected = VARIANT_FALSE; VARIANT_BOOL isConnectedInternet = VARIANT_FALSE; // Create an instance of the INetworkListManger COM object. if (FAILED(CoCreateInstance(&CLSID_NetworkListManager, NULL, CLSCTX_ALL, &IID_INetworkListManager, &networkListPtr))) __leave; // Query the relevant properties. INetworkListManager_get_IsConnected(networkListPtr, &isConnected); INetworkListManager_get_IsConnectedToInternet(networkListPtr, &isConnectedInternet); // Check if Windows is connected to a network and it's connected to the internet. if (isConnected == VARIANT_TRUE && isConnectedInternet == VARIANT_TRUE) isSuccess = TRUE; } } __finally { if (libraryHandle) FreeLibrary(libraryHandle); if (networkListPtr) INetworkListManager_Release(networkListPtr); } return isSuccess; }