# thread.apiHook 库模块帮助文档

## thread 成员列表 <a id="thread" href="#thread">&#x23;</a>

### thread.apiHook <a id="thread.apiHook" href="#thread.apiHook">&#x23;</a>
多线程API函数钩子，多线程调用该API都会被拦截处理。  
仅拦截当前线程调用的钩子建议使用 raw.apiHook

### thread.apiHook("DLL","API名","函数原型",函数对象) <a id="thread.apiHook" href="#thread.apiHook">&#x23;</a>

```aardio
thread.apiHook(  
	"user32.dll",  
	"MessageBoxW",  
	"int(int,ustring,ustring,int)",   
	function(hwnd,text,caption,flag){  
		owner.callApi(hwnd, text, "API Hook: " + caption, flag)   

		/*可选通过 owner.callApi 调用原始函数,  
结构体等回调时必须传为指针参数,  
可通过 raw.mixin 修改修结构而不改变指针地址,  
注意这是线程回调函数,库需要单独引入*/  
		return true;  
	}  
).install();
```

### thread.apiHook() <a id="thread.apiHook" href="#thread.apiHook">&#x23;</a>
[返回对象:threadApihookObject](#threadApihookObject)

## threadApihookObject 成员列表 <a id="threadApihookObject" href="#threadApihookObject">&#x23;</a>

### threadApihookObject.install() <a id="threadApihookObject.install" href="#threadApihookObject.install">&#x23;</a>
安装钩子  

[返回对象:threadApihookObject](#threadApihookObject)

### threadApihookObject.unInstall() <a id="threadApihookObject.unInstall" href="#threadApihookObject.unInstall">&#x23;</a>
卸载钩子
