2016-07-06 3 views
2

이에 대한 몇 가지 정보를 읽었습니다. WiFi를 통해 연결된 경우 this 대답을 수락하고 Managed WiFi API을 사용하여 SSID를받습니다. 여기 내 코드입니다 :이더넷을 통해 연결되어 있는지 확인하십시오. C#

private void setSSID() { 
    WlanClient wlan = new WlanClient(); 

    Collection<String> connectedSsids = new Collection<string>(); 

    foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces) { 
     Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid; 
     connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID, 0, (int)ssid.SSIDLength))); 
    } 
} 

내가 WiFi를 통해 연결 만 이더넷을 통해 연결 한 경우 예외가 발생하고 경우에 완벽하게 SSID를 받게됩니다. 이상적인 해결책 :

  1. 이더넷
  2. 그렇다면를 통해 연결된 경우, setSSID()(또는 이와 유사한 효과 일)
  3. 확인을 입력 반환은 null/0/undefined 그렇지
  4. , SSID를 반환
    (이미 네트워크에 연결되어 있는지 여부를 확인했습니다.)

나는 WMINetworkInformation 네임 스페이스를 모두 보았지만 찾고있는 것도 제공하지 않습니다. WlanApi.cs에서 찾고
는 예외가 여기에 슬로우됩니다 : 당신은 당신이 Win32Exception으로보고 예외를 (잡을 수

+1

어떤 예외가 발생하고 있습니까? 단순히 예외를 잡아 "no wifi available"상태로 취급 할 수 있습니까? 네이티브 API는 [여기] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms706274 (v = vs.85) .aspx)입니다. 라이브러리에서 예외를 처리하는 것을 좋아하지 않는다면 직접 래퍼를 작성하고 직접 처리 할 수 ​​있습니다. 이 API를 사용하면 인터페이스를 찾을 수 있으며 각 인터페이스에서 사용할 수있는 네트워크를 열거 할 수 있습니다. 기존 코드로 Wi-Fi를 통해 연결되었는지 여부를 알 수 있기 때문에 요청하는 내용이 명확하지 않습니다. –

+0

@PeterDuniho 나는 예외를 잡으려고 생각하지 않았다. 내 잘못이야. 그것은'Win32Exception'을 던져서 잡았고 필요한 것으로 돌아 왔습니다. 답변으로 게시 코드를 받아 들일 것입니다. – wmash

+0

알았어, 끝냈어. :) –

답변

2

:

public Wlan.WlanConnectionAttributes CurrentConnection { 
    get { 
     int valueSize; 
     IntPtr valuePtr; 
     Wlan.WlanOpcodeValueType opcodeValueType; 
     Wlan.ThrowIfError(
      Wlan.WlanQueryInterface(client.clientHandle, info.interfaceGuid, Wlan.WlanIntfOpcode.CurrentConnection, IntPtr.Zero, out valueSize, out valuePtr, out opcodeValueType)); 
     try { 
      return (Wlan.WlanConnectionAttributes)Marshal.PtrToStructure(valuePtr, typeof(Wlan.WlanConnectionAttributes)); 
     } 
     finally { 
      Wlan.WlanFreeMemory(valuePtr); 
     } 
    } 
} 

또한 바라 보았다), "no WiFi is available"상태로 처리하십시오.

원하는 경우 예외가있는 ErrorCode 또는 HResult 속성을 확인하여 다른 문제가있는 예외가 아닌 WiFi가 부족할 때 예상했던 오류인지 확인할 수 있습니다. 후자의 경우, 아마도 적어도 오류 유형을 처리하기위한 좋은 전략을 결정할 때까지 예외를 다시 던지기를 원할 것입니다.

예외를 처리하는 대신 오류 코드/결과를 직접 처리 할 수있는 native wireless LAN API도 있습니다. 하지만 당신의 경우에는 예외가 발생했을 때 처리하는 것이 가장 간단하다고 생각합니다.

+0

굉장, 건배 남자 :) – wmash

관련 문제