aardio 文档

builtin 库模块帮助文档

::Kernel32 成员列表

::Kernel32.?

可不用声明直接在此输入函数名并调用API函数

一、传入参数规则:
1、null参数不可省略
2、32位整数类型,小于32位的整数、以及枚举类型都可以直接在API参数中写数值。
3、对于任何数值类型的指针(输出参数)一律使用结构体表示,例如double * v 表示为{ double v }
4、数组使用结构体表示
5、所有结构体传给API的都是指针地址,都是输出参数并增加返回值

二、返回值规则:
1、返回值默认为int类型,可用 >>> 0 强制转为无符号数,
2、可以使用[API尾标]改变返回值为其他类型

三、所有可用的【API尾标】:
::Kernel32.ApiNameW() 切换到Unicode版本,字符串UTF8-UTF16双向转换
::Kernel32.ApiNameA() 切换到ANSI版本,字符串不作任何转换
::Kernel32.ApiNameL() 返回值为64位LONG类型
::Kernel32.ApiNameP() 返回值为指针类型
::Kernel32.ApiNameD() 返回值为double浮点数
::Kernel32.ApiNameF() 返回值为float浮点数
::Kernel32.ApiNameB() 返回值为C++中的8位bool类型
注意【尾标】前必须是小写字母

::Kernel32.GetACP()

返回当前ANSI代码页

::Kernel32.GetFileAttributes()

获取参数 @1 指定路径的文件属性,文件不存在返回 -1。
参数 @1 应当使用 io.fullpath 转换为完整路径。

文件属性使用 FILE_ATTRIBUTE 前缀的常量表示。
使用 fsys.attrib 函数获取或修改文件属性更方便。

::Kernel32.GetSystemDefaultLCID()

返回系统默认区域 ID

::Kernel32.GetUserDefaultLangID()

返回当前用户使用的默认区域语言 ID,
这与系统设置:区域语言 / 格式 一致。
可使用 sys.locale.setUserDefault 函数修改此设置

::Kernel32.LocalFree(hMem)

一些API返回的内存句柄需要使用此函数释放,
@hMem参数指定内存句柄

::Kernel32.RtlMoveMemory(目标内存地址,源数据,源数据长度)

复制内存
此函数支持所有API兼容指针类型参数,直接操作内存请小心使用

源数据可以是字符串、内存指针、或结构体

::Kernel32.SetDllDirectory("DLL搜索目录")

设置加载DLL的默认目录

::Kernel32.SetDllDirectory(null)

恢复DLL默认搜索目录

::Kernel32.SetErrorMode(0)

显示所有系统错误对话框

::Kernel32.api("字符串参数","void()" )

声明Kernel32 API函数

::Kernel32.gethandle()

返回句柄

::User32 成员列表

::User32.?

可不用声明直接在此输入函数名并调用API函数

一、传入参数规则:
1、null参数不可省略
2、32位整数类型,小于32位的整数、以及枚举类型都可以直接在API参数中写数值。
3、对于任何数值类型的指针(输出参数)一律使用结构体表示,例如double * v 表示为{ double v }
4、数组使用结构体表示
5、所有结构体传给API的都是指针地址,都是输出参数并增加返回值

二、返回值规则:
1、返回值默认为int类型,可用 >>> 0 强制转为无符号数,
2、可以使用[API尾标]改变返回值为其他类型

三、所有可用的【API尾标】:
::User32.ApiNameW() 切换到Unicode版本,字符串UTF8-UTF16双向转换
::User32.ApiNameA() 切换到ANSI版本,字符串不作任何转换
::User32.ApiNameL() 返回值为64位LONG类型
::User32.ApiNameP() 返回值为指针类型
::User32.ApiNameD() 返回值为double浮点数
::User32.ApiNameF() 返回值为float浮点数
::User32.ApiNameB() 返回值为C++中的8位bool类型
注意【尾标】前必须是小写字母

::User32.DestroyWindow()

销毁窗口,
参数指定窗口句柄,也就是窗口对象的 hwnd 属性。
销毁窗口不会触发窗口的 onClose 事件,
但会触发 onDestroy 事件

::User32.GetCursorPos()

返回鼠标当前位置,参数应当是一个::POINT结构体
成功返回非零值

::User32.GetSystemMetrics()

返回系统系统与数值有关的设置,宽高有关的数值以像素为单位,
参数以 SM 前缀的常量指定要获取的设置索引

::User32.GetWindowThreadProcessId(hwnd,pid)

返回 @hwnd 参数指定窗口句柄的窗口所在线程 ID,
@pid 如果不为 null 则必须传入结构体 {addr value},
也可以改用 win.getThreadProcessId 函数

::User32.PostMessage

通过创建目标窗口线程的消息队列发送消息给目标窗口,不等待返回,
注意消息队列等待处理的消息超过 10000 条消息时将会丢弃消息

::User32.PostMessage(hwnd,message,wParam,lParam)

通过消息队列发送消息给目标窗口,不等待返回。
@hwnd 指定目标窗口句柄,设为 0xFFFF(65535) 则发送到所有顶层窗口。
参数@2为消息ID,一般是 WM 开头的常量。
一定要指定4个参数,省略参数输入null或0不可省略
注意不要在参数中包含在调用函数后可能释放的指针

::User32.SendMessage

