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.