Глюки 98-ых Виндов при использовании функции...

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
R@kot
Сообщения: 3
Зарегистрирован: 07 янв 2005, 02:43
Откуда: Питер

Ребят, вот какая проблема: в проге нужно проверить имеется ли в данный момент подключение к Internet. Как мне уже советовали, использую функцию InternetGetConnectedState.

У меня стоит XP и всё работает нормально. НО! Стал проверять на 98-ых Виндах, а там какой-то глюк: на компе вообще нет модема, а функция говорит, что подключение к Инету "присутствует" :(

Или же ещё на одном компе (тоже с 98-ыми) - там модем хоть и стоит, но к Инету не подключался, а функция утверждает обратное. :(


Кстати, при проверке на 2000-ом всё работает правильно.

Подскажите, как можно исправить это в 98-ых или может быть есть ещё какой-нибудь способ проверить на подключение?

Пожалуйста, кому не лень! :)
udaleator
Сообщения: 9
Зарегистрирован: 05 янв 2005, 10:35
Контактная информация:

1) IsNetworkAlive
2) RasEnumConnections
3) или попытаться вызвать gethostbyname
R@kot
Сообщения: 3
Зарегистрирован: 07 янв 2005, 02:43
Откуда: Питер

udaleator , спасибо, конечно:lol: , но как с помощью этих функций в Builder'е проверить подключение? :cry: Если не сложно, хоть какой-нибудь примерчик! :)
udaleator
Сообщения: 9
Зарегистрирован: 05 янв 2005, 10:35
Контактная информация:

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;
}
Не знаю как это будет компилироваться под билдером.
R@kot
Сообщения: 3
Зарегистрирован: 07 янв 2005, 02:43
Откуда: Питер

udaleator, спасибо тебе огромное! :lol: С некоторыми изменениями всё компилится и в Builder'е! А, главное, работает! Правда, проверял пока только на XP. Проверю на 98 - напишу. БИГ СЭНКС! :wink:
Ответить