PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

PLM之家PLMHome-国产软件践行者

[转载电子书] C++的方式获取当前系统的MAC物理地址

[复制链接]

2017-10-11 21:24:30 2734 0

admin 发表于 2017-10-11 21:24:30 |阅读模式

admin 楼主

2017-10-11 21:24:30

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
: K5 P+ y# i8 J& J: j7 Z$ u
/ y( }; J3 F  e3 R4 Q4 I: n: I

0 c$ A! [" I( u  q' D$ `& |( ?5 t// 头文件包含
& C/ z9 {: q, S+ q, k5 _
#include "stdafx.h"
* x! Y) Z6 c# A. u: v#include
<WinSock2.h>
/ n& P! D9 F/ f, c( x- d#include
<Iphlpapi.h>7 N6 E) n9 q0 G9 K) h8 R8 n; f' F
#include
<iostream>9 N9 t' g0 U3 l8 k- ]
using namespace std;
; L$ X& L4 V# A9 q: F, r
// 函数声明, q% n! |0 `" l
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
' B8 \* b& G* W" i3 x
// 程序入口
$ h; B4 U3 c' `1 l0 J8 L5 R
int _tmain(int argc, _TCHAR* argv[])' X: K2 m. k6 o/ {% p
{
8 i7 S5 s( N" K- d8 {* E6 e   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
) S2 U9 V+ i' O& s& ^: n/ x3 F! k  N
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
% x9 s1 Y8 h0 c, Q/ v8 _; d* s: y   
//得到结构体大小,用于GetAdaptersInfo参数
* z% F& }0 s; A% Z# K. x/ |
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);
# l3 x6 R/ p0 s9 n   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量
. h( w8 w! P, T, r
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);
& T' p$ m, |/ M0 j2 Q( z& [   
if (ERROR_BUFFER_OVERFLOW==nRel)
% B. I3 w5 o3 b) G* B    {0 B; ~8 t  r& I# S  A4 F
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW; b$ |- ~8 ^; K% D) F- L! w1 i' R9 q
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小
# G7 j( |6 o2 x+ z0 L- o$ d0 S3 M        
//这也是说明为什么stSize既是一个输入量也是一个输出量
. V$ l- D) y4 e2 z        
//释放原来的内存空间
! b: \/ m2 ?% ?& d, z7 |' l
        delete pIpAdapterInfo;
- ^) P/ s7 F* e$ z, u1 ~* F- J- ]        
//重新申请内存空间用来存储所有网卡信息
& W7 C* \4 |$ v' ?
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];
) b1 d- O7 Y9 N" {& r        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量
# Q) {% `; B6 Y: |
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    + _) n" Q" t- g. P2 @# Q/ m% ~3 E
    }
7 z' v2 i* r; S6 ~0 x   
if (ERROR_SUCCESS==nRel)
5 o! h% W0 r1 K9 r9 F+ ?$ p! j    {
+ k& w5 V; K# g7 S4 f2 H# ?        
//输出网卡信息' `& N+ n  ?+ ~7 v5 k1 Q
        output(pIpAdapterInfo);  ~$ M. K6 j" d5 J; q/ E
    }5 n: |, y7 j# ~( @, Q) W! z' Y
   
//释放内存空间* {* X9 C7 h9 v4 W* N* {
    if (pIpAdapterInfo)1 ?0 R! S) a6 _& H* z
    {" B+ ]' _! G; u$ A/ ?
        delete pIpAdapterInfo;
% p1 l. W$ g1 d/ X" ?& \8 Z7 m9 h0 |    }
- @! ]: ^( m0 m    getchar();3 Z/ d/ N5 F  r7 ~, ?: B
   
return 0;$ i" i+ Y6 i5 T) p0 F, e! ]5 _
}
" G' J7 o# Q) y9 T- o: B
///函数作用,输出网卡信息0 Z" ~+ G( s% K6 K) a
void output(PIP_ADAPTER_INFO pIpAdapterInfo)$ u+ L1 J3 {+ M! }& b. W' m
{
& m* v* j, H# o& B4 }! r" L8 m: O# M   
//可能有多网卡,因此通过循环去判断- \. F- n; _0 F) @
    while (pIpAdapterInfo)
& S! e1 x0 I6 P2 a0 g! E    {
0 R0 U5 ]/ d- c6 {. {' T        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;( o; d8 i: {6 ]& d9 e
        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
) U0 u2 U! R. N2 R8 P9 O5 V$ ]0 |        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;
  Q, j- A) m8 x" O# A        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)0 X. x9 C7 F. a3 e- C' W
        
if (i==pIpAdapterInfo->AddressLength-1)4 P( G. ~0 E. {* B
        {
" b* D! c, H( d- |6 \* p/ K& G) _            printf(
"%02x\n", pIpAdapterInfo->Address);2 x1 D$ Y4 {- Q/ y+ P$ F& }
        }  b  Q7 f2 i( V' t9 V  }
        
else, d. {* \& X& S) z
        {* j& P) @, ^+ C7 M+ B* S4 A! ?
            printf(
"%02x-", pIpAdapterInfo->Address);
; q3 N, f  u& x( `5 W        }
& r% s' T2 O! ?* t9 v8 ~        cout
<<"网卡IP地址如下:"<<endl;  l+ K4 X- ~$ g, t0 V( [. ?
        
//可能网卡有多IP,因此通过循环去判断3 q2 }8 ?  y- X3 u, y% i# ?5 a, S
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
: v" X  K  h, v  R& F        
do   g; c" t0 n4 Z, f( h5 a9 O
        {
" W& m6 X; ~6 ?            cout
<<pIpAddrString->IpAddress.String<<endl;
) w4 E) I: v, @3 E            pIpAddrString
=pIpAddrString->Next;2 ?0 @9 g/ B/ h; F! |; c" r/ v( c
        }
while (pIpAddrString);7 G- F" _; N3 `) M3 V
        pIpAdapterInfo
= pIpAdapterInfo->Next;
! D1 W& e5 p# p. k% Y! z        cout
<<"*****************************************************"<<endl;
9 T2 @" P2 E" K- s    }* H; F8 [. w4 Z% x
   
return;: R  C6 @# r* q: S
}

( S8 L; e0 j# M5 }; U/ b% V4 R8 N( x
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了