您的位置: 首页 >> 文章首页 >> NSIS脚本教程 >> RSS订阅当前栏目
请教nsis一个system的调用实例
日期:2008-6-27 0:06:57 作者: 来源:

蓝色网际的ACD3.1脚本有,有这样一段:
Function .onInit
InitPluginsDir
File "/oname=${io}" ".\resource\acdsee.ini"
!ifdef MultiLanguage
!insertmacro MUI_LANGDLL_DISPLAY
!endif

ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ACDSee" "InstallDir"
${If} $0 == ""
System::Call "advapi32::GetUserName(t .r0, *i ${NSIS_MAX_STRLEN} r1) i.r2"
WriteINIStr "${io}" "Field 7" "State" $0
${else}
ReadRegStr $0 HKLM "SOFTWARE\ACD Systems\ACDSeeCS" LicenseNumber
..................
FunctionEnd


  其中System::Call "advapi32::GetUserName(t .r0, *i ${NSIS_MAX_STRLEN} r1) i.r2" 这句我总是无法透彻理解。
  这句中的.r0无疑是前面的$0,即用户名, r1应该指用户名的长度;r2应该是返回值,但前后文中并无对这个r2的指用。
  如果按我这个初学者使用这个调用,我大概会写成
System::Call "advapi32::GetUserName(t .r0, l 10) i.r2"
strcmp $2 0 0 +3
MessageBox MB_ICONEXCLAMATIONMB_OK "取用户名失败!"
strcpy $0 "Admin"
..........

  但我不知道这样写正不正确,也不知其所以然。如果不对返回值判断,那这个r2是否多余?

GetUserName 函数可以看这里
http://msdn.microsoft.com/library/default....getusername.asp
返回值 $2 是一个 BOOL 型变量,1 表示函数调用成功,否则 0 表示失败。
其实象下面这样就够了
System::Call "advapi32::GetUserName(t .s, *i ${NSIS_MAX_STRLEN})"
Pop $0
DetailPrint $0

 

热 点 文 章
热 点 文 章
请教nsis一个system的调用实例
nsis多语言安装程序,如何操作Unicode字符写入注册表?
关于nsis判断程序是否正在运行的问题
官方 NSIS 插件全集简单介绍, 做你想做的安装程序 ^_^
NSIS自定义页面的两个问题, 自定义页面的两个问题
nsis脚本语法问题
NSIS如何在已有页面中修改标题栏
nsis新式界面进度条颜色控制时不平滑的问题
nsis的组件互斥代码究竟该怎么写?
nsis选择组件页面页眉文本怎么修改?
推 荐 文 章
首页 | 广告联系 | 下载排行榜 | 最近更新 | 联系我们 |
>