cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1550|回复: 5

在CVI平台,有什么办法可以获取本机的MAC地址。

[复制链接]
发表于 2010-6-2 17:02:05 | 显示全部楼层 |阅读模式
请问:在CVI平台,有什么办法可以获取本机的MAC地址。
SDK平台下有没有获取MAC地址的函数?我没有查到。
期待中。。谢谢
发表于 2010-6-2 18:43:01 | 显示全部楼层
原贴地址:http://112183883.8tops.com/7CBBC ... 6E03DD57B_112183883

利用VBS脚本获取本机网卡MAC地址
摘自:原创 作者:十一狼

代码如下:

Dim mc,mo
Set mc=GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")
For Each mo In mc
If mo.IPEnabled=True Then
MsgBox "本机网卡MAC地址是: " & mo.MacAddress
Exit For
End If
Next
发表于 2010-6-2 18:43:55 | 显示全部楼层
以前LABVIEW区的lgh269兄弟以前说过,我才记起来,他做过类似的!然后在CVI中也可以使用同样的办法,用VBS做,将这些脚本写入文件,然后再运行就可以实现出来的!不过也要研究一下如何做才行!
发表于 2010-6-2 18:44:30 | 显示全部楼层
在LABVIEW中是用system exec.vi执行系统的指令,在CVI中也有相同的FP可以用的,可以这样使用,然后取取得的值返回就可以了!
发表于 2010-6-2 18:50:46 | 显示全部楼层


另一个方法可以用这个,我也是在网上查的:
原贴地址:http://hi.baidu.com/isbx/blog/item/7fcd5d60d78da1da8cb10d4c.html

VC下获得网卡MAC,IP等信息的最简单方法
2008-07-15 13:51
今天闲着无聊就想来做点试验,于是想到获得网卡的一些信息,开始网上狂搜,找到的方法都很麻烦,后来在一个Delphi技术网站发现一个简单方法,于是我将他代码翻译了一下,加入了一些其他的功能(他程序主要是获得MAC).下面详细介绍下方法.获得MAC:网上很多都是获得网卡信息然后在获得MAC,或者从注册表里读,不过这里介绍一个简单的方法用到一个API
RPC_STATUS RPC_ENTRY UuidCreateSequential(UUID* Uuid);
这个API可以获得MAC地址
他返回信息如下
RPC_S_OK                                     The call succeeded.
RPC_S_UUID_LOCAL_ONLY            The UUID is guaranteed to be unique to this computer only.
RPC_S_UUID_NO_ADDRESS           Cannot get Ethernet or token-ring hardware address for this computer.
正常返回是第一个 所以我们用下面的代码获得到MAC地址long rt;  
UUID ui;
   char mac[6][10]={0};
   CString temp;
   CString Mac;
   rt = UuidCreateSequential(&ui);
   if (rt == RPC_S_OK)
   {
         _itoa(ui.Data4[2],mac[0],16);
        _itoa(ui.Data4[3],mac[1],16);
        _itoa(ui.Data4[4],mac[2],16);
        _itoa(ui.Data4[5],mac[3],16);
        _itoa(ui.Data4[6],mac[4],16);
        _itoa(ui.Data4[7],mac[5],16);
   }
   for(int n=0;n<6;n++)
   {
        if (strlen(mac[n]) == 1)
        {
             temp.Format("0%s",mac[n]);
             strcpy(mac[n],temp);
        }
   }
   Mac.Format("%s.%s.%s.%s.%s.%s",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
   SetDlgItemText(IDC_EDIT1,Mac);
这样就完成了第一个获得到MAC地址,至于为什么要循环一次是因为转成16进制以后是一位比如0.0.0.0.0.0但是MAC地址一般是16进制,所以是00所以加个0而已00.00.00.00.00.00下面是获得IP和主机名char name[255]={0};
   CString ip;
hostent *addr;
   ::AfxSocketInit();
    if(gethostname(name,sizeof(name))==0)
    {
         if((addr=gethostbyname(name)) != NULL)
         {
              ip = inet_ntoa(*(in_addr*)*addr->h_addr_list);
         }
    }
   SetDlgItemText(IDC_EDIT2,name);
   SetDlgItemText(IDC_IPADDRESS1,ip);
这个原理很简单先获得主机名,然后通过主机名获得到对应的IP.
需要注意的是,开始需要引用
#i nclude <afxsock.h>
这样才可以正常获得主机名,
至于MAC需要使用到
Rpcrt4.dll
这个文件(系统目录下)
所以需要引用库和头文件
#i nclude "Rpcdce.h"
#pragma comment(lib,"Rpcrt4.lib")

这样这个最简单的获得MAC和IP以及主机名的程序就完成了.

 楼主| 发表于 2010-6-3 11:07:46 | 显示全部楼层
太感谢了,版主真是尽心尽力啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-12 09:23 , Processed in 1.114561 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表