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 2791 0

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

admin 楼主

2017-10-11 21:24:30

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

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

x

% N+ Q" \; W( l3 l) y
1 a3 t9 o% y+ _. h" }4 q8 {5 l6 @, e. j1 P: p4 \
// 头文件包含
, \6 }0 D1 ^" p6 ~8 N, A  N
#include "stdafx.h"& T4 Q( d  ?! A) C
#include
<WinSock2.h>
9 }( h! X6 ^- s/ j* q8 U1 d#include
<Iphlpapi.h>( O: f! |) A4 C; m, e9 ^& B+ G3 G# @
#include
<iostream>3 L. N" e* T) o' k* g
using namespace std;: R; A* R& B% ?( ?; w2 G1 J
// 函数声明# Q$ q3 I' C' M  j
void output(PIP_ADAPTER_INFO pIpAdapterInfo);
4 d6 L# a1 C3 i' i
// 程序入口& N6 p! |7 A% l
int _tmain(int argc, _TCHAR* argv[])2 y2 {, }- K* e  V: _5 h$ T$ q7 t1 k
{
3 z9 o# [1 B! }1 f* t2 J5 j   
//PIP_ADAPTER_INFO结构体指针存储本机网卡信息
3 T4 U, y6 s! ^! y# x% J# t
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();
; \3 P5 I  E: K9 M9 p   
//得到结构体大小,用于GetAdaptersInfo参数
9 Q9 {6 C& G* E0 _+ ~
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);% E0 x6 |5 w  w# p0 g$ L/ v3 J, I
   
//调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量: ^$ z$ `7 h0 x3 |8 T% i
    int nRel = GetAdaptersInfo(pIpAdapterInfo,&stSize);/ |$ s& d  ]" g. q  S/ z1 U# H6 K) z
   
if (ERROR_BUFFER_OVERFLOW==nRel)5 D; T, p9 e. L' x" U  {: D# P
    {" \9 M9 n5 ]( E7 ~  }6 x' T
         
//如果函数返回的是ERROR_BUFFER_OVERFLOW) n5 U1 X- R9 J4 ~; a1 N  g
    //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小# S) @) _2 a$ R; U. q7 P) O  `
        
//这也是说明为什么stSize既是一个输入量也是一个输出量
" r% S( S9 d  N" K/ g        
//释放原来的内存空间
3 m" P0 [, X, O) @( m  z3 f$ C: p
        delete pIpAdapterInfo;
% H5 {9 R6 |8 B. A2 j        
//重新申请内存空间用来存储所有网卡信息% n. ?0 V/ ]) n1 ~9 z9 M
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];  a) {( a  m+ P2 F! @, H
        
//再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量4 k8 B9 _! c& d3 |+ Z$ W
        nRel=GetAdaptersInfo(pIpAdapterInfo,&stSize);    ' P6 T) H$ w" `: D5 H& {3 k' y& v
    }! g3 b8 u( r- ?# M
   
if (ERROR_SUCCESS==nRel)
7 h8 _+ ~# S' s+ ?+ V/ \( s" E- p- E    {; s" K+ q) H( @7 {' t7 X
        
//输出网卡信息
( M# B5 o  c0 s8 K; L1 S$ Y0 _! X
        output(pIpAdapterInfo);6 t6 b9 P  u, t
    }2 b8 Z+ Y2 z; `' k
   
//释放内存空间
9 U7 a- I, }; @2 W
    if (pIpAdapterInfo)" ^: m; G- Z' T
    {
& J8 L* i2 V* {! [  A        delete pIpAdapterInfo;
' d- S1 k4 b  p$ i% p5 y    }% ^" i4 }1 o8 q
    getchar();
* o9 R1 e& `& [0 l0 M1 w/ h' H! A   
return 0;
' J! c. o$ E: @& i7 y, _}
8 o' o) ~& C" Z" m+ ?4 z
///函数作用,输出网卡信息
0 E2 C% ~. V8 |7 t$ P! b' X
void output(PIP_ADAPTER_INFO pIpAdapterInfo)7 f* j7 e9 d" h# z) W
{& ]7 k+ [( t* p: o; c4 \. V! I$ V
   
//可能有多网卡,因此通过循环去判断
9 P$ [# \2 y6 M- k) @3 u0 l! T% B
    while (pIpAdapterInfo)
: Q* ?! X$ U& P    {
. ~$ M5 a8 f( I        cout
<<"网卡名称:"<<pIpAdapterInfo->AdapterName<<endl;
  N. M* I  d: I: ~% R! s        cout
<<"网卡描述:"<<pIpAdapterInfo->Description<<endl;
$ U  D1 |6 j& ~' E" f% \& q. J        cout
<<"网卡MAC地址:"<<pIpAdapterInfo->Address;( ]  A/ [- j- t' f9 x! f' V
        
for (UINT i = 0; i < pIpAdapterInfo->AddressLength; i++)0 G8 [4 T# C: i/ E7 m
        
if (i==pIpAdapterInfo->AddressLength-1)7 j& ]) K2 \( |* @; d  L7 q4 Q
        {
3 v3 v% [8 S! K5 U' z            printf(
"%02x\n", pIpAdapterInfo->Address);
3 ^9 i% o. U0 P( a, t, R' @        }
' O: _! H( C: z9 P0 S7 }        
else
$ m# {4 p' r( u5 G% l        {
6 I; v- s" `) y            printf(
"%02x-", pIpAdapterInfo->Address);
& U6 ~1 L2 `& u4 h4 v/ P- d        }
- a9 O+ L; }0 w: r' X        cout
<<"网卡IP地址如下:"<<endl;5 Y. x8 ^4 L6 ?  o$ |& E3 I1 o+ }
        
//可能网卡有多IP,因此通过循环去判断& Q) v4 j. ]7 ^' c9 F
        IP_ADDR_STRING *pIpAddrString =&(pIpAdapterInfo->IpAddressList);
* i0 h; G# W- @# C9 r  d5 |) H        
do
6 v0 g2 h6 O3 ?; P6 Y        {
, I: P8 O3 P, X2 ]            cout
<<pIpAddrString->IpAddress.String<<endl;
" q* T. V* N4 R4 e  [            pIpAddrString
=pIpAddrString->Next;8 H/ ]3 d$ r$ T! N- I/ K
        }
while (pIpAddrString);5 a) M& N( B7 p
        pIpAdapterInfo
= pIpAdapterInfo->Next;
1 M( Q1 K. C  e2 \$ c: [2 p        cout
<<"*****************************************************"<<endl;
0 l$ F4 `8 a. I7 k7 Y1 l; ?  x    }: _, ?' G3 \; A6 t; H' w5 K- ]
   
return;# }* g; V9 n. j: X" f
}
! @( V2 P  o# j. P
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了