发送消息到目标窗口,并等待返回,
如果目标窗口卡住,可能导致不必要的等待过程

::User32.SendMessage(hwnd,message,wParam,lParam)

发送消息到目标窗口,并等待返回。
@hwnd 指定目标窗口句柄,设为 0xFFFF(65535) 则发送到所有顶层窗口。
参数@2为消息ID,一般是 WM 开头的常量。
一定要指定4个参数,省略参数输入null或0不可省略

::User32.SendMessageTimeout

发送消息到目标窗口,并可设置超时参数

::User32.SendMessageTimeout(hwnd, message, wParam,lParam,flags,timeout,pRet)

用法请参考该 API 文档

::User32.SendNotifyMessage

发送消息到目标窗口,
发生到调用线程创建的窗口等待窗口消息处理完消息后返回,
发生到其他线程不等待立即返回。

注意这个函数并非将消息发送到消息队列,
不会因为消息队列满被丢弃

::User32.SendNotifyMessage(hwnd,message,wParam,lParam)

发送消息到目标窗口,
@hwnd 指定目标窗口句柄,设为 0xFFFF(65535) 则发送到所有顶层窗口。
参数@2为消息ID,一般是 WM 开头的常量。
一定要指定4个参数,省略参数输入null或0不可省略
注意不要在参数中包含在调用函数后可能释放的指针,
但对 0xFFFF 发送 _WM_SETTINGCHANGE 消息时可指定字符串参数

::User32.SetCursorPos(x,y)

设置鼠标当前位置,参数指定x,y坐标
成功返回非零值

::User32.SystemParametersInfo(uiAction,uiParam,pvParam,fWinIni)

设置或获取系统参数,
失败返回0,成功返回非零值,

参数@1指定 SPI 前缀常量,@pvParam 为指针或结构体指针,
其他参数都为无符号32位整数。参数 @4 设为 3 也即
_SPIF_UPDATEINIFILE | _SPIF_SENDWININICHANGE
用于刷新配置,读取值时参数 @4 设为 0 即可

这个函数的设置项非常多,细节请参考该 API 文档

::User32.api("字符串参数","void()" )

声明Kernel32 API函数

全局常量

::CopyMemory(目标内存地址,源地址,源数据长度)

复制内存
此函数调用::Kernel32.RtlMoveMemory

::CopyMemoryByStruct(目标内存地址,源结构体,源结构体长度)

复制结构体到目标内存
此函数调用::Kernel32.RtlMoveMemory

::FILETIME()

FILETIME 结构体,
用于表示自 1601年1月1日 开始以 100纳秒 为间隔的数值。
100纳秒 也就是 0.0001毫秒。

此结构体包含 2 个 32 无符号位整数字段:dwLowDateTime,dwHighDateTime。

标准库 fsys.time 可创建 ::FILETIME 兼容结构体,
并且提供了更多功能

::GetLastError()

返回系统错误代码

::GetModuleHandle(模块名)

返回动态链接库的模块句柄

::GlobalAlloc(分配选项,内存长度)

在进程堆上分配内存,
分配选项可选参数如下:

0x40/*_GPTR*/ 返回指针,内存数据初始化为零
0x42/*_GHND*/ 返回句柄,内存数据初始化为零,
0x0/*_GMEM_FIXED*/ 返回指针
0x2/*_GMEM_MOVEABLE*/ 返回句柄
内存句柄需要调用 ::GlobalLock 函数转换为内存指针

::GlobalFree(内存句柄)

释放::GlobalAlloc()分配的内存
如果成功返回null,否则返回传入句柄

::GlobalLock(内存句柄)

锁定::GlobalAlloc(0x2/*_GMEM_MOVEABLE*/)创建的内存句柄,
并返回内存指针指针

::GlobalReAlloc(内存句柄,新的长度,分配选项)

改变GlobalAlloc函数申请的内存大小
分配选项参考 GlobalAlloc() 说明

::GlobalSize(内存句柄)

获取内存长度

::GlobalUnlock(内存句柄)

解锁::GlobalAlloc(0x2/*_GMEM_MOVEABLE*/)创建的内存句柄,
成功返回true

::HIBYTE

function(l) {return   (l   >> 8) & 0xff  }

::HIWORD

function(l) {return  (l >> 16) & 0xffff }

::Kernel32

默认已加载的Kernel32.dll模块对象
Kernel32.dll是Windows内置库,提供很多常用API

::LOBYTE

function(l) {return l  & 0xff }

::LOWORD

function(l) {return l & 0xffff }

::MAKELONG

function(a,b){ return ( ( (b & 0xFFFF) << 16) | (a & 0xFFFF) ) & 0xFFFFFFFF }

::MAKEWORD

function (a,b){ return ( ( ( b & 0xFF) << 8) | ( a & 0xFF) ) & 0xFFFF  }

::Ntdll

默认已加载的系统DLL组件ntdll.dll

返回对象:dllModuleObject

::Ucrtbase

UCRT 运行时,
Windows 10 以及之后的系统已经自带了 UCRT。

加载此 DLL 的代码如下:
::Ucrtbase := ..raw.loadDll("ucrtbase.dll",,"cdecl");
注意等号前必须加冒号。

返回对象:dllModuleObject

::User32

默认已加载的User32.dll模块对象
User32.dll提供Windows用户界面相关API

Markdown 格式