常量对象,可用于替换表示原始 win.form 对象,
并禁止用户修改其定义.
处理消息函数原始版本,慎用
居中窗口,并调整以保证显示在可见范围内
目标窗口句柄如果为空则取父窗口或所有者窗口,为0表示桌面
删除定时器
参数如果为null则忽略不执行
否则定时器ID必须是setTimeout函数的返回值
关闭窗口
关闭外部进程窗口请使用winex.close()替代
在界面线程中延时并同时处理窗口消息,
如果程序退出返回null,否则返回true,
第一个可选参数指定延时值(毫秒),
即使无参数或参数为0,此函数仍然会至少执行一次消息检查),
该参数如果为0则忽略第二个参数(此时处理速度最快),默认值为0,
第二个可选参数指定插入的休眠时间(毫秒),
休眠时间越小则处理速度越快,休眠时间越大则占用CPU就越少
如果不需要消息循环时(例如控制台程序),建议使用sleep函数延时,
如果用于耗时循环中响应用户操作,
建议使用速度更快的win.peekPumpMessage 或 win.peekPumpInputMessage
for hwnd in win.eachChild(/*按Z序遍历所有子窗口,
省略父窗口句柄遍历桌面顶层窗口,
窗口类名是可选参数,支持模式匹配语法
此函数忽略UWP应用窗口,
如果需要包含 UWP 窗口请改用 winex.eachFindEx 函数*/) {
}
禁用窗口
启用窗口
win.enum(
function(hwnd){
return true; /*枚举所有桌面顶层窗口,并回调此函数,
忽略UWP窗口,如果需要包含UWP窗口请改用 winex.enum 函数*/
}
)
查找顶层窗口,参数都是可选参数
查找子窗口
除父窗口句柄以外,其他参数都是可选参数,
类名和标题不支持模式匹配,
如果需要支持模式匹配,请改用 winex.findEx 或 winex.findEx2
闪烁窗口
获取当前线程激活窗口句柄,如果要获取全局激活窗口请使用win.getForeground()
获取上层父窗口
返回父窗口,
与getParent函数相比主要有三个区别
1、不会返回所有者窗口
2、不考虑窗口样式是不是有WS_CHILD
3、顶层窗口返回桌面窗口句柄而不是0
返回最上层父窗口,不包含桌面窗口
此函数与getRoot函数返回值相同
获取子窗口句柄
获取窗口类名
返回窗体WNDCLASSEX结构的32位值
返回窗体WNDCLASSEX结构的句柄值
返回客户区相对窗口的坐标 x,y,宽,高
获取窗口客户区的坐标位置矩形区块,不包括边框。
返回值为 ::RECT 结构体
获取 _WM_COPYDATA 消息发送的数据
lParam 为窗口消息回调 wndproc 函数的回调参数
此函数有2个返回值,分别为接收到的字符串值、表示数据类型的数值
返回当前鼠标所在位置的x,y坐标,
返回值有两个
获取桌面句柄
用于消息回调函数中获取拖放文件列表
以管理权限启动的进程操作系统会禁止拖放操作,
标准库提供了 process.admin.enableDropMsg 函数可以设置这个权限,
但现在这个设置有可能也是不被允许的
获取输入焦点所在窗口句柄
获取前台窗口句柄
返回当前全屏窗口
获取控件ID
获取用户未进行任何操作的空闲时间
单位毫秒,1000 毫秒为 1秒
窗口的最梢节子窗口(没有子窗口的控件窗口)
检查并获取窗口消息,
msg参数可以是MSG结构体,也可以是一个空表用于接收新的MSG结构体,也可以省略
成功返回已填充消息的MSG结构体(如果指定了msg参数则该参数就是此返回值),
无消息返回false,程序退出返回null
所有参数都是可选参数
选项不指定则默认为 _PM_REMOVE 表示自消息队列移除该消息
其他选项请参考同名WINAPI的说明
返回鼠标所在屏幕坐标,
表示上一次获取的窗口消息时鼠标占用的点
返回鼠标所在窗口坐标,
lParam必须是窗口回调函数中的lParam参数
获取窗口所在显示器信息
sys.monitor 提供更多与显示器有关的函数
获取指定坐标所在的显示器信息
参数@1可指定 ::POINT 结构体,或包含 x,y 成员的表,\选项默认为 _MONITOR_DEFAULTTONEAREST,即获取最靠近的显示器
获取窗口所在显示器信息,所有参数可选,\选项默认为 _MONITOR_DEFAULTTONEAREST,即获取最靠近的显示器
获取所有者窗口句柄
注意子窗口没有所有者窗口
下属窗口总是显示在所有者窗口前面
例如模态对话框通常会指定一个所有者窗口
返回父窗口
父窗口为桌面且自身不是具有WS_CHELD样式的子窗口返回0
该函数返回值为0表示窗口是一个顶层独立窗口[TopLevelWindow]
注意WINAPI中的GetParent函数在aardio中被命名为win.getParentOwner
拥有WS_CHILD样式的子窗口返回其父窗口
拥有WS_POPUP样式的弹出对话框返回无WS_POPUP样式所有者窗口
三种情况下该函数失败返回0
1、如果有父窗口但是自身没有WS_CHILD样式返回0,
2、有所有者窗口但自身没有WS_POPUP样式也返回0
3、所有者窗口具有WS_POPUP也返回0
此函数为WINAPI中的GetParent函数,原名字有误导性在aardio中已改名
可省略参数
返回WINDOWPLACEMENT结构体
包含窗口最大化、最小化、还原状态的位置信息
返回相对坐标 x,y,宽,高
返回屏幕坐标 x,y,宽,高
返回窗体相对坐标位置矩形区块
对于顶层窗口则等同于屏幕绝对坐标位置矩形区块
返回窗体屏幕坐标位置矩形区块
返回值为 ::RECT 结构体
获取顶层父窗口句柄
没有上层父窗口该函数返回自身句柄
获取顶层父窗口句柄或所有者窗口
没有上层父窗口或所者者该函数返回自身句柄
返回主屏幕宽度、高度,
win.getScreenPos 函数可获取所有显示器组成的虚拟屏幕位置与大小
获取指定屏幕或所有屏幕位置与大小
返回所有显示器组成的虚拟屏幕位置与大小
此函数返回多个值,分别为:x坐标,y坐标,宽,高。
因为多个显示器的可能设置不同的排序,屏幕起始坐标并不总是 0,0,
注意单个显示器仍然可以使用此函数获取
获取指定坐标所在的显示器在屏幕位置与大小,
此函数返回多个值,分别为:x坐标,y坐标,宽,高。
参数@1可指定 ::POINT 结构体,或包含 x,y 成员的表,
参数 @2 默认为 _MONITOR_DEFAULTTONEAREST,即获取最靠近的显示器,
如果失败则返回所有显示器组成的虚拟屏幕位置与大小
获取窗口所在屏幕位置与大小,
此函数返回多个值,分别为:x坐标,y坐标,宽,高。
参数 @2 默认为 _MONITOR_DEFAULTTONEAREST,即获取最靠近的显示器,
如果失败则返回所有显示器组成的虚拟屏幕位置与大小
获取指定窗口样式,除句柄外其他参数可选
获取窗口扩展样式,除句柄外其他参数可选
获取窗口文本
外部进程窗口请使用winex.getText()函数替代
获取窗口文本,并指定缓冲区大小
如果目标窗口属于外部进程并可能失去响应导致此函数阻塞,
请改用winex.getText函数获取窗口文本
获取窗口上控件的文本
参数(窗口句柄,控件ID,缓冲区大小)
返回线程ID,进程ID
var tid,pid=win.getThreadProcessId(hwnd)
获取相关窗口
返回屏幕上窗口最大化时可使用的显示区块。
返回值为 ::RECT 结构体
返回屏幕上窗口最大化时可使用的显示区块
参数@1可指定 ::POINT 结构体,或包含 x,y 成员的表,
省略参数@1 则自动获取鼠标当前坐标作为参数。
选项默认为 _MONITOR_DEFAULTTONEAREST,即获取最靠近的显示器
返回屏幕上窗口最大化时可使用的显示区块,所有参数可选,
选项默认为 _MONITOR_DEFAULTTONEAREST,即获取最靠近的显示器
用法同ptInBorder函数,
但返回值转换为_WM_NCHITTEST消息返回值
可以使用一个参数指定四周边框宽度
win.hookMessage(
function(msg){
}
)
移除消息钩子函数
消息钩子在分发窗口消息以前触发
可返回值以阻止消息处理
thread.invokeAndWait(
function(){
import win;
/*创建工作线程执行参数@1指定的线程函数,
参数@1之后的其他可选参数会作为调用线程函数的参数。
调用并等待线程函数执行完毕,然后获取此线程函数的返回值,
在界面线程等待时界面仍可响应用户操作,线程函数的返回值会返回给调用线程,
线程函数拥有独立的全局变量,并应遵守多线程调用规则*/
}
)
判断参数二指定的窗口是否参数一指定窗口的子窗口或间接子窗口
任何一个参数为null或0返回false
用户是否关闭了全部窗口
处理对话框控制键消息
判断窗口是否启用状态
判断窗口是否最小化为任务栏图标。
如果参数可能为子窗口句柄,应调用 win.getRoot 函数先转换为顶层窗口。
注意:对最小化窗口获取 ::RECT 或坐标时会包含类似 -32000 这种超大的伪坐标。
判断窗口是否可见。
如果上级父窗口不可见,则此函数仍然会返回 false。
如果要检查子窗口本身的可见样式,
可用 win.getStyle 函数检查是否设置 _WS_VISIBLE 样式。
如果是 aardio 创建的窗口对象,通过 hide 属性可检查是否设置 _WS_VISIBLE 样式。
此函数不会检查伪装为可见的窗口隐形状态(Cloaked),
winex.isVisible 支持检测隐形状态
判断是否有效窗口
注意 aardio 创建的窗体或控件请使用 valid 属性判断,
aardio 创建的所有控件都有 valid 属性(不一定会出现在提示中)
判断窗口是否最大化
加载窗体代码文件
加载窗体代码文件
参数@1为窗体代码文件路径,工程内代码文件路径必须以斜杠开始,
参数@2为选参数,可用于替换win.form构造函数,
可选添加不定个数调用参数,在被加载的窗体文件内使用...操作符接收参数
返回窗体代码文件的返回值,
如果未返回值则返回执行该文件创建的首个win.form对象
如果当前消息循环未启动则启动消息循环,
返回退出代码(可用于 return 语句退出当前线程并设置为线程返回值)
此函数会启动界面线程的消息循环,循环处理并分发所有窗口消息,
直到应用程序调用 win.quitMessage 才会退出。
所有非模态、非 MessageOnly 的独立窗口( 或 mainForm 窗口 )都关闭后,
将会自动终止 win.loopMessage 创建的消息循环(通常也就是退出界面线程)。
因为关闭消息是异步处理,所以即使是在调用 win.loopMessage 前关闭窗口,
仍然可能导致退出消息循环
移动窗口到右下角,
可选使用x参数指定右边距,y参数指定下边距
转换窗口坐标
省略的句柄默认以桌面句柄替代
转换窗口矩形
省略的句柄默认以桌面句柄替代
修改窗口样式,所有参数都是可选参数,
@hwnd 指定目标窗口句柄
@remove 用数值指定要移除的样式,可使用 WS 前缀的常量
@add 用数值指定要添加的样式,可使用 WS 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考函数源码
修改窗口扩展样式,所有参数都是可选参数,
@hwnd 指定目标窗口句柄
@remove 用数值指定要移除的样式,可使用 WS_EX 前缀的常量
@add 用数值指定要添加的样式,可使用 WS_EX 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考函数源码
弹出对话框
弹出对话框
除 参数@1 以外,所有参数可选
如果 参数@1 是表对象,自动调用 table.tostring 序列化为文本
其他类型调用 tostring 转为字符串。
可选用参数@5限定显示时间,以毫秒为单位,超时自动关闭。
一般不必指定对话框样式,不必了解该参数用法
弹出错误对话框
弹出错误对话框
所有者窗口参数可选
如果参数@1是表对象,自动调用 table.tostring 序列化为文本
其他类型调用 tostring 转为字符串
弹出确认对话框
弹出确认对话框,
返回布尔值表示用户是否按了“确定”按钮。
标题,所有者窗口参数可选
如果参数@1是表对象,自动调用 table.tostring 序列化为文本
其他类型调用 tostring 转为字符串
弹出对话框,超时自动关闭
超时值以毫秒为单位(可选参数),
除参数@1以外,其他所有参数可选。
如果参数@1是表对象,自动调用 table.tostring 序列化为文本
其他类型调用 tostring 转为字符串
一般不必指定对话框样式,不必了解该参数用法
win.parseMessage = win._parseMessage
win.parseMessage = messageTranslateDispatch;
等待并获取窗口消息,
msg参数可以是MSG结构体,也可以是一个空表用于接收新的MSG结构体,也可以省略
成功返回已填充消息的MSG结构体(如果指定了msg参数则该参数就是此返回值),
失败返回false,程序退出返回null
检测消息队列,如果有键盘鼠标、或绘图消息则处理消息并返回传入的消息对象,
如果程序退出返回null,如果无消息返回false,
可选使用参数@1指定MSG结构体或空表,重用同一MSG结构体,
此函数如果没有检查到消息会直接返回而不是等待,
可用于在耗时循环中避免界面不能响应用户操作
检测消息队列,如果有消息则处理消息并返回传入的消息对象,
如果程序退出返回null,如果无消息返回false,
所有参数可选,参数用法请参考win.peekMessage
可选使用参数@1指定MSG结构体或空表,重用同一MSG结构体,
此函数如果没有检查到消息会直接返回而不是等待,
可用于在耗时循环中避免界面不能响应用户操作
如果坐标在边框范围内返回以下边框名字之一
top,topleft,topright,bottom,bottomleft,bottomright
上,右,下,左参数指定边框宽度
可以使用一个参数指定四周边框宽度
等待并处理一个窗口消息
注意如果没有参数,此函数会一直等待
退出消息循环
可在参数中指定loopMessage退出代码
注册新类名
如果参数@3指定了源类名则复制该类
可选用参数@2指定 WNDCLASSEX的部分字段值
注意窗口类名,
如果指定了cls,则使用线程ID格式化为伪类名
此时className为源类名
如果未指定cls,则直接注册className为类名
如果该窗口类已存在则直接返回该类名
此函数返回注册成功的窗口类名
释放鼠标捕获,成功返回true
自消息队列中移除_WM_QUIT消息,
使消息循环重置为未退出状态
使用 _WM_COPYDATA 消息发送字符串到其他进程窗口。
发送数据可以是字符串或 table 对象,
数据类型可选指定一个数值
设置激活窗口
开始捕获鼠标消息,返回上次调用该函数的窗口句柄
设置输入焦点。
附加外部输入线程后立即调用此函数可能偶尔会无效,可延时至少几十毫秒
前置窗口并获取输入焦点。
如果参数 @2 未指定为 true ,且窗口已最小化,则先恢复并显示窗口。
当前程序是背景窗口时,win7以上系统在任务栏闪烁。
设置所有者窗口
下属窗口总是显示在所有者窗口前面
例如模态对话框通常会指定一个所有者窗口
设置了所有者(也没有指定appwindows样式的)的下属窗口不会显示在任务栏
所有者窗口管理下属窗口的生存期
成功返回原来的所有者窗口句柄
窗口拥有WS_CHILD样式时不执行并返回空值
设置父窗口
子窗口显示在父窗口客户区
父窗口管理子窗口的生存期
设置父窗口
子窗口显示在父窗口客户区
调整窗口坐标位置或排序,除句柄外所有参数可选
同时指定x,y坐标则移动位置
同时指定宽高则改变大小
指定插入位置<句柄或_HWND前缀常量>则调整Z序
选项不用指定,可参考此函数源码了解细节
设置窗口相对坐标位置矩形区块。
参数 @rc 为 ::RECT 结构
设置窗口屏幕绝对坐标位置矩形区块。
参数 @rc 为 ::RECT 结构
参数(窗口句柄,要设置的文本)
外部进程窗口请使用winex.setText()函数替代
设置窗口上控件的文本
参数(窗口句柄,控件ID,文本)
win.setTimeout(
function(){
/*在已经导入win.ui的界面线程内异步延时执行这里的代码
除回调函数以外,其他参数都是可选参数
延时默认为0*/
}
)
前置窗口到当前线程Z序顶部
顶层窗口或者设置了 _WS_CLIPSIBLINGS 重叠裁剪样式的窗口向前移动
子窗口会向后面移动.
置顶并显示窗口
取消置顶窗口
设置主题样式
参数 @2,@3 可传字符串或 null 值
隐藏窗口
显示窗口,可选输入以_SW_为前缀的显示参数性,
使用 win.show( hwnd,3/*_SW_MAXIMIZE*/ ) 最大化显示,
使用 win.show( hwnd,6/*_SW_MINIMIZE*/ ) 最小化显示,
使用 win.show( hwnd,9/*_SW_RESTORE*/ ) 自最大化或最小化恢复显示。
把窗口显示在屏幕最前面,最小化窗口自动还原
类似setForeground但不会改变输入焦点,
除句柄外,其他参数为可选参数
窗口默认标题
如果不指定则自动指定为第一个winform对象的标题
将坐标转换为客户坐标,返回 x,y 坐标值
::POINT 结构体请直接使用 ::ScreenToClient
将::RECT 结构体转换为客户坐标。
返回值为 ::RECT 结构体
将坐标转换为屏幕坐标,返回 x,y 坐标值
::POINT 结构体请直接使用 ::ClientToScreen
将::RECT 结构体转换为屏幕坐标。
返回值为 ::RECT 结构体
循环执行等待函数,并等待返回值
直到等待函数返回非空值,或存在第二个返回值,或参数@2指定的窗口关闭
等待函数返回的值就是win.wait的返回值,
如果指定超时,超过指定毫秒时返回null,
除等待函数以外,所有参数可选
窗口句柄
附加参数
消息ID
时间
附加参数
最大化左上角左标
最小化左上角坐标
还原状态位置
_SW_SHOWMAXIMIZED 等表示窗口状态
更新窗口位置信息,可选指定一个目标窗口句柄参数
通知代码
发送消息的控件句柄
发送消息的控件ID
class{
addr hwnd;
INT message;
ADDR wParam;
addr lParam;
INT time;
int x;
int y;
}
class {
addr hwndFrom;
ADDR idFrom;
INT code;
}
通知消息结构体
class{
INT cbSize = 48;
INT style = 0xB;//_CS_HREDRAW | _CS_VREDRAW | _CS_DBLCLKS;
pointer lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
pointer hInstance;
pointer hIcon;
pointer hCursor;
pointer hbrBackground;
ustring lpszMenuName;
ustring lpszClassName;
pointer hIconSm;
}