NSIS教程(4): 调用Windows API

NSIS调用win32 API(也可以是其他dll提供的导出接口)需要通过System::Call来调用,调用语法如下:

System::Call PROC [( PARAMS ) [RETURN [? OPTIONS]]]

每个参数由三个值组合而成: 类型、源、目标。注意是每个参数都是由三个值组合而成。
类型:可以是一个整数,一个字串,等等。
源: 就是参数值的源,可以是一个 NSIS 变量( 0 1、$INSTDIR),NSIS 堆栈,一个具体的值(5、”test”,等等)或空(NULL)。
目标: 就是调用返回后的参数值,可以是 NSIS 变量,NSIS 堆栈或空(意味着该输出不需要)。如果不需要源或目标的话可以用一个句点表示(.)。

NSIS教程(4): 调用Windows API_第1张图片

NSIS教程(4): 调用Windows API_第2张图片

NSIS教程(4): 调用Windows API_第3张图片

详细介绍可以参考官方文档:
http://nsis.sourceforge.net/Docs/System/System.html

● 实例

  • 调用win32 API: int AddFontResource(LPCTSTR lpszFilename);
System::Call "GDI32::AddFontResource(t'$FONTS\${fontFilename}') i.r0"
# 返回值保存在$0

或者
System::Call "GDI32::AddFontResource(t'$FONTS\${fontFilename}') i.s"
Pop $R9
# 将返回值保存在NSIS堆栈中,使用Pop弹出到指定变量
  • 调用win32 API:BOOL WINAPI GetWindowRect(HWND hWnd, LPRECT lpRect);
# 使用*来声明一个新的结构,和RECT一样4个成员都是int
# 常用结构已经在"${NSISDIR}\Examples\System\System.nsh"声明
System::Call "*(i0,i0,i0,i0) i.r1"
System::Call "User32::GetWindowRect(i$HWNDPARENT, i$1)"
System::Call "*$1(i.r4,i.r5,i.r6,i.r7)"

你可能感兴趣的:(☆,NSIS安装包,打包狂魔之NSIS教程)