【Auto.js】使用Pro 8.0 API优化图色或无障碍的耗电问题
由于Auto.js目前的API都是同步的,要在屏幕中搜索某張圖色或者某個控件時,必須無限循環查找,這實際上非常耗電。由于Rhino的限制,Auto.js無法直接提供異步API,這讓Auto.js的腳本天生有一些缺陷。
為了解決這些問題,Auto.js Pro 8.0.0-3引入了兩個新的API,來盡量減少圖色模塊和控件模塊使用時的耗電。
圖色模塊的耗電優化
requestScreenCapture(options)
- options?{Object}
- async?{Boolean} 是否以異步事件的形式提供截圖
- width?{Number} 截圖寬度
- height?{Number}} 截圖高度
- orientation?{String} 屏幕方向,"landscape"為橫屏,"portrai"為豎屏,"auto"為自動
請求截圖權限的參數中,增加了async的參數,這個參數運行我們以異步的方式,來獲取屏幕截圖。在以前,我們通過captureScreen()函數來獲取截圖,并無限循環地尋找目標圖片,比如:
// 請求截圖權限 requestScreenCapture(); // 讀取目標圖片 let target = $images.read("./test.png"); while (true) {// 獲取屏幕截圖let capture = $images.captureScreen();// 找圖let pos = $images.findImage(capture, target);// 打印console.log(pos); }而使用async參數后,我們可以在"screen_capture"事件中獲取到圖片,例如:
// 請求截圖權限, 注意參數 async: true requestScreenCapture({async: true}); // 監聽屏幕截圖 $images.on("screen_capture", capture => {// 找圖let pos = $images.findImage(capture, target);// 打印console.log(pos); });使用這樣的方式,我們可以只在屏幕刷新時通過事件screen_capture喚醒代碼,獲取到最新的屏幕截圖,并尋找目標圖片。
實測在普通軟件界面的找圖中,CPU使用率減少了75%左右。
無障礙功能的耗電優化
與找圖找色類似,在以前,Auto.js也一直只能通過無限循環去判斷當前界面、尋找控件,這實際上對省電優化十分不友好。在Pro 8.0.0-3版本,我們引入了監聽無障礙事件的API。
auto.registerEvents(events)
- events?{Array} 要監聽的事件數組
- 返回 {EventEmitter}
auto.registerEvent(event, callback)
- event?{String} 要監聽的事件
- callback?{Function} 事件回調
- 返回 {EventEmitter}
以上兩個函數用于監聽一個或多個無障礙事件。所謂無障礙事件,即(其他軟件)窗口發送變化、控件發送變化時的事件,包括:
- view_clicked?控件被點擊
- view_long_clicked?控件被長按點擊
- view_selected?控件被選中
- view_focused?控件成為焦點
- view_text_changed?控件文本改變
- view_scrolled?控件被滑動
- window_state_changed?窗口狀態變化
- window_content_changed?窗口內容變化
- window_changed?屏幕上顯示窗口的變化(增加,刪除,子窗口變化等)
- notification_state_changed?通知狀態變化
例如,我們要監聽Auto.js的打開,可以用以下代碼監聽:
// 監聽窗口變化 auto.registerEvent('windows_changed', e => {// 判斷是否有新窗口打開if (e.windowChanges.indexOf('add') >= 0) {// 獲取新窗口的idlet wid = e.windowId;// 遍歷窗口,獲取新窗口let window = auto.windows.filter(w => w.id == wid);// 判斷新窗口是Auto.jsif (window.length >= 0 && window[0].title == 'Auto.js') {toast("Auto.js被打開了!");}} });?
總結
以上是生活随笔為你收集整理的【Auto.js】使用Pro 8.0 API优化图色或无障碍的耗电问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [网络]_获取内外网IP地址【Auto.
- 下一篇: Auto.js Pro如何连接VS Co