Страница 1 из 1
Глюки 98-ых Виндов при использовании функции...
Добавлено: 08 янв 2005, 01:40
R@kot
Ребят, вот какая проблема: в проге нужно проверить имеется ли в данный момент подключение к Internet. Как мне уже советовали, использую функцию InternetGetConnectedState.
У меня стоит XP и всё работает нормально. НО! Стал проверять на 98-ых Виндах, а там какой-то глюк: на компе вообще нет модема, а функция говорит, что подключение к Инету "присутствует"
Или же ещё на одном компе (тоже с 98-ыми) - там модем хоть и стоит, но к Инету не подключался, а функция утверждает обратное.
Кстати, при проверке на 2000-ом всё работает правильно.
Подскажите, как можно исправить это в 98-ых или может быть есть ещё какой-нибудь способ проверить на подключение?
Пожалуйста, кому не лень!

Добавлено: 08 янв 2005, 10:41
udaleator
1) IsNetworkAlive
2) RasEnumConnections
3) или попытаться вызвать gethostbyname
Добавлено: 09 янв 2005, 02:06
R@kot
udaleator , спасибо, конечно:lol: , но как с помощью этих функций в Builder'е проверить подключение?

Если не сложно, хоть какой-нибудь примерчик!

Добавлено: 09 янв 2005, 10:03
udaleator
RasEnumConnections
Код: Выделить всё
#include "StdAfx.h"
#include <windows.h>
#include <stdio.h>
#include <ras.h>
#include <raserror.h>
#pragma comment(lib, "rasapi32.lib")
int main()
{
DWORD dwCb = sizeof(RASCONN);
DWORD dwErr = ERROR_SUCCESS;
DWORD dwRetries = 5;
DWORD dwConnections = 0;
RASCONN* lpRasConn = NULL;
//
// Loop through in case the information from RAS changes between calls.
//
while (dwRetries--)
{
//
// If the memory is allocated, free it.
//
if (NULL != lpRasConn)
{
HeapFree(GetProcessHeap(), 0, lpRasConn);
lpRasConn = NULL;
}
//
// Allocate the size needed for the RAS structure.
//
lpRasConn = (RASCONN*)HeapAlloc(GetProcessHeap(), 0, dwCb);
if (NULL == lpRasConn)
{
dwErr = ERROR_NOT_ENOUGH_MEMORY;
break;
}
//
// Set the structure size for version checking purposes.
//
lpRasConn->dwSize = sizeof(RASCONN);
//
// Call the RAS API then exit the loop if we are successful or an unknown
// error occurs.
//
dwErr = RasEnumConnections(
lpRasConn,
&dwCb,
&dwConnections);
if (ERROR_BUFFER_TOO_SMALL != dwErr)
{
break;
}
}
//
// In the success case, print the names of the connections.
//
if (ERROR_SUCCESS == dwErr)
{
DWORD i;
printf("The following RAS connections are currently active\n\n");
for (i = 0; i < dwConnections; i++)
{
printf("%s\n", lpRasConn[i].szEntryName);
}
}
else
{
printf("RasEnumConnections failed: Error = %d\n", dwErr);
}
//
// Free the memory if necessary.
//
if (NULL != lpRasConn)
{
HeapFree(GetProcessHeap(), 0, lpRasConn);
lpRasConn = NULL;
}
return 0;
}
IsNetworkAlive
Код: Выделить всё
#include "StdAfx.h"
#include <windows.h>
#include <stdio.h>
#include <sensapi.h>
#pragma comment(lib, "sensapi.lib")
int main()
{
DWORD dwFlag = NETWORK_ALIVE_WAN;
if ( IsNetworkAlive(&dwFlag) )
printf("Internet - true :)\n");
else
printf("Internet - false :(\n");
return 0;
}
gethostbyname
Код: Выделить всё
#include "StdAfx.h"
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main()
{
WSADATA sData;
struct hostent *hp;
WSAStartup(MAKEWORD(1, 1), &sData);
hp = gethostbyname("http://www.yandex.ru");
if ( hp )
printf("Internet - true :)\n");
else
printf("Internet - false :(\n");
return 0;
}
Не знаю как это будет компилироваться под билдером.
Добавлено: 10 янв 2005, 07:43
R@kot
udaleator, спасибо тебе огромное! :lol: С некоторыми изменениями всё компилится и в Builder'е! А, главное, работает! Правда, проверял пока только на XP. Проверю на 98 - напишу. БИГ СЭНКС!
