Ver Mensaje Individual
  #5  
Antiguo 25-09-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No explicaste en profundidad los motivos por los que quieres detectar una conexión por Wifi contra una LAN pero si entendí bien la pregunta.

1. La API InternetGetConnectedState te permite conocer si tienes conectado un cable de red a tu tarjeta, para ello basta que compruebes que en el Flag incluye el valor INTERNET_CONNECTION_LAN, una simple operación and binaria te lo dirá.

2. El hecho de que estés conectado o no por wifi o por cable, no te garantiza que sepas que dispones de conexión efectiva a Internet, es por eso que te dejé el enlace Saber si hay conexión de internet, donde describo una función: Webing que se conecta a una url real, como apuntaba mamcx, yo prefiero la conexión a google.com por su estabilidad, pero puede ser la misma de microsoft. Eso te garantiza que la conexión es real y funcionante. No hay ninguna API que te haga esa labor con seguridad. En ese enlace, si lo leiste, describo como usar la función a través de un proxy.

3. Pueden coexistir una LAN y una WAN, por lo que lo mejor es apagar la WAN para asegurarte que la conexión será por cable, es por eso que te dejé el enlace Jugando con las conexiones Wifi, en el muestro como escanear redes wifi, saber a las redes a las que el PC está conectado por esa vía y la intensidad de señal (las barritas que comentas) conectarte y desconectarte, si bien el código está escrito en delphi, te dejo su equivalente en C, pues intuyo que te interesa más. La función desconecta todos los interfeces wifi disponibles en el equipo:

Código:
BOOL WifiDisConect()
{
  HANDLE hClient;
  DWORD dwVersion;
  PWLAN_INTERFACE_INFO_LIST pInterfaceInfoList;
  PGUID pInterfaceGuid;

  BOOL Result = false;

  if(ERROR_SUCCESS == WlanOpenHandle(1, NULL, &dwVersion, &hClient)){
    if(ERROR_SUCCESS == WlanEnumInterfaces(hClient, NULL, &pInterfaceInfoList)){
      for(int i=0; i < pInterfaceInfoList->dwNumberOfItems; i++){
        pInterfaceGuid = &pInterfaceInfoList->InterfaceInfo[pInterfaceInfoList->dwIndex].InterfaceGuid;
        Result = (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));
      }
      WlanFreeMemory(pInterfaceInfoList);
    }
    WlanCloseHandle(hClient, NULL);
  }
  return Result;
}
4. Si tu PC se conecta por cable a un punto de acceso wifi es posible que lo tengas más difícil.


Estoy convencido de que con la información ofrecida serás capaz de conseguir tu objetivo.

Saludos.

Última edición por escafandra fecha: 25-09-2015 a las 00:29:27.
Responder Con Cita