autojs官方文档 floating_window - 悬浮窗
floating_window模块提供显示悬浮窗,检查是否有悬浮窗权限等功能。
由于悬浮窗模块涉及UI交互,显示悬浮窗需要在UI线程中运行,因此需要在文件开始指定:
"ui-thread nodejs";
:仅悬浮窗,无UI页面Activity的情况"ui nodejs";
:既有悬浮窗,又有UI页面Activity"ui-thread";
:仅悬浮窗,无UI页面Activity,并且文件名本身用.node.js结尾"ui";
:既有悬浮窗,又有UI页面Activity,并且文件名本身用.node.js结尾
示例
"ui-thread nodejs";
const {
createWindow } = require("floating_window");
const window = createWindow();
window.setViewFromXml(`
<vertical bg="#ffffff">
<text text="Node.js: ${
process.version}" textColor="#aa0000" textSize="16" width="*"/>
</vertical>
`);
window.show();
$autojs.keepRunning();
Stability: 2 - Stable
events本身是一个EventEmitter。
需要注意的是,事件的处理是单线程的,并且仍然在原线程执行,如果脚本主体或者其他事件处理中有耗时操作、轮询等,则事件将无法得到及时处理(会进入事件队列等待脚本主体或其他事件处理完成才执行)。
events.emitter()
返回一个新的EventEmitter。这个EventEmitter没有内置任何事件。
事件: 'exit`
当脚本正常或者异常退出时会触发该事件。事件处理中如果有异常抛出,则立即中止exit事件的处理(即使exit事件有多个处理函数)并在控制台和日志中打印该异常。
一个脚本停止运行时,会关闭该脚本的所有悬浮窗,触发exit事件,之后再回收资源。如果exit事件的处理中有死循环,则后续资源无法得到及时回收。 此时脚本会停留在任务列表,如果在任务列表中关闭,则会强制结束exit事件的处理并回收后续资源。
log("开始运行")
events.on("exit", function(){
log("结束运行");
});
log("即将结束运行");
EventEmitter
Stability: 2 - Stable
EventEmitter.defaultMaxListeners
每个事件默认可以注册最多 10 个监听器。 单个 EventEmitter 实例的限制可以使用 emitter.setMaxListeners(n) 方法改变。 所有 EventEmitter 实例的默认值可以使用 EventEmitter.defaultMaxListeners 属性改变。
设置 EventEmitter.defaultMaxListeners 要谨慎,因为会影响所有 EventEmitter 实例,包括之前创建的。 因而,调用 emitter.setMaxListeners(n) 优先于 EventEmitter.defaultMaxListeners。
注意,与Node.js不同,这是一个硬性限制。 EventEmitter 实例不允许添加更多的监听器,监听器超过最大数量时会抛出TooManyListenersException。
emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once(