杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2022|回复: 0

NSIS如何获取机器网卡Mac地址

[复制链接]
发表于 2016-9-2 14:57:18 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

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

x
(一)最近要熟悉新工作中一个软件打包脚本工具NSIS,学了一个下午,知道了大概,由于需求要获取机器的Mac地址,先上网摆渡了一下,发现了一个牛人的留言,没有用到NSIS的插件,现代码整理如下:
  1. Name "GetMacAddressWithoutPlugin"
  2. OutFile "GetMacAddressWithoutPlugin.exe"
  3. ShowInstDetails show

  4. #此例子转自CSDN上一个牛人的回复,目前我还没弄明白那参数是什么意思,怎么传的,希望热心牛人给予解释


  5. # ------ 引入Logiclib.nsh宏来提供各种逻辑基本语句,不需要预先添加函数 ------
  6. !include "Logiclib.nsh"

  7. Var "MacAddress"

  8. Function .GetMacAddress
  9.   System::Call Iphlpapi::GetAdaptersInfo(i,*i.r0)
  10.   System::Alloc $0
  11.   Pop $1
  12.   System::Call Iphlpapi::GetAdaptersInfo(ir1r2,*ir0)i.r0
  13.   StrCmp $0 0 0 finish
  14. loop:
  15.   StrCmp $2 0 finish
  16.   System::Call '*$2(i.r2,i,&t260.s,&t132.s,i.r5)i.r0' ;Unicode版将t改为m
  17.   IntOp $3 403 + $5
  18.   StrCpy $6 ""
  19.   ${For} $4 404 $3
  20.     IntOp $7 $0 + $4
  21.     System::Call '*$7(&i1.r7)'
  22.     IntFmt $7 "%02X" $7
  23.     StrCpy $6 "$6$7"
  24.     StrCmp $4 $3 +2
  25.     StrCpy $6 "$6-"
  26.   ${Next}
  27.   StrCpy $MacAddress $6
  28.   Goto loop
  29. finish:
  30.   System::Free $1
  31. FunctionEnd

  32. Section

  33.     Call .GetMacAddress
  34.     DetailPrint "当前机器Mac地址为: $MacAddress"

  35. SectionEnd
复制代码
1.首先要引入Logiclib.nsh宏定义。
  2.通过调用系统函数来完成对Mac地址的获取。
  3.此代码生成的可执行文件大小为40kb。
  4.望哪位热心大牛能给解释下调用系统函数时传递的参数的意思,拜谢!

  我是把它写在一个函数中了,有需要的,可以像我一样定义一个全局变量“MacAddress”,将取到的值赋给“$MacAddress”以留备用。
  此代码在本人机器上运行结果如下:

                                                      2011101223555218.png

  (二)本人调用两个插件完成对机器Mac地址的获取,代码比调用系统函数的清晰易读,现整理代码如下:
游客,如果您要查看本帖隐藏内容请回复

   1.此段代码需要调用两个插件,一个是ip.dll,用来获取当前机器的IPi地址;另一个是ipConfig.dll,用来获取Mac地址。
  2.首先先获取机器的IP地址,然后根据处理后的IP地址结果(处理成正常的IP格式,如:xxx.xx.xx.xxx)获取Adapter的ID号,最后通过Adapter的ID号获取机器的Mac地址。
  3.如果NSIS安装文件的根目录中Plugins文件下没有上述两个dll文件,请先到NSIS插件网站下载后,放入到Plugins文件中,方可进行运行调试。
  4.此代码生成的可执行文件大小为98kb,比上一个大了一倍多 - -!。

  我是把它写在一个函数中了,有需要的,可以定义一个全局变量“MacAddress”,将取到的值赋给“$MacAddress”以留备用。
  此代码在本人机器上运行结果如下:

                                                       2011101300105856.png

  最后总结下,调用插件的确比较占空间,对于一向以追求以最小空间完成打包程序的NSIS来说,前者调用系统函数更好些;如果不追求升那点空间,我个人更觉得后者更合适。


回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-17 23:26 , Processed in 0.122899 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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