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 템플릿을 만드는 방식으로
소스코드를 줄이는 방법도 있겠네요.
'C,C++' 카테고리의 다른 글
[C/C++] 비주얼스튜디오 2015 평가판 연장 방법 , 평생 무료 (0) | 2017.03.03 |
---|---|
[C/C++] WinINet vs WinHTTP in MSDN (0) | 2017.02.23 |
fcvt(double,int,int*,int*) 실수를 문자열로 변환하다. (0) | 2017.02.15 |
[C/C++] mfc140ud.dll / msvcp140d.dll / ucrtbased.dll / vcruntime140d.dll 오류 (0) | 2017.02.11 |
[C/C++] C/C++ 강좌는 이곳에서 보는게 좋습니다. (0) | 2017.02.10 |
댓글