|
蓝色网际的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
|