找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4752|回复: 0

VLisp 读取网卡 MAC 地址

[复制链接]

32

主题

8

回帖

0

精华

铜牌会员

积分
110
发表于 2011-8-8 14:17:33 | 显示全部楼层 |阅读模式
申请核心会员
转载请注明出处

使用Lisp语言读取MAC地址, 目前最合适的方法是通过WMI实现. 但是网上可查到的几种方法都有一个弊端, 就是通过识别ID为”本地连接”的设备来读取MAC, 并且标注为仅支持中文系统.

事实上这是行不通的, 如果你研究过系统的克隆, 你就会发现,”本地连接 2”是XP系统经常出现的一个问题.

在DOSLib 6.1中也具备读取MAC的函数, 但是貌似实现的方法是读取最后一个MAC地址, 当你把一个Windows Mobile 系统的手机连到电脑上, 它竟然返回手机的MAC…

经过对流行代码的少量修改, 写出了一个能返回所有设备MAC地址列表的小程序, 源码如下:

#!lisp
;;; 获取网卡MAC地址
;;; 对win2000系统的兼容性未做测试
;;; 暂不知道是否会读取到非网卡设备
(defun macaddr (/ mac WMIobj con lox sn)
        (vl-load-com)
        (if (setq WMIobj (vlax-create-object "wbemScripting.SwbemLocator"))
                (progn
                        (setq con (vl-catch-all-apply 'vlax-invoke (list WMIobj 'ConnectServer "." "" "" "" "" "" 128 nil)))
                        (if (vl-catch-all-error-p con)
                                (setq con (vlax-invoke WMIobj 'ConnectServer "." "" "" "" "" ""))
                        )
                        (setq lox (vlax-invoke con 'ExecQuery "Select * From Win32_NetworkAdapter"))
                        (vlax-for i lox
                                (if (vlax-get i 'NetConnectionID)
                                        (progn
                                                (setq sn (vlax-get i 'MACAddress))
                                                (or
                                                        (member sn mac)
                                                        (setq mac (cons sn mac))
                                                )
                                        )
                                )
                        )
                        (mapcar        'vlax-release-object
                                (list lox con WMIobj)
                        )
                )
        )
        (reverse mac)
)
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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