正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
(一)最近要熟悉新工作中一个软件打包脚本工具NSIS,学了一个下午,知道了大概,由于需求要获取机器的Mac地址,先上网摆渡了一下,发现了一个牛人的留言,没有用到NSIS的插件,现代码整理如下:
- Name "GetMacAddressWithoutPlugin"
- OutFile "GetMacAddressWithoutPlugin.exe"
- ShowInstDetails show
- #此例子转自CSDN上一个牛人的回复,目前我还没弄明白那参数是什么意思,怎么传的,希望热心牛人给予解释
- # ------ 引入Logiclib.nsh宏来提供各种逻辑基本语句,不需要预先添加函数 ------
- !include "Logiclib.nsh"
- Var "MacAddress"
- Function .GetMacAddress
- System::Call Iphlpapi::GetAdaptersInfo(i,*i.r0)
- System::Alloc $0
- Pop $1
- System::Call Iphlpapi::GetAdaptersInfo(ir1r2,*ir0)i.r0
- StrCmp $0 0 0 finish
- loop:
- StrCmp $2 0 finish
- System::Call '*$2(i.r2,i,&t260.s,&t132.s,i.r5)i.r0' ;Unicode版将t改为m
- IntOp $3 403 + $5
- StrCpy $6 ""
- ${For} $4 404 $3
- IntOp $7 $0 + $4
- System::Call '*$7(&i1.r7)'
- IntFmt $7 "%02X" $7
- StrCpy $6 "$6$7"
- StrCmp $4 $3 +2
- StrCpy $6 "$6-"
- ${Next}
- StrCpy $MacAddress $6
- Goto loop
- finish:
- System::Free $1
- FunctionEnd
- Section
- Call .GetMacAddress
- DetailPrint "当前机器Mac地址为: $MacAddress"
- SectionEnd
复制代码1.首先要引入Logiclib.nsh宏定义。 2.通过调用系统函数来完成对Mac地址的获取。 3.此代码生成的可执行文件大小为40kb。 4.望哪位热心大牛能给解释下调用系统函数时传递的参数的意思,拜谢!
我是把它写在一个函数中了,有需要的,可以像我一样定义一个全局变量“MacAddress”,将取到的值赋给“$MacAddress”以留备用。 此代码在本人机器上运行结果如下:
(二)本人调用两个插件完成对机器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”以留备用。 此代码在本人机器上运行结果如下:
最后总结下,调用插件的确比较占空间,对于一向以追求以最小空间完成打包程序的NSIS来说,前者调用系统函数更好些;如果不追求升那点空间,我个人更觉得后者更合适。
|