1. 程式人生 > >Windows獲得MAC地址

Windows獲得MAC地址

cnblogs pipe std eof windows.h 字符 orm eat cad

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地址