Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

PWLAN_CONNECTION_PARAMETERS

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: PWLAN_CONNECTION_PARAMETERS Responder citando

Tengo este código con ayuda de ecafandra, pero necesito ayuda para obtener la PWLAN_CONNECTION_PARAMETERS de la Wi-Fi que desconecto para luego poder conectarme de nuevo.
Código:

bool __fastcall TfrmComprobacion::OnOfWiFi(bool OnOf)
{
    HANDLE hClient;
    DWORD dwVersion;
    PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
    PWLAN_CONNECTION_PARAMETERS pWLCP;
    PGUID pInterfaceGuid;
    bool Result = false;
    if(ERROR_SUCCESS == WlanOpenHandle(1, NULL, &dwVersion, &hClient))
    {
       if(ERROR_SUCCESS == WlanEnumInterfaces(hClient, NULL, &pIfList))
        {
            for(unsigned int i = 0; i < pIfList->dwNumberOfItems; i++)
            {
              pInterfaceGuid = &pIfList->InterfaceInfo[pIfList->dwIndex].InterfaceGuid;
                if(OnOf)
                {
                    //Aquí necesito ayuda, no se como obtener los parametros de la conexión que desconecto para conectarme de nuevo.
                    pWLCP->dwFlags =
                    pWLCP->dot11BssType =
                    pWLCP->pDesiredBssidList =
                    pWLCP->pDot11Ssid =
                    pWLCP->strProfile =
                    pWLCP->wlanConnectionMode =

                   Result = (ERROR_SUCCESS == WlanConnect(hClient, pInterfaceGuid, pWLCP, NULL));
                }
                else
                 Result = (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));
            }
            WlanFreeMemory(pIfList);
       }
       WlanCloseHandle(hClient, NULL);
    }
    return Result;
}
//---------------------------------------------------------------------------


Pretendo hacer que la función conecte y desconecte el Wi-Fi que ya estaba conectado y para ello necesito obtener la Estructura de la que ya estaba conectada.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

En principio los parámetros serían estos:
Código:

pWLCP = (PWLAN_CONNECTION_PARAMETERS)WlanAllocateMemory(sizeof(WLAN_CONNECTION_PARAMETERS));
pWLCP->strProfile = (PWCHAR)SSID; //Nombre de la red que desconectaste en PWCHAR (Unicode)
pWLCP->wlanConnectionMode = 0;
pWLCP->pDot11Ssid = NULL;
pWLCP->pDesiredBssidList = NULL;
pWLCP->dot11BssType = 1;
pWLCP->dwFlags = 0;
Result = (ERROR_SUCCESS == WlanConnect(hClient, pInterfaceGuid, pWLCP, NULL));
WlanFreeMemory(pWLCP);


El problema lo tienes ahora en conocer la Wifi que desconectaste. Asumiendo que solo hay un adaptador wifi presente en elPC una solución puede ser guardar el nombre que desconectaste para poder conectarte después:
Código:
BOOL Wifi_Connect_DisConnect(BOOL connect)
{
  static WCHAR SSID[256] = {0};

  HANDLE hClient;
  DWORD dwVersion;
  PWLAN_INTERFACE_INFO_LIST pInterfaceInfoList;
  PGUID pInterfaceGuid;
  PWLAN_CONNECTION_PARAMETERS pWLCP;
  PWLAN_AVAILABLE_NETWORK_LIST pNetworkList;
  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;
        if(connect){
          pWLCP = (PWLAN_CONNECTION_PARAMETERS)WlanAllocateMemory(sizeof(WLAN_CONNECTION_PARAMETERS));
          pWLCP->strProfile = SSID;
          pWLCP->wlanConnectionMode = 0;
          pWLCP->pDot11Ssid = NULL; //pDot11_DDSI;
          pWLCP->pDesiredBssidList = NULL;
          pWLCP->dot11BssType = 1;
          pWLCP->dwFlags = 0;//0xF;
          Result = (ERROR_SUCCESS == WlanConnect(hClient, pInterfaceGuid, pWLCP, NULL));
          WlanFreeMemory(pWLCP);
        }
        else if(ERROR_SUCCESS == WlanGetAvailableNetworkList(hClient, pInterfaceGuid, 1, NULL, &pNetworkList)){
          for(int j=0; j < pNetworkList->dwNumberOfItems; j++){
            if(pNetworkList->Network[j].dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED){
              lstrcpynW(SSID, pNetworkList->Network[j].strProfileName, 256);
              Result = (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));
            } 
          }
          WlanFreeMemory(pNetworkList);
        }
      }
      WlanFreeMemory(pInterfaceInfoList);
    }
    WlanCloseHandle(hClient, NULL);
  }
  return Result;
}


