C++ 硬件信息 获取网卡MAC地址
来源:互联网 发布:windows update卡在35 编辑:程序博客网 时间:2024/05/18 11:50
获取计算机网卡MAC地址的方法很多,这里采用的是命令行的形式获取,可以获取有线网卡与无线网卡的MAC地址,很简单,直接
上代码。
【1】头文件
#if !defined(AFX_95644697_C78F_4DD6_885B_3D7C40B2D55C__INCLUDED_)#define AFX_95644697_C78F_4DD6_885B_3D7C40B2D55C__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include <iostream>#include <string>#include <windows.h>using namespace std;//--------------------------------------------------------------//网卡MAC地址//--------------------------------------------------------------BOOL GetMacByCmd(char *lpszMac, int len=128);#endif // !defined(AFX_95644697_C78F_4DD6_885B_3D7C40B2D55C__INCLUDED_)
【2】CPP文件
#include "stdafx.h"#include "MacID.h"//--------------------------------------------------------------//网卡MAC地址//--------------------------------------------------------------BOOL GetMacByCmd(char *lpszMac, int len/*=128*/){const long MAX_COMMAND_SIZE = 10000; //命令行输出缓冲大小WCHAR szFetCmd[]= L"ipconfig /all"; //获取MAC命令行const string strEnSearch = "Physical Address. . . . . . . . . : "; //网卡MAC地址的前导信息const string strChSearch = "物理地址. . . . . . . . . . . . . : ";BOOL bret = FALSE;HANDLE hReadPipe = NULL; //读取管道HANDLE hWritePipe = NULL; //写入管道PROCESS_INFORMATION pi; //进程信息STARTUPINFOsi; //控制命令行窗口信息SECURITY_ATTRIBUTES sa; //安全属性charszBuffer[MAX_COMMAND_SIZE+1] = {0}; //放置命令行结果的输出缓冲区stringstrBuffer;unsigned longcount = 0;longipos = 0;pi.hProcess = NULL;pi.hThread = NULL;si.cb= sizeof(STARTUPINFO);sa.nLength= sizeof(SECURITY_ATTRIBUTES);sa.lpSecurityDescriptor = NULL;sa.bInheritHandle= TRUE;//1.0 创建管道bret = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);if(!bret){goto END;}//2.0 设置命令行窗口的信息为指定的读写管道GetStartupInfo(&si);si.hStdError= hWritePipe;si.hStdOutput= hWritePipe;si.wShowWindow= SW_HIDE; //隐藏命令行窗口si.dwFlags= STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;//3.0 创建获取命令行的进程bret = CreateProcess(NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );if(!bret){goto END;}//4.0 读取返回的数据WaitForSingleObject (pi.hProcess, 2000/*INFINITE*/);bret = ReadFile(hReadPipe, szBuffer, MAX_COMMAND_SIZE, &count, 0);if(!bret){goto END;}//5.0 查找MAC地址,默认查找第一个,一般为以太网的MACstrBuffer = szBuffer;ipos = strBuffer.find(strEnSearch);if (ipos < 0)//区分中英文的系统{ipos = strBuffer.find(strChSearch);if (ipos < 1){goto END;}//提取MAC地址串strBuffer = strBuffer.substr(ipos+strChSearch.length());}else{//提取MAC地址串strBuffer = strBuffer.substr(ipos+strEnSearch.length());}ipos = strBuffer.find("\n");strBuffer = strBuffer.substr(0, ipos);memset(szBuffer, 0x00, sizeof(szBuffer));strcpy_s(szBuffer, strBuffer.c_str());//去掉中间的“00-50-EB-0F-27-82”中间的'-'得到0050EB0F2782int j = 0;for(int i=0; i<strlen(szBuffer); i++){if(szBuffer[i] != '-'){lpszMac[j] = szBuffer[i];j++;}}bret = TRUE;END://关闭所有的句柄CloseHandle(hWritePipe);CloseHandle(hReadPipe);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);return(bret);}
【3】测试
char lpszMac[128] = {0};//获取MACGetMacByCmd(lpszMac);//打印出MACcout << lpszMac << endl;
0 0
- C++ 硬件信息 获取网卡MAC地址
- Java 程序获取系统硬件信息之网卡MAC地址
- C#获取硬件信息(CPU序列号,网卡地址...)
- C语言获取本地所有网卡的ip地址及MAC信息
- window下c语言通过WMI获得网卡MAC地址,硬盘序号,主板序号等硬件信息
- 获取网卡MAC地址
- 获取网卡MAC地址
- 获取网卡Mac地址
- 获取网卡MAC地址
- 获取网卡MAC地址
- 获取网卡MAC地址
- 获取网卡MAC地址
- 获取网卡mac地址
- 如何获取网卡硬件地址
- 获取网卡硬件地址代码
- 网卡MAC地址相关信息大全-4 获取远程网卡MAC地址
- 获取硬盘ID信息及网卡MAC地址的代码
- ASP.NET获取客户端网卡使用的MAC地址信息
- httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.1.229 fo
- 如何放松身体和压力
- ContentProvider: insert返回值
- THE FASTEST C++ IMPLEMENTATION FOR ORIGINAL DPM — SOURCE CODE DOWNLOAD - BUG Fixed
- Unity3D学习笔记——layer
- C++ 硬件信息 获取网卡MAC地址
- 【AppCan 开发者】 生活中的坚持与改变
- C语言中的数组
- 0-1背包hdu1864
- UVA - 10391 Compound Words 迭代器和set
- 大数据最最根本的属性有三个——海量、开放、连接
- iOS 性能优化之懒加载
- Java匿名内部类
- Atitit. 软件GUI按钮与仪表盘--web服务器区--获取apache配置文件路径 linux and apache的启动、停止、重启