Windows obtains the MAC address, StringBuffer is a custom string class that can be referenced http://www.cnblogs.com/hatsusakana/p/7866387.html
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <windowsx.h>extern "C" {# Include "StringBuffer.h"}typedef struct _mac{char macname[256]; Char macadd[256];} Mac;int Windowscommand (StringBuffer *sb,char *cmd) {security_attributes sa; HANDLE Hread,hwrite; sa.nlength = sizeof (security_attributes); Sa.lpsecuritydescriptor = NULL; Sa.binherithandle = TRUE; if (! CreatePipe (&hread,&hwrite,&sa,0)) return 0; Char command[1024]; ZeroMemory (command,sizeof (command)); strcpy (Command,text ("cmd.exe/c")); strcat (Command,cmd); Startupinfo si; Process_information Pi; SI.CB = sizeof (STARTUPINFO); Getstartupinfo (&SI); Si.hstderror = Hwrite; Si.hstdoutput = Hwrite; Si.wshowwindow = Sw_hide; Si.dwflags = startf_useshowwindow| Startf_usestdhandles; if (! CreateProcess (NULL,COMMAND,NULL,NULL,TRUE,NULL,NULL,NULL,&SI,&PI)) {CloseHandle (hwrite); CloseHandle (hReAD); return 0; } closehandle (Hwrite); char buffer[2048],*result = NULL; ZeroMemory (buffer,sizeof (buffer)); DWORD Bytesread; while (ReadFile (hread,buffer,sizeof (buffer), &bytesread,null) && bytesread>0) {Stringbufferaddex ( Sb,buffer,bytesread); ZeroMemory (buffer,sizeof (buffer)); } closehandle (Hread); return 1;} int main (int argc,char *argv[]) {StringBuffer sb; Stringbufferinit (&SB); Windowscommand (&SB, "Ipconfig/all"); Char *buf = stringbuffertostring (&SB); Stringbufferfree (&SB); Char *ms = strstr (buf, "description"); while (ms! = NULL) {mac Mac; memset (&mac,0,sizeof (MAC)); SSCANF (MS, "%*[^:]%*[^]%[^\n]", Mac. Macname); ms = STRSTR (MS, "Physical Address"); if (ms) sscanf (MS, "%*[^:]%*[^]%[^\n]", Mac. Macadd); printf ("%s\n%s\n\n", Mac. Macname+1,mac. MACADD+1); ms = STRSTR (MS, "description"); } return 1;}
Windows gets MAC address