본문 바로가기
C,C++

현재 연결중인 wifi 이름 확인하기

by 슈퍼닷 2017. 2. 16.
반응형

wifi 찾는거에 대해서 흥미가 생겨서 구글과 msdn 검색을 했습니다.

저도 msdn 참조하면서 공부하면서 msdn의 예제를 보면서 소스를 짜봤습니다.


#ifndef UNICODE

#define UNICODE

#endif


#include <windows.h>

#include <wlanapi.h>

#include <objbase.h>

#include <wtypes.h>

#include <iostream>


// Need to link with Wlanapi.lib and Ole32.lib

#pragma comment(lib, "wlanapi.lib")

#pragma comment(lib, "ole32.lib")

using namespace std;

int wmain()

{

HANDLE hClient = NULL;

DWORD dwMaxClient = 2;

DWORD dwCurVersion = 0;

DWORD dwResult = 0;

int iRet = 0;

WCHAR GuidString[1000] = { 0 };

PWLAN_INTERFACE_INFO_LIST pIfList = NULL;

PWLAN_INTERFACE_INFO pIfInfo = NULL;

PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;

PWLAN_AVAILABLE_NETWORK pBssEntry = NULL;

wcout.imbue(locale("kor"));

dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);

if (dwResult != ERROR_SUCCESS) {

wcout << L"WlanOpenHandle failed" << endl;

return 1;

}

dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);

if (dwResult != ERROR_SUCCESS){

wcout << L"WlanEnumInterfaces failed" << endl;

   return 1;

}

else {

pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[pIfList->dwIndex];

dwResult = WlanGetAvailableNetworkList(hClient, &pIfInfo->InterfaceGuid, 2, NULL, &pBssList);

if (dwResult != ERROR_SUCCESS)

wcout << L"failed" << endl;

else {

pBssEntry = (WLAN_AVAILABLE_NETWORK *)&pBssList->Network[pBssList->dwIndex];

wcout << L"현재 연결중인 wifi :" << pBssEntry->strProfileName << endl;

}

}

if (pBssList != NULL) {

WlanFreeMemory(pBssList);

pBssList = NULL;

}

if (pIfList != NULL) {

WlanFreeMemory(pIfList);

pIfList = NULL;

}

WlanCloseHandle(hClient, NULL);

return 0;

}



[실행결과]


1. WlanOpenHandle로 서버에 연결할 Client 핸들값을 hClient 변수에 저장합니다.

2. WlanEnumInterfaces 를 통해 (WLAN_INTERFACE_INFO_LIST) 타입의 list를 받습니다.

3. 저는 현재연결된 wifi 가 궁금합니다. 현재 연결된 item index dwIndex 에 저장되어있습니다.

4. 따라서 pIfList->InterfaceInfo[pIfList->dwIndex] 를 통해 현재 인터페이스에 관한 정보를 얻습니다.

5. 비슷한 방식으로 WlanGetAvailabeNetworkList 를 통해 List를 얻고 Index값은 dwIndex로 설정하고 프로필을 얻습니다.

6. List 포인터들은 WlanFreeMemory로 해제해주고 WlanCloseHandle로 Open된 hClient를 Close 해줍니다.


다른 wlanapi 가 필요하다면 msdn에 검색해서 찾아보시길 바랍니다.

나중에 소스가 길어지면서 WlanFreeMemory를 많이 할 상황이 생기면 헤더를 하나 만들어서 close 템플릿을 만드는 방식으로

소스코드를 줄이는 방법도 있겠네요.



반응형

댓글