|
제가 사용하는 방법입니다!
한번 해보세여..
#include <Iphlpapi.h>
#define MAC_ADDR_LEN 6
//----------------------------------------------------------------
// 변수 선언형태
int m_iMaxCnt; // 시스템에 설치된 랜카드 수량을 기억할 변수
BYTE m_pMacAddrInfo[MAX_ADAPTER_ADDRESS_LENGTH][MAC_ADDR_LEN]; // 실제 맥주소 저장 배열
//----------------------------------------------------------------
실제 처리 부분
m_iMaxCnt = 0;
IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for up to 16 NICs
DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
// Call GetAdapterInfo
DWORD dwStatus = GetAdaptersInfo(
AdapterInfo, // [out] buffer to receive data
&dwBufLen); // [in] size of receive data buffer
if(dwStatus != ERROR_SUCCESS) return; // Verify return value is
// valid, no buffer overflow
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to current adapter info
// 랜카드가 여러개일 경우 까지 처리가능하도록
for(int i=0; i<MAX_ADAPTER_ADDRESS_LENGTH; i++)
{
if(!pAdapterInfo) break;
memcpy(&m_pMacAddrInfo[m_iMaxCnt++], pAdapterInfo->Address, MAC_ADDR_LEN);
pAdapterInfo = pAdapterInfo->Next;
}
//-----------------------------------------------------------------------
안성준 님이 쓰신 글 :
: 질문 드립니다.
: 아래 코드로 PC 에 장착되어 있는 네트워크 카드의 맥 어드래스를 구하는데 간혹 특정 PC 에서 값이 안 넘어는 현상이 있다고 현장에 납품되어 있는 프로그램에서 보고가 들어오고있는데요 그럴 가능성이 있나요?
:
: PC 마다 네트워크 카드가 장착되어 있고 인터넷이 되는건 확실합니다...
: 혹시 값이 안 넘어올 가능성이 있다면 맥 어드레스를 구할 수 있는 확실한 방법이 또 없을까요?
:
: 아시는 분 조언 부탁드립니다..
:
:
: AnsiString s;
: unsigned char MACData[9];
:
: UUID uuid;
: UuidCreateSequential( &uuid ); // Ask OS to create UUID
:
: long sum = 0;
: long sum2 = 0;
:
: for (int i=2; i<8; i++) // Bytes 2 through 7 inclusive are MAC address
: MACData[i] = uuid.Data4[i];
:
: s.sprintf("%x, %x, %x, %x, %x, %x", uuid.Data4[2], uuid.Data4[3], uuid.Data4[4], uuid.Data4[5], uuid.Data4[6], uuid.Data4[7]);
:
: ShowMessage(s);
|