/ Published in: C++
获å–MAC地å€
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- #include <windows.h> #include <stdio.h> #include <time.h> #define MAX_ADAPTER_DESCRIPTION_LENGTH 128 // arb. #define MAX_ADAPTER_NAME_LENGTH 256 // arb. #define MAX_ADAPTER_ADDRESS_LENGTH 8 // arb. // // IP_ADDRESS_STRING - store an IP address as a dotted decimal string // typedef struct { char String[4 * 4]; } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; // // IP_ADDR_STRING - store an IP address with its corresponding subnet mask, // both as dotted decimal strings // typedef struct _IP_ADDR_STRING { struct _IP_ADDR_STRING* Next; IP_ADDRESS_STRING IpAddress; IP_MASK_STRING IpMask; DWORD Context; } IP_ADDR_STRING, *PIP_ADDR_STRING; // // ADAPTER_INFO - per-adapter information. All IP addresses are stored as strings // typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next; DWORD ComboIndex; char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; UINT AddressLength; BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; DWORD Index; UINT Type; UINT DhcpEnabled; PIP_ADDR_STRING CurrentIpAddress; IP_ADDR_STRING IpAddressList; IP_ADDR_STRING GatewayList; IP_ADDR_STRING DhcpServer; BOOL HaveWins; IP_ADDR_STRING PrimaryWinsServer; IP_ADDR_STRING SecondaryWinsServer; time_t LeaseObtained; time_t LeaseExpires; } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; typedef DWORD (WINAPI* GetAdaptersInfoFunc)( PIP_ADAPTER_INFO pAdapterInfo, // buffer to receive data PULONG pOutBufLen // size of data returned ); /////////////////////////////////////////////////////////////////////////////// void MacAddressToString(const LPBYTE Address, LPSTR lpsz, int nAddressLength = 6) { int n; LPSTR p = lpsz; for (n = 0; n < nAddressLength; n++) { p += sprintf(p, n ? "-%02x" : "%02x", Address[n]); } } //--------------------------------------------------------------------------- AnsiString __fastcall TForm1::GetMac(void) { //TODO: Add your source code here HMODULE hLib; GetAdaptersInfoFunc GetAdaptersInfo = NULL; PIP_ADAPTER_INFO pai = NULL; DWORD dwSize = 0; CHAR szMac[64]; hLib = LoadLibrary("Iphlpapi.dll"); if (!hLib) { //puts("Failed to load Iphlpapi.dll"); exit(1); } GetAdaptersInfo = (GetAdaptersInfoFunc)GetProcAddress(hLib, "GetAdaptersInfo"); if (GetAdaptersInfo == NULL) { //puts("Failed to load GetAdaptersInfo in Iphlpapi.dll"); } // Get size of buffer needed: GetAdaptersInfo(NULL, &dwSize); pai = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, dwSize); GetAdaptersInfo(pai, &dwSize); PIP_ADAPTER_INFO p = pai; MacAddressToString(p->Address, szMac, p->AddressLength); GlobalFree(pai); FreeLibrary(hLib); return ((AnsiString)szMac).UpperCase(); } //--------------------------------------------------------------------------- void __fastcall TForm1::btn1Click(TObject *Sender) { lbl1->Caption = GetMac(); } //---------------------------------------------------------------------------