Существует много способов определения, в сети ли компьютер (имеется в виду не
сеть, в которой 220 вольт, а net, в данном случае Internet). Некоторые способы,
такие как пингование какого-нибудь IP'шника очень опасны, имхо, по нескольким
причинам. Во-первых, если человек не в сети, то высветиться табличка, что
"некто пытается соединиться с серваком таким-то, не хотите соединиться
(Да/нет)". Можно, конечно, пинговать сайт Microsoft'а и свалить все на вынды,
но надо ли это, если есть другие способы.
Правильность работы функции не гарантирую, но работать должно (много не тестил
эту функцию).
#include <windows.h>
#include <wininet.h>
#include <stdio.h>
#include <conio.h>
typedef BOOL (WINAPI* INETCHECKPROC) (LPDWORD lpdwFlags, DWORD dwReserved);
bool GetStatusConnect()
// возвращает 1, если комп подключен к интеренту, в противном случае - 0
{
bool bRetVal;
HINSTANCE hLib = NULL;
INETCHECKPROC pfnInternetGetConnectedState;
// грузим (в смысле загружаем) библиотеку wininet.dll
hLib = LoadLibrary("wininet.dll");
if (!hLib) // если не получилось загрузить библиотеку, тоreturn 0; // возвращаем 0// получаем адрес функции InternetGetConnectedState
pfnInternetGetConnectedState = (INETCHECKPROC)GetProcAddress(hLib, "InternetGetConnectedState");
// Если не удалось получить адрес функцииif(!pfnInternetGetConnectedState)
return false; // возвращаем 0
DWORD lpdwFlags;
// проверяем соединение
bRetVal = pfnInternetGetConnectedState(&lpdwFlags, 0) != 0;
FreeLibrary(hLib); // выгружаем библиотекуreturn bRetVal; // возвращаем статус подключения
}
void main(void)
{
printf(GetStatusConnect()?"Connected":"Disconnected"); // выводим статус соединения
printf("\r\nPress any key to continue"); // просим юзверя нажать "any key" на клавиатуре
while(!_getch()); // ждем нажатия кнопкиreturn; // выходим
}