VC++ 获取本机MAC有几种办法? 本帖最后由 dengchaozhu 于 2012-04-24 21:14:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个随便百度也有了呀http://it.china-b.com/cxsj/vc/20090612/102470_1.html GetAdaptersInfo()GetAdaptersAddress(); // 个人认为比较简单的方法,如下:// 增加头文件:#include "iphlpapi.h"// 包含库文件:#pragma comment(lib, "iphlpapi.lib")// iphlpapi.lib网上可以下载到BOOL GetMacAddress(CString &strMac){ PIP_ADAPTER_INFO pAdapterInfo; DWORD AdapterInfoSize; TCHAR szMac[32] = {0}; DWORD Err; AdapterInfoSize = 0; Err = GetAdaptersInfo(NULL, &AdapterInfoSize); if((Err != 0) && (Err != ERROR_BUFFER_OVERFLOW)) { TRACE("获得网卡信息失败!"); return FALSE; } // 分配网卡信息内存 pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, AdapterInfoSize); if(pAdapterInfo == NULL) { TRACE("分配网卡信息内存失败"); return FALSE; } if(GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize) != 0) { TRACE(_T("获得网卡信息失败!\n")); GlobalFree(pAdapterInfo); return FALSE; } strMac.Format(_T("%02X%02X%02X%02X%02X%02X"), pAdapterInfo->Address[0], pAdapterInfo->Address[1], pAdapterInfo->Address[2], pAdapterInfo->Address[3], pAdapterInfo->Address[4], pAdapterInfo->Address[5]); GlobalFree(pAdapterInfo); return TRUE; } 4种方法用VC获取本机MAC地址 1)注意:必须在project->Setting里添加库文件“netapi32.lib”#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <httpext.h> #include <windef.h> #include <Nb30.h> int getMAC(char * mac) { NCB ncb; typedef struct _ASTAT_ { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff [30]; }ASTAT, * PASTAT; ASTAT Adapter; typedef struct _LANA_ENUM { // le UCHAR length; UCHAR lana[MAX_LANA]; }LANA_ENUM ; LANA_ENUM lana_enum; UCHAR uRetCode; memset(&ncb, 0, sizeof(ncb)); memset(&lana_enum, 0, sizeof(lana_enum)); ncb.ncb_command = NCBENUM; ncb.ncb_buffer = (unsigned char *)&lana_enum; ncb.ncb_length = sizeof(LANA_ENUM); uRetCode = Netbios(&ncb); if(uRetCode != NRC_GOODRET) return uRetCode; for(int lana=0; lana&l2)t;lana_enum.length; lana++) { ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = lana_enum.lana[lana]; uRetCode = Netbios(&ncb); if(uRetCode == NRC_GOODRET) break; } if(uRetCode != NRC_GOODRET) return uRetCode; memset(&ncb, 0, sizeof(ncb)); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = lana_enum.lana[0]; strcpy((char*)ncb.ncb_callname, "*"); ncb.ncb_buffer = (unsigned char *)&Adapter; ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios(&ncb); if(uRetCode != NRC_GOODRET) return uRetCode; sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X", Adapter.adapt.adapter_address[0], Adapter.adapt.adapter_address[1], Adapter.adapt.adapter_address[2], Adapter.adapt.adapter_address[3], Adapter.adapt.adapter_address[4], Adapter.adapt.adapter_address[5] ); return 0; } int main(int argc, char* argv[]) { char mac[200]; getMAC(mac); printf(" mac : %s \n",mac); return 0; }3)注意:必须在project->Setting里添加库文件“netapi32.lib”。 #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <httpext.h> #include <windef.h> #include <Nb30.h> int getMAC(char * mac) { NCB ncb; typedef struct _ASTAT_ { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff [30]; }ASTAT, * PASTAT; ASTAT Adapter; typedef struct _LANA_ENUM { // le UCHAR length; UCHAR lana[MAX_LANA]; }LANA_ENUM ; LANA_ENUM lana_enum; UCHAR uRetCode; memset(&ncb, 0, sizeof(ncb)); memset(&lana_enum, 0, sizeof(lana_enum)); ncb.ncb_command = NCBENUM; ncb.ncb_buffer = (unsigned char *)&lana_enum; ncb.ncb_length = sizeof(LANA_ENUM); uRetCode = Netbios(&ncb); if(uRetCode != NRC_GOODRET) return uRetCode; for(int lana=0; lana<lana_enum.length; lana++) { ncb.ncb_command = NCBRESET; 4)ncb.ncb_lana_num = lana_enum.lana[lana]; uRetCode = Netbios(&ncb); if(uRetCode == NRC_GOODRET) break; } if(uRetCode != NRC_GOODRET) return uRetCode; memset(&ncb, 0, sizeof(ncb)); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = lana_enum.lana[0]; strcpy((char*)ncb.ncb_callname, "*"); ncb.ncb_buffer = (unsigned char *)&Adapter; ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios(&ncb); if(uRetCode != NRC_GOODRET) return uRetCode; sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X", Adapter.adapt.adapter_address[0], Adapter.adapt.adapter_address[1], Adapter.adapt.adapter_address[2], Adapter.adapt.adapter_address[3], Adapter.adapt.adapter_address[4], Adapter.adapt.adapter_address[5] ); return 0; } int main(int argc, char* argv[]) { char mac[200]; getMAC(mac); printf(" mac : %s \n",mac); return 0; } #include <string>#include <iostream>using namespace std;//命令行输出缓冲大小const long MAX_COMMAND_SIZE = 10000;//获取MAC命令行char szFetCmd[] = "ipconfig /all";//网卡MAC地址的前导信息const string str4Search = "Physical Address. . . . . . . . . : ";//用命令行方式获取网卡MAC地址BOOL GetMacByCmd(char *lpszMac);////////////////////////////////////////////////////////////////////////// 1. 创建一个无名管道。// 2. 创建一个IPCONFIG 的进程,并将输出重定向到管道。// 3. 从管道获取命令行返回的所有信息放入缓冲区lpszBuffer。// 4. 从缓冲区lpszBuffer中获得抽取出MAC串。//// 提示:可以方便的由此程序获得IP地址等其他信息。// 对于其他的可以通过其他命令方式得到的信息只需改变strFetCmd 和 // str4Search的内容即可。///////////////////////////////////////////////////////////////////////////BOOL GetMacByCmd(char *lpszMac){ //初始化返回MAC地址缓冲区 memset(lpszMac, 0x00, sizeof(lpszMac)); BOOL bret; SECURITY_ATTRIBUTES sa; HANDLE hReadPipe,hWritePipe; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; //创建管道 bret = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0); if(!bret) { return FALSE; } //控制命令行窗口信息 STARTUPINFO si; //返回进程信息 PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWritePipe; si.hStdOutput = hWritePipe; si.wShowWindow = SW_HIDE; //隐藏命令行窗口 si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //创建获取命令行进程 bret = CreateProcess (NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi ); char szBuffer[MAX_COMMAND_SIZE+1]; //放置命令行输出缓冲区 string strBuffer; if (bret) { WaitForSingleObject (pi.hProcess, INFINITE); unsigned long count; CloseHandle(hWritePipe); memset(szBuffer, 0x00, sizeof(szBuffer)); bret = ReadFile(hReadPipe, szBuffer, MAX_COMMAND_SIZE, &count, 0); if(!bret) { //关闭所有的句柄 CloseHandle(hWritePipe); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); CloseHandle(hReadPipe); return FALSE; } else { strBuffer = szBuffer; long ipos; ipos = strBuffer.find(str4Search); //提取MAC地址串 strBuffer = strBuffer.substr(ipos+str4Search.length()); ipos = strBuffer.find("\n"); strBuffer = strBuffer.substr(0, ipos); } } memset(szBuffer, 0x00, sizeof(szBuffer)); strcpy(szBuffer, strBuffer.c_str()); //去掉中间的“00-50-EB-0F-27-82”中间的'-'得到0050EB0F2782 int j = 0; for(int i=0; i<strlen(szBuffer); i++) { if(szBuffer[i] != '-') { lpszMac[j] = szBuffer[i]; j++; } } //关闭所有的句柄 CloseHandle(hWritePipe); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); CloseHandle(hReadPipe); return TRUE;} 3楼的方法可以尝试在project->Setting里添加库文件“iphlpapi.lib” 多谢各位/////////ipconfig.exe 又是调用了什么函数呢 适用枚举系统注册键,然后读设备判断可以获得当前正在工作的网卡的物理地址其它方法,都可能获得一个虚拟的MAC(假的MAC映射)如下代码供参考:int GetMACreg(BYTE *an){ CMyRegKey regKey; TCHAR sz[256]; CString strClassID(_T("")); TCHAR szSubKey[256]={0}; int iRet = -1; DWORD dwIndex=0; _tcscpy(sz,_T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards")); if(regKey.RegOpen(HKEY_LOCAL_MACHINE,sz,TRUE) == ERROR_SUCCESS) { while(TRUE) { if(regKey.EnumSubKey(dwIndex,szSubKey,255) != ERROR_SUCCESS) { dwIndex++; break; } dwIndex++; if(_tcslen(szSubKey) <= 0) break; CMyRegKey regSub; _stprintf( sz, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\%s"), szSubKey); if(regSub.RegOpen(HKEY_LOCAL_MACHINE,sz,TRUE) != ERROR_SUCCESS) break; strClassID = _T(""); if(regSub.RegRead(_T("ServiceName"),strClassID) != ERROR_SUCCESS) { regSub.RegClose(); continue; } regSub.RegClose(); if(strClassID.GetLength() < 10) continue; //_stprintf(sz,_T("%d\r\n%s\r\n%s"),dwIndex,szSubKey,strClassID); //AfxMessageBox(sz); HANDLE hHandle; hHandle=CreateFile( _T("//./")+strClassID, FILE_SHARE_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,//CREATE_ALWAYS, 0 , NULL); if(hHandle == INVALID_HANDLE_VALUE) continue ; DWORD dw=0; int iBuf = 0x01010101; BYTE outBuf[256]={0}; TCHAR zz[32]={0}; if(DeviceIoControl(hHandle, 0x00170002, &iBuf,4, outBuf,256, &dw, NULL)) { //AfxMessageBox("ok--"); memcpy(an,outBuf,6); iRet = 6; break; } CloseHandle(hHandle); } } if(dwIndex > 0) regKey.RegClose(); return iRet;} 你就是想研究ipconfig看看这个,这面说微软有示例代码http://topic.csdn.net/u/20080717/11/540ea3fc-c584-46c2-82ee-4c64f277a343.html 你就是想研究ipconfig看看这个,这面说微软有示例代码http://topic.csdn.net/u/20080717/11/540ea3fc-c584-46c2-82ee-4c64f277a343.html IPHELPER apiGetAdaptersInfo() 在SDI中同时有多个属性表单 p2p demo,内网nat穿透,至今未发现穿不透的防火墙,欢迎下载 打开对话框把要绘制的图形覆盖了~~ 关于一个HTTP协议的东西 请问,用VC6能否开发出像XP那样的界面啊?? 关于OpenGL的纹理贴图与深度缓存的问题,不明白什么原因,求高手指点 各位大虾,小的泣血求救(dll里的dialog使用activex控件的问题) 请问怎么得到子窗口相对于主窗口的位置? 还是关于ADO结果集中数据类型转换的问题 如何把图片文件加到自己的文件格式当中?又如何取出来? 关于对话框背景图片 CListCtrl控件如何实现合并单元格
http://it.china-b.com/cxsj/vc/20090612/102470_1.html
GetAdaptersAddress();
// 个人认为比较简单的方法,如下:
// 增加头文件:#include "iphlpapi.h"
// 包含库文件:#pragma comment(lib, "iphlpapi.lib")
// iphlpapi.lib网上可以下载到
BOOL GetMacAddress(CString &strMac)
{
PIP_ADAPTER_INFO pAdapterInfo;
DWORD AdapterInfoSize;
TCHAR szMac[32] = {0};
DWORD Err;
AdapterInfoSize = 0;
Err = GetAdaptersInfo(NULL, &AdapterInfoSize);
if((Err != 0) && (Err != ERROR_BUFFER_OVERFLOW))
{
TRACE("获得网卡信息失败!");
return FALSE;
}
// 分配网卡信息内存
pAdapterInfo = (PIP_ADAPTER_INFO)GlobalAlloc(GPTR, AdapterInfoSize);
if(pAdapterInfo == NULL)
{
TRACE("分配网卡信息内存失败");
return FALSE;
}
if(GetAdaptersInfo(pAdapterInfo, &AdapterInfoSize) != 0)
{
TRACE(_T("获得网卡信息失败!\n"));
GlobalFree(pAdapterInfo);
return FALSE;
}
strMac.Format(_T("%02X%02X%02X%02X%02X%02X"),
pAdapterInfo->Address[0],
pAdapterInfo->Address[1],
pAdapterInfo->Address[2],
pAdapterInfo->Address[3],
pAdapterInfo->Address[4],
pAdapterInfo->Address[5]);
GlobalFree(pAdapterInfo);
return TRUE; }
1)注意:必须在project->Setting里添加库文件“netapi32.lib”
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <httpext.h>
#include <windef.h>
#include <Nb30.h>
int getMAC(char * mac)
{
NCB ncb;
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
ASTAT Adapter;
typedef struct _LANA_ENUM
{ // le
UCHAR length;
UCHAR lana[MAX_LANA];
}LANA_ENUM ;
LANA_ENUM lana_enum;
UCHAR uRetCode;
memset(&ncb, 0, sizeof(ncb));
memset(&lana_enum, 0, sizeof(lana_enum));
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *)&lana_enum;
ncb.ncb_length = sizeof(LANA_ENUM);
uRetCode = Netbios(&ncb);
if(uRetCode != NRC_GOODRET)
return uRetCode;
for(int lana=0; lana&l
2)t;lana_enum.length; lana++)
{
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = lana_enum.lana[lana];
uRetCode = Netbios(&ncb);
if(uRetCode == NRC_GOODRET)
break;
}
if(uRetCode != NRC_GOODRET)
return uRetCode;
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_enum.lana[0];
strcpy((char*)ncb.ncb_callname, "*");
ncb.ncb_buffer = (unsigned char *)&Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(&ncb);
if(uRetCode != NRC_GOODRET)
return uRetCode;
sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]
);
return 0;
}
int main(int argc, char* argv[])
{
char mac[200];
getMAC(mac);
printf(" mac : %s \n",mac);
return 0;
}
3)注意:必须在project->Setting里添加库文件“netapi32.lib”。
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <httpext.h>
#include <windef.h>
#include <Nb30.h>
int getMAC(char * mac)
{
NCB ncb;
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
ASTAT Adapter;
typedef struct _LANA_ENUM
{ // le
UCHAR length;
UCHAR lana[MAX_LANA];
}LANA_ENUM ;
LANA_ENUM lana_enum;
UCHAR uRetCode;
memset(&ncb, 0, sizeof(ncb));
memset(&lana_enum, 0, sizeof(lana_enum));
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer = (unsigned char *)&lana_enum;
ncb.ncb_length = sizeof(LANA_ENUM);
uRetCode = Netbios(&ncb);
if(uRetCode != NRC_GOODRET)
return uRetCode;
for(int lana=0; lana<lana_enum.length; lana++)
{
ncb.ncb_command = NCBRESET;
uRetCode = Netbios(&ncb);
if(uRetCode == NRC_GOODRET)
break;
}
if(uRetCode != NRC_GOODRET)
return uRetCode;
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = lana_enum.lana[0];
strcpy((char*)ncb.ncb_callname, "*");
ncb.ncb_buffer = (unsigned char *)&Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(&ncb);
if(uRetCode != NRC_GOODRET)
return uRetCode;
sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]
);
return 0;
}
int main(int argc, char* argv[])
{
char mac[200];
getMAC(mac);
printf(" mac : %s \n",mac);
return 0;
}
#include <string>
#include <iostream>
using namespace std;
//命令行输出缓冲大小
const long MAX_COMMAND_SIZE = 10000;
//获取MAC命令行
char szFetCmd[] = "ipconfig /all";
//网卡MAC地址的前导信息
const string str4Search = "Physical Address. . . . . . . . . : ";
//用命令行方式获取网卡MAC地址
BOOL GetMacByCmd(char *lpszMac);
////////////////////////////////////////////////////////////////////////
// 1. 创建一个无名管道。
// 2. 创建一个IPCONFIG 的进程,并将输出重定向到管道。
// 3. 从管道获取命令行返回的所有信息放入缓冲区lpszBuffer。
// 4. 从缓冲区lpszBuffer中获得抽取出MAC串。
//
// 提示:可以方便的由此程序获得IP地址等其他信息。
// 对于其他的可以通过其他命令方式得到的信息只需改变strFetCmd 和
// str4Search的内容即可。
///////////////////////////////////////////////////////////////////////////
BOOL GetMacByCmd(char *lpszMac)
{
//初始化返回MAC地址缓冲区
memset(lpszMac, 0x00, sizeof(lpszMac));
BOOL bret;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe,hWritePipe;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
//创建管道
bret = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
if(!bret)
{
return FALSE;
}
//控制命令行窗口信息
STARTUPINFO si;
//返回进程信息
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWritePipe;
si.hStdOutput = hWritePipe;
si.wShowWindow = SW_HIDE; //隐藏命令行窗口
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//创建获取命令行进程
bret = CreateProcess (NULL, szFetCmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );
char szBuffer[MAX_COMMAND_SIZE+1]; //放置命令行输出缓冲区
string strBuffer;
if (bret)
{
WaitForSingleObject (pi.hProcess, INFINITE);
unsigned long count;
CloseHandle(hWritePipe);
memset(szBuffer, 0x00, sizeof(szBuffer));
bret = ReadFile(hReadPipe, szBuffer, MAX_COMMAND_SIZE, &count, 0);
if(!bret)
{
//关闭所有的句柄
CloseHandle(hWritePipe);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hReadPipe);
return FALSE;
}
else
{
strBuffer = szBuffer;
long ipos;
ipos = strBuffer.find(str4Search);
//提取MAC地址串
strBuffer = strBuffer.substr(ipos+str4Search.length());
ipos = strBuffer.find("\n");
strBuffer = strBuffer.substr(0, ipos);
}
}
memset(szBuffer, 0x00, sizeof(szBuffer));
strcpy(szBuffer, strBuffer.c_str());
//去掉中间的“00-50-EB-0F-27-82”中间的'-'得到0050EB0F2782
int j = 0;
for(int i=0; i<strlen(szBuffer); i++)
{
if(szBuffer[i] != '-')
{
lpszMac[j] = szBuffer[i];
j++;
}
}
//关闭所有的句柄
CloseHandle(hWritePipe);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hReadPipe);
return TRUE;
}
/////////
ipconfig.exe 又是调用了什么函数呢
可以获得当前正在工作的网卡的物理地址
其它方法,都可能获得一个虚拟的MAC(假的MAC映射)如下代码供参考:int GetMACreg(BYTE *an)
{
CMyRegKey regKey;
TCHAR sz[256];
CString strClassID(_T(""));
TCHAR szSubKey[256]={0};
int iRet = -1;
DWORD dwIndex=0;
_tcscpy(sz,_T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"));
if(regKey.RegOpen(HKEY_LOCAL_MACHINE,sz,TRUE) == ERROR_SUCCESS)
{
while(TRUE)
{
if(regKey.EnumSubKey(dwIndex,szSubKey,255) != ERROR_SUCCESS)
{
dwIndex++;
break;
}
dwIndex++;
if(_tcslen(szSubKey) <= 0) break;
CMyRegKey regSub;
_stprintf( sz,
_T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\%s"),
szSubKey);
if(regSub.RegOpen(HKEY_LOCAL_MACHINE,sz,TRUE) != ERROR_SUCCESS) break;
strClassID = _T("");
if(regSub.RegRead(_T("ServiceName"),strClassID) != ERROR_SUCCESS)
{
regSub.RegClose();
continue;
}
regSub.RegClose();
if(strClassID.GetLength() < 10) continue;
//_stprintf(sz,_T("%d\r\n%s\r\n%s"),dwIndex,szSubKey,strClassID);
//AfxMessageBox(sz);
HANDLE hHandle;
hHandle=CreateFile( _T("//./")+strClassID,
FILE_SHARE_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,//CREATE_ALWAYS,
0 ,
NULL);
if(hHandle == INVALID_HANDLE_VALUE) continue ; DWORD dw=0;
int iBuf = 0x01010101;
BYTE outBuf[256]={0};
TCHAR zz[32]={0};
if(DeviceIoControl(hHandle,
0x00170002,
&iBuf,4,
outBuf,256,
&dw,
NULL))
{
//AfxMessageBox("ok--");
memcpy(an,outBuf,6);
iRet = 6;
break;
}
CloseHandle(hHandle);
}
}
if(dwIndex > 0) regKey.RegClose();
return iRet;
}
看看这个,这面说微软有示例代码
http://topic.csdn.net/u/20080717/11/540ea3fc-c584-46c2-82ee-4c64f277a343.html
看看这个,这面说微软有示例代码
http://topic.csdn.net/u/20080717/11/540ea3fc-c584-46c2-82ee-4c64f277a343.html
GetAdaptersInfo()