El problema es más complejo cuando tenemos varios adaptadores wifi. La solución es guardarlos todos para restaurarlos después. La siguiente función muestra como hacerlo asumiendo que no hay más de 10 adaptadores wifi el el equipo (número más que suficiente):
Código:

// Con hasta 10 adaptadores wifi en el PC
BOOL Wifi_Connect_DisConnect2(BOOL connect)
{
  struct WLANConnected{
    WCHAR strProfileName[256];
    GUID  InterfaceGuid;
  };

  static WLANConnected Interfaces[10] = {0};

  HANDLE hClient;
  DWORD dwVersion;
  PWLAN_INTERFACE_INFO_LIST pInterfaceInfoList;
  PGUID pInterfaceGuid;
  PWLAN_CONNECTION_PARAMETERS pWLCP;
  PWLAN_AVAILABLE_NETWORK_LIST pNetworkList;
  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;
        if(connect){
          for(int j=0; j<10; j++){
            if(Interfaces[j].InterfaceGuid == *pInterfaceGuid){
              pWLCP = (PWLAN_CONNECTION_PARAMETERS)WlanAllocateMemory(sizeof(WLAN_CONNECTION_PARAMETERS));
              pWLCP->strProfile = Interfaces[j].strProfileName;
              pWLCP->wlanConnectionMode = 0;
              pWLCP->pDot11Ssid = NULL; //pDot11_DDSI;
              pWLCP->pDesiredBssidList = NULL;
              pWLCP->dot11BssType = 1;
              pWLCP->dwFlags = 0;//0xF;
              Result |= (ERROR_SUCCESS == WlanConnect(hClient, pInterfaceGuid, pWLCP, NULL));
              WlanFreeMemory(pWLCP);
            }
          }
        }
        else if(ERROR_SUCCESS == WlanGetAvailableNetworkList(hClient, pInterfaceGuid, 1, NULL, &pNetworkList)){
          for(int i=0; i < pNetworkList->dwNumberOfItems; i++){
            if(pNetworkList->Network[i].dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED){
              for(int j=0; j<10 && j<pInterfaceInfoList->dwNumberOfItems; j++){
                lstrcpynW(Interfaces[j].strProfileName, pNetworkList->Network[i].strProfileName, 256);
                Interfaces[j].InterfaceGuid = *pInterfaceGuid;
                Result |= (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));
              }
            }
          }
          WlanFreeMemory(pNetworkList);
        }
      }
      WlanFreeMemory(pInterfaceInfoList);
    }
    WlanCloseHandle(hClient, NULL);
  }
  return Result;
}


Espero que la solución sea satisfactoria.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No funciona.
El caso es que lo que quiero hacer es lo siguiente.
El cliente puede tener dos conexiónes de RED simultáneamente.
1. Wi-Fi (dispositivo USB o Wi-Fi integrado)
2. Tarjeta de RED conectada por cable.

LUEGO:
1. Mi aplicación primero comprueba si tiene el Wi-Fi conectado.

2. Si es así, debería de guardar sus parámetros de conexión en:
PWLAN_CONNECTION_PARAMETERS pWLCP;
para luego poder utilizarlo de nuevo en la conexión.

3. Desconecto el Wí-Fi, que ya logré con tu ayuda.

4. Realizo mis propias rutinas para comprobar la conexión CABLEADA, pero ya con la RED Wi-Fi desconectada.

5. Una vez comprobada la RED CABLEADA, volver a conectar la Wi-Fi que estaba conectada y para ello necesito los valores antiguos de la Wi-Fi que desconecte, pero antes de la desconexión.

6. Por tanto la pregunta sería...
¿Como consigo los parámetros de la Wi-Fi conectada?

He estado viendo todo en la pagina de Microsoft, pero no consigo dar con la forma de conseguirlo:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms707405(v=vs.85).aspx

Por cierto en el código que me explicas y en ambos casos da error en:

error: W8018 Assinging int to WLAN_CONNECTION_MODE
pWLCP->wlanConnectionMode = 0;

error: W8018 Assinging int to DOT11_BSS_TYPE
pWLCP->dot11BssType = 1;

He encontrado cosas parecidas a esta, pero no consigo aclararme:
Código:

