標籤:bytes script std cpp set while html har include
Windows獲得MAC地址,StringBuffer是一個自訂的字串類,可參考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,"描述"); while(ms != NULL) { Mac mac; memset(&mac,0,sizeof(Mac)); sscanf(ms,"%*[^:]%*[^ ]%[^\n]",mac.MacName); ms = strstr(ms,"物理地址"); if(ms) sscanf(ms,"%*[^:]%*[^ ]%[^\n]",mac.MacAdd); printf("%s\n%s\n\n",mac.MacName+1,mac.MacAdd+1); ms = strstr(ms,"描述"); } return 1;}
Windows獲得MAC地址