2011年3月21日 星期一

GetMacAddress

LPCSTR __fastcall GetMacAddress(AnsiString str)
{
WSAData GInitData;
if (WSAStartup(MAKEWORD(2,1),&GInitData) != 0){
return "初始化SOCKET函數失敗! ";
}
typedef struct _ASTAT_{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuf[30];
}ASTAT,* PASTAT;

ASTAT Adapter;
NCB ncb;
UCHAR uRetCode;
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBRESET;
ncb.ncb_lana_num=0;
uRetCode=Netbios(&ncb);
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBASTAT;
ncb.ncb_lana_num=0;
strcpy((char *)ncb.ncb_callname,str.c_str());
ncb.ncb_buffer=(unsigned char *)&Adapter;
ncb.ncb_length=sizeof(Adapter);
uRetCode=Netbios(&ncb);
if(uRetCode==0)
{
char mac[15], * lpmac;
sprintf(mac, "%02X%02X%02X%02X%02X%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]);
lpmac=mac;
WSACleanup();
return lpmac;
}
else
{
WSACleanup();
return " "; // 無法解釋MAC地址
}
}


void __fastcall TForm1::Button2Click(TObject *Sender)
{

WORD wVersionRequested;
WSADATA wsaData;
//Start up WinSock
wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);

hostent *p;
char s[128];
char *ip;
//Get the computer name
gethostname(s, 128);
p = gethostbyname(s);
//Get the IpAddress
ip = inet_ntoa(*((in_addr *)p->h_addr));
//Edit1->Text = ip;
WSACleanup();


MAC = GetMacAddress(ip);
edt_Mac->Text = MAC;
//ShowMessage(GetMacAddress(Edit1->Text.c_str()));


}