/// <summary>
/// Requests a connection (association) to the specified wireless network.
/// </summary>
/// <remarks>
/// The method returns immediately. Progress is reported through the <see cref="WlanNotification"/> event.
/// </remarks>
public void Connect(Wlan.WlanConnectionMode connectionMode, Wlan.Dot11BssType bssType, string profile)
{
    Wlan.WlanConnectionParameters connectionParams = new Wlan.WlanConnectionParameters();
    connectionParams.wlanConnectionMode = connectionMode;
    connectionParams.profile = profile;
    connectionParams.dot11BssType = bssType;
    connectionParams.flags = 0;
    Connect(connectionParams);
}


Código:

static void Main( string[] args )
{
    WlanClient client = new WlanClient();
    foreach ( WlanClient.WlanInterface wlanIface in client.Interfaces )
    {
        // Lists all networks with WEP security
        Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList( 0 );
        foreach ( Wlan.WlanAvailableNetwork network in networks )
        {
            if ( network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP )
            {
                Console.WriteLine( "Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
            }
        }

        // Retrieves XML configurations of existing profiles.
        // This can assist you in constructing your own XML configuration
        // (that is, it will give you an example to follow).
        foreach ( Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles() )
        {
            string name = profileInfo.profileName; // this is typically the network's SSID
            string xml = wlanIface.GetProfileXml( profileInfo.profileName );
        }

        // Connects to a known network with WEP security
        string profileName = "Cheesecake"; // this is also the SSID
        string mac = "52544131303235572D454137443638";
        string key = "hello";
        string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><MSM><security><authEncryption><authentication>open</authentication><encryption>WEP</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>networkKey</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>", profileName, mac, key);
        wlanIface.SetProfile( Wlan.WlanProfileFlags.AllUser, profileXml, true );
        wlanIface.Connect( Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName );
    }
}

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

El código lo he escrito yo, compila y funciona, si no fuera así, no lo hubiera publicado.

Te explico:

1. El error de compilación no es tal error y se debe a que asumo enumeraciones como enteros y así tengo configurado Builder (Builder5), de ahí los número 0 y 1 que comentas pero puedes sustituirlos por sus nominales correspondientes:
Código:

wlan_connection_mode_profile = 0
dot11_BSS_type_infrastructure = 1

De esa forma la sección de código quedaría así:
Código:

              pWLCP = (PWLAN_CONNECTION_PARAMETERS)WlanAllocateMemory(sizeof(WLAN_CONNECTION_PARAMETERS));
              pWLCP->strProfile = Interfaces[j].strProfileName;
              pWLCP->wlanConnectionMode = wlan_connection_mode_profile;  // <========  0
              pWLCP->pDot11Ssid = NULL; //pDot11_DDSI; // aquí no se mete el SSID pues hemos elegido usar profile
              pWLCP->pDesiredBssidList = NULL;
              pWLCP->dot11BssType = dot11_BSS_type_infrastructure;       // <========  1
              pWLCP->dwFlags = 0;
              Result |= (ERROR_SUCCESS == WlanConnect(hClient, pInterfaceGuid, pWLCP, NULL));
              WlanFreeMemory(pWLCP);


2. Cuando un equipo está conectado a una red Wifi, se guarda su profile correspondiente por lo que no es necesario reintroducir más parámetros que su SSID para volver a conectarlo.

3. La API WLAN asume que el equipo puede tener más de un adaptador wifi, por eso se enumeran, cada adaptador puede estar conectado a una red diferente.

4. Lo anterior sugiere guardar para cada adaptador (interface) Wifi y el nombre de red SSID al que estaba conectado antes de desconectarlo. Eso es lo que hace el código y así funciona con BCB5 y Windows 10.

5. Si asumes un sólo adaptador wifi posible, entonces basta con guardar el SSID y ningun interfaceGUID. El código que asume esta opción está expuesto arriba aunque yo prefiero asumir más de un adaptador y red wifi.

6. Si quieres código para ver como intruducir clave de wifi para conectarte a una red nueva o borrar su profile puedes leer esto: Jugando con las conexiones Wifi. El código mostrado es sólo una parte del que encontrarás en los archivos adjuntos.


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

escafandra... un MILLON DE GRACIAS...
Te lo agradezco muchísimo, muchísimo...
Todo funciona tal como deseaba gracias a ti.
Así quedó al final mi código:
Código:

//Función para comprobar si existe una conexión Wi-Fi (Hasta 3) CERO Desconecta y UNO Conecta
//Es necesario (#include "Wlanapi.h") y linkar la libreria Wlanapi.lib con el proyecto
bool __fastcall TfrmComprobacion::OnOffWiFi(bool OnOff)
{
   struct WLANConnected{WCHAR strProfileName[256]; GUID  InterfaceGuid;};//Estructura para guardar los 3 nombres SSID
    static WLANConnected Interfaces[3] = {0};
    HANDLE hClient;
    DWORD dwVersion;
    PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
    PWLAN_INTERFACE_INFO pIfInfo = NULL;//Para conocer el estado de la conexión
    PGUID pInterfaceGuid;
    PWLAN_CONNECTION_PARAMETERS pWLCP;
    PWLAN_AVAILABLE_NETWORK_LIST pNetworkList;//Parametros para guardar los nombres de las SSID
    bool Result = false;

    if(ERROR_SUCCESS == WlanOpenHandle(1, NULL, &dwVersion, &hClient))
    {
        if(ERROR_SUCCESS == WlanEnumInterfaces(hClient, NULL, &pIfList))
        {
           for(unsigned int i = 0; i < pIfList->dwNumberOfItems; i++)
           {
               pInterfaceGuid = &pIfList->InterfaceInfo[pIfList->dwIndex].InterfaceGuid;
               if(OnOff)
               {
                   for(int j = 0; j < 3; j++)//Check de hata 3 adaptadores Wi-Fi
                   {
                       if(Interfaces[j].InterfaceGuid == *pInterfaceGuid)
                       {
                            pWLCP = (PWLAN_CONNECTION_PARAMETERS)WlanAllocateMemory(sizeof(WLAN_CONNECTION_PARAMETERS));
                            pWLCP->strProfile = Interfaces[j].strProfileName;
                            pWLCP->wlanConnectionMode = wlan_connection_mode_profile;;
                            pWLCP->pDot11Ssid = NULL; //pDot11_DDSI;
                            pWLCP->pDesiredBssidList = NULL;
                            pWLCP->dot11BssType = dot11_BSS_type_infrastructure;
                            pWLCP->dwFlags = 0;//0xF;
                            Result |= (ERROR_SUCCESS == WlanConnect(hClient, pInterfaceGuid, pWLCP, NULL));
                            WlanFreeMemory(pWLCP);
                            pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
                            switch(pIfInfo->isState)
                            {
                                case wlan_interface_state_not_ready:
                                    LWiFi->Caption = "No está listo"; break;
                                case wlan_interface_state_connected:
                                    LWiFi->Font->Color = clLime;
                                    LWiFi->Caption = "Conexión establecida"; break;
                                case wlan_interface_state_ad_hoc_network_formed:
                                    LWiFi->Caption = "Probando configuración automática"; break;
                                case wlan_interface_state_disconnecting:
                                    LWiFi->Caption = "Desconectando"; break;
                                case wlan_interface_state_disconnected:
                                    LWiFi->Caption = "Desactivada y/o Desconectada"; break;
                                case wlan_interface_state_associating:
                                    LWiFi->Caption = "Asociandose a la RED"; break;
                                case wlan_interface_state_discovering:
                                    LWiFi->Caption = "Probando configuración de RED"; break;
                                case wlan_interface_state_authenticating:
                                    LWiFi->Caption = "Procesando autenticación";break;
                                default:
                                    LWiFi->Caption = "Estado desconocido"; break;
                            }

                        }
                   }
               }
               else
                   if(ERROR_SUCCESS == WlanGetAvailableNetworkList(hClient, pInterfaceGuid, 1, NULL, &pNetworkList))
                   {
                       for(unsigned int i = 0; i < pNetworkList->dwNumberOfItems; i++)
                       {
                           if(pNetworkList->Network[i].dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
                           {
                               for(unsigned int j = 0; j < 3 && j < pIfList->dwNumberOfItems; j++)//Check de hata 3 adaptadores Wi-Fi
                               {
                                   lstrcpynW(Interfaces[j].strProfileName, pNetworkList->Network[i].strProfileName, 256);
                                   Interfaces[j].InterfaceGuid = *pInterfaceGuid;
                                   Result |= (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));
                                    pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
                                    switch(pIfInfo->isState)
                                    {
                                        case wlan_interface_state_not_ready:
                                            LWiFi->Caption = "No está listo"; break;
                                        case wlan_interface_state_connected:
                                            LWiFi->Font->Color = clLime;
                                            LWiFi->Caption = "Conexión establecida"; break;
                                        case wlan_interface_state_ad_hoc_network_formed:
                                            LWiFi->Caption = "Probando configuración automática"; break;
                                        case wlan_interface_state_disconnecting:
                                            LWiFi->Caption = "Desconectando"; break;
                                        case wlan_interface_state_disconnected:
                                            LWiFi->Caption = "Desactivada y/o Desconectada"; break;
                                        case wlan_interface_state_associating:
                                            LWiFi->Caption = "Asociandose a la RED"; break;
                                        case wlan_interface_state_discovering:
                                            LWiFi->Caption = "Probando configuración de RED"; break;
                                        case wlan_interface_state_authenticating:
                                            LWiFi->Caption = "Procesando autenticación";break;
                                        default:
                                            LWiFi->Caption = "Estado desconocido"; break;
                                    }
                               }
                           }
                       }
                       WlanFreeMemory(pNetworkList);
                   }
           }
           WlanFreeMemory(pIfList);
       }
       WlanCloseHandle(hClient, NULL);
    }
    return Result;
}
//---------------------------------------------------------------------------

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.


Ultima edición por JesúsGandia el Mar 29 Sep, 2015 2:33 pm, editado 3 veces
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Una pequeña observación...
¿este código no es redundante?
Código:

for(unsigned int i = 0; i < pNetworkList->dwNumberOfItems; i++)
                       {
                           if(pNetworkList->Network[i].dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
                           {
                               for(unsigned int j = 0; j < 3 && j < pIfList->dwNumberOfItems; j++)//Check de hata 3 adaptadores Wi-Fi


ya que se asume que el primer FOR contempla los adaptadores totales en el equipo por tanto creo que el segundo FOR estaría de más.
y puedo aprovechar el índice (i) para todos los objetos.
corrígeme si me equivoco.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Tienes toda la razón, el bucle sobra y el límite del n° de interfaces debe ponerse en el bucle principal tras enumerar las interfaces:

Código:
 
// Con hasta 10 adaptadores wifi en el PC
BOOL Wifi_Connect_DisConnect2(BOOL connect)
{
  struct WLANConnected{
    WCHAR strProfileName[256];
    GUID  InterfaceGuid;
  };

  static WLANConnected Interfaces[10] = {0};

  HANDLE hClient;
  DWORD dwVersion;
  PWLAN_INTERFACE_INFO_LIST pInterfaceInfoList;
  PGUID pInterfaceGuid;
  PWLAN_CONNECTION_PARAMETERS pWLCP;
  PWLAN_AVAILABLE_NETWORK_LIST pNetworkList;
  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 < 10; i++){
        pInterfaceGuid = &pInterfaceInfoList->InterfaceInfo[pInterfaceInfoList->dwIndex].InterfaceGuid;
        if(connect){
          for(int j=0; j<10; j++){
            if(Interfaces[j].InterfaceGuid == *pInterfaceGuid){
              pWLCP = (PWLAN_CONNECTION_PARAMETERS)WlanAllocateMemory(sizeof(WLAN_CONNECTION_PARAMETERS));
              pWLCP->strProfile = Interfaces[j].strProfileName;
              pWLCP->wlanConnectionMode = 0;
              pWLCP->pDot11Ssid = NULL; //pDot11_DDSI;
              pWLCP->pDesiredBssidList = NULL;
              pWLCP->dot11BssType = 1;
              pWLCP->dwFlags = 0;//0xF;
              Result |= (ERROR_SUCCESS == WlanConnect(hClient, pInterfaceGuid, pWLCP, NULL));
              WlanFreeMemory(pWLCP);
            }
          }
        }
        else if(ERROR_SUCCESS == WlanGetAvailableNetworkList(hClient, pInterfaceGuid, 1, NULL, &pNetworkList)){
           for(int j=0; j < pNetworkList->dwNumberOfItems; j++){
             if(pNetworkList->Network[j].dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED){
               lstrcpynW(Interfaces[i].strProfileName, pNetworkList->Network[j].strProfileName, 256);
               Interfaces[i].InterfaceGuid = *pInterfaceGuid;
               Result |= (ERROR_SUCCESS == WlanDisconnect(hClient, pInterfaceGuid, NULL));
             }
           }
        }
      }
      WlanFreeMemory(pInterfaceInfoList);
    }
    WlanCloseHandle(hClient, NULL);
  }
  return Result;
}
 


Adáptalo a tu necesidad.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias por tomarte la molestia de revisarlo.
Un saludo y de nuevo... MUCHAS GRACIAS.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mensaje    Asunto: Responder citando

escafandra, con tu permiso voy a poner el CODIGO en Tips & Tricks ya que el código esta muy enredado.
_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.