常量对象,可用于替换表示原始 win.form 对象,
并禁止用户修改其定义.
处理消息函数原始版本,慎用
如果显式指定此属性值为 false ,
则禁止当前线程在关闭最后一个非模态、非 MessageOnly 的独立窗口( 或 mainForm 窗口 )
时自动调用 win.quitMessage 函数退出消息循环。
目标窗口区域内居中,并调整以保证显示在父窗口或屏幕工作区内。
参数 @1 指定目标窗口句柄,设为 0 表示桌面,
省略目标窗口则默认取父窗口或所有者窗口。
注意 win.form 创建的所有窗体与控件都支持 center 方法,
控件的 center 方法会在调用 win.center 以后自动调用 saveScale,adjust 方法。
窗口的 center 方法则会自动调用
win.form 的构造参数中 left,top 的值为 -1 (默认值)时,
创建的独立窗口默认就是屏幕居中显示,不必再多调用一次 center 函数。
删除定时器。
参数如果为 null 则忽略不执行,
否则定时器 ID 必须是 win.setInterval 函数的返回值
删除定时器。
参数如果为 null 则忽略不执行,
否则定时器 ID 必须是 win.setTimeout 函数的返回值
关闭窗口
关闭外部进程窗口请使用winex.close()替代
在界面线程中延时并同时处理窗口消息,
如果程序退出返回 null,否则返回 true。
可选参数 @1 指定延时值(单位毫秒),默认值为 0。
即使无参数或参数 @1 为 0,此函数仍然会至少执行一次消息检查。
如果不需要消息循环时(例如控制台程序),可使用 sleep 函数延时。
也可以改用自动调用合适延时函数的 thread.delay 函数:
thread.delay 在导入 win 或 win.ui 库的线程指向 win.delay,否则指向 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 函数*/
}
)
win.enum(
function(hwnd){
return true; /*枚举指定线程顶层窗口,并回调此函数。
可选用参数 @2 指定线程 ID,默认为当前线程 ID。
忽略 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的说明
返回鼠标所在窗口坐标 x,y。
此函数有两个返回值,返回值 x,y 都是数值。
表示上一次获取的窗口消息时鼠标占用的点
返回鼠标所在窗口坐标 x,y。
此函数有两个返回值,返回值 x,y 都是数值。
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 属性(不一定会出现在提示中)
判断窗口是否最大化
加载窗体代码文件
加载窗体代码文件。
... 操作符接收不定个数参数。... 返回的的首个参数是父窗体,owner 参数也指向父窗体。返回创建窗体函数或代码的返回值。
如果无返回值则返回调用过程中创建的首个 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
细节请参考函数源码
弹出消息框。
显示系统级别模态消息请改用 winex.msgbox 。
弹出消息框。
除参数 @1 以外,所有参数可选。
6/*_IDYES*/,7/*_IDNO*/, 2/*_IDCANCEL*/ 之一。1/*_IDOK*/,2/*_IDCANCEL*/ 之一。弹出错误消息框。
注意所有窗口或控件都提供 msgbox 方法(不需要指定所有者窗口)。
弹出错误消息框。
参数 @3 可选指定所有者窗口句柄。
如果参数@1是表对象,自动调用 table.tostring 序列化为文本
其他类型调用 tostring 转为字符串
弹出确认消息框。
注意所有窗口或控件都提供 msgbox 方法(不需要指定所有者窗口)。
弹出确认消息框,
返回布尔值表示用户是否按了“确定”按钮。
标题,所有者窗口参数可选
如果参数@1是表对象,自动调用 table.tostring 序列化为文本
其他类型调用 tostring 转为字符串
弹出消息框,超时自动关闭。
超时值以毫秒为单位(可选参数),
除参数@1以外,其他所有参数可选。
如果参数@1是表对象,自动调用 table.tostring 序列化为文本
其他类型调用 tostring 转为字符串
一般不必指定消息框样式,不必了解该参数用法
win.parseMessage = win._parseMessage
win.parseMessage = messageTranslateDispatch;
等待并获取窗口消息。
msg 参数可以是 MSG 结构体,也可以是一个空表用于接收新的 MSG 结构体,也可以省略。
其余都是可选参数,用法与同名的 Windows API 函数相同。
不指定「选项」参数则默认为 _PM_REMOVE 表示自消息队列移除获取到的消息。
成功返回已填充消息的 MSG 结构体(如果指定了 msg 参数则该参数就是此返回值)。
失败返回 false,程序退出返回 null。
检测消息队列,如果有键盘鼠标、或绘图消息则处理消息并返回传入的消息对象。
如果程序退出返回 null,如果无消息返回 false。
可选使用参数@1指定 MSG 结构体或空表,重用同一 MSG 结构体,
此函数如果没有检查到消息会直接返回而不是等待,
可用于在耗时循环中避免界面不能响应用户操作
检测消息队列,如果有消息则处理消息并返回传入的消息对象。
如果程序退出返回 null ,如果无消息返回 false。
所有参数可选,参数用法请参考win.peekMessage
可选使用参数@1指定 MSG 结构体或空表,重用同一 MSG 结构体,
此函数如果没有检查到消息会直接返回而不是等待,
可用于在耗时循环中避免界面不能响应用户操作
如果坐标在边框范围内返回以下边框名字之一
top,topleft,topright,bottom,bottomleft,bottomright
上,右,下,左参数指定边框宽度
可以使用一个参数指定四周边框宽度
等待并处理一个窗口消息
注意如果没有参数,此函数会一直等待
退出消息循环
可在参数中指定 win.loopMessage 退出代码。
注册新类名
如果参数@3指定了源类名则复制该类
可选用参数@2指定 WNDCLASSEX的部分字段值
注意窗口类名,
如果指定了cls,则使用线程ID格式化为伪类名
此时className为源类名
如果未指定cls,则直接注册className为类名
如果该窗口类已存在则直接返回该类名
此函数返回注册成功的窗口类名
释放鼠标捕获,成功返回true
自消息队列中移除_WM_QUIT消息,
使消息循环重置为未退出状态
使用 _WM_COPYDATA 消息发送字符串到其他进程窗口。
发送数据可以是字符串或 table 对象,
数据类型可选指定一个数值
设置激活窗口
开始捕获鼠标消息,返回上次调用该函数的窗口句柄
设置输入焦点。
附加外部输入线程后立即调用此函数可能偶尔会无效,可延时至少几十毫秒
前置窗口并获取输入焦点。
如果参数 @2 未指定为 true ,且窗口已最小化,则先恢复并显示窗口。
当前程序是背景窗口时,win7以上系统在任务栏闪烁。
win.setInterval(回调函数,延时毫秒数,...setInterval(
function(){
/*创建定时器。
应尽量优先调用窗体对象的 setInterval 方法而非 win.setInterval。
参数 @1 指定执行函数,参数 @2 指定执行间隔,
可选指定一个或多个回调参数,不指定回调参数则默认为:
hwnd,message,timerId,tick,
如果在定时器中执行了 win.delay 等继续消息循环的代码,
在定时器退出前不会再触发同一定时器(重入)。
定时器回调函数无返回值、返回 null 或 true 则继续运行。
返回 false,0,或用 tonumber 可转换为 0 的值则清除此定时器。
返回可用 tonumber 转换为非 0 数的值则修改定时器执行间隔(毫秒)*/
},1000
)
设置所有者窗口
从属窗口总是显示在所有者窗口前面
例如模态对话框通常会指定一个所有者窗口
设置了所有者(也没有指定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;
}