반응형
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
MFC 에서 현재 PC의 네트워크 정보를 알아야 하는 상황이 생겨서, 네트워크 정보를 얻어오는 방법에 대해서 알아보았습니다..
질문 >
MFC 에서 네트워크 정보를 얻어오려면 어떻게 해야 하나요?
답변 >
MFC(Microsoft Foundation Classes)에서 네트워크 정보를 얻어오려면 Win32 API를 사용하여 네트워크 정보를 가져올 수 있습니다. 다음은 예제로, MFC 응용 프로그램에서 네트워크 어댑터 정보를 가져오는 방법을 설명합니다.
- 필요한 헤더 파일 포함:
#include <afxwin.h>
#include <iphlpapi.h>
#include <vector>
#pragma comment(lib, "iphlpapi.lib")
- 네트워크 어댑터 정보를 가져오는 함수 작성:
std::vector<PIP_ADAPTER_INFO> GetNetworkAdapters() {
std::vector<PIP_ADAPTER_INFO> adapters;
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
if (pAdapterInfo == nullptr) {
AfxMessageBox(_T("Error allocating memory needed to call GetAdaptersinfo"));
return adapters;
}
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
if (pAdapterInfo == nullptr) {
AfxMessageBox(_T("Error allocating memory needed to call GetAdaptersinfo"));
return adapters;
}
}
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR) {
PIP_ADAPTER_INFO pAdapter = pAdapterInfo;
while (pAdapter) {
adapters.push_back(pAdapter);
pAdapter = pAdapter->Next;
}
} else {
AfxMessageBox(_T("GetAdaptersInfo failed"));
}
return adapters;
}
- 네트워크 어댑터 정보를 출력하는 함수 작성:
void PrintNetworkAdapters() {
auto adapters = GetNetworkAdapters();
for (const auto& adapter : adapters) {
CString msg;
msg.Format(_T("Adapter Name: %s\\nDescription: %s\\nIP Address: %s\\n"),
adapter->AdapterName,
adapter->Description,
adapter->IpAddressList.IpAddress.String);
AfxMessageBox(msg);
}
// 메모리 해제
for (auto& adapter : adapters) {
free(adapter);
}
}
- 응용 프로그램에서 함수 호출: MFC 애플리케이션의 적절한 위치 (예: 버튼 클릭 이벤트 핸들러)에서 PrintNetworkAdapters 함수를 호출합니다.
void CMyAppDlg::OnBnClickedButtonGetNetworkInfo() {
PrintNetworkAdapters();
}
이 코드는 MFC 애플리케이션에서 네트워크 어댑터 정보를 가져와 출력하는 간단한 예제입니다. Win32 API의 GetAdaptersInfo 함수를 사용하여 네트워크 어댑터 정보를 얻고, 이를 메시지 박스를 통해 출력합니다. GetAdaptersInfo는 네트워크 어댑터 목록을 반환하며, 각 어댑터에 대한 정보를 포함합니다.
🎬 유튜브 채널 🎬
🎬 치지직 채널 🎬
반응형