基于Flaui的xpath,实现winui自动化操作
By
瞌睡蟲子
at 2023-02-02 • 0人收藏 • 536人看过
aardio自带了MSAA,UIA的相关库,MSAA库还好,UIA的库写起来太麻烦了,又懒得封装。于是找找现成的库直接玩玩
测试代码:
import console; import dotNet; import mouse; var Core = dotNet.load("FlaUI.Core","D:\Program Files (x86)\flaUI\Libs\FlaUI.Core.dll"); var UIA2 = dotNet.load("FlaUI.UIA2","D:\Program Files (x86)\flaUI\Libs\FlaUI.UIA2.dll"); var UIA3 = dotNet.load("FlaUI.UIA3","D:\Program Files (x86)\flaUI\Libs\FlaUI.UIA3.dll"); var Interop = dotNet.load("Interop.UIAutomationClient","D:\Program Files (x86)\flaUI\Libs\Interop.UIAutomationClient.dll"); Application = Core.import("FlaUI.Core.Application"); AutomationType = UIA3.new("FlaUI.UIA3.UIA3Automation"); TimeSpan = dotNet.import("System.TimeSpan","mscorlib.dll") var app = Application.Attach("WeChat.exe"); console.log(app) var window = app.GetMainWindow(AutomationType,TimeSpan.FromSeconds(2.0)); if(window){ console.log(window.Title) var ele = window.FindFirstByXPath("/Pane[3]/Pane[2]/Pane[3]/Pane/Pane/Pane/Pane/Pane[2]/Pane[2]/Pane[2]/Pane/Pane[1]/Edit") //window.FindAllByXPath("") console.log(ele) console.log(ele.BoundingRectangle) window.SetForeground() var rect = ele.BoundingRectangle; x,y = rect.x + rect.Width/2 , rect.y + rect.Height/2 mouse.click(x,y,true) } console.pause()
运行效果
dll直接从工具里面copy过来:
10 个回复 | 最后更新于 2023-02-03
封装了wpath库,方便调用
WPath.aardio
import dotNet import System.Windows.Automation if(table.getByNamespace("WPath")){ return; } var assembly = dotNet.load("WPath",$"/res/WPath.dll"); assembly.import("WPath.UiaExtension"); root = System.Windows.Automation.AutomationElement.RootElement; function wpath(xpath,ele){ ele := root return WPath.UiaExtension.FindByWPath(ele,xpath); } /**intellisense() WPath.UiaExtension = winui元素WPath查找\n WPath.UiaExtension.FindByWPath(.(指定AutomationElement元素,xpath表达式) = WPath查找winui元素,默认桌面元素root。\n!autoEle. wpath(.(xpath,指定AutomationElement元素) = WPath查找winui元素,默认桌面元素root。 end intellisense**/
调用代码
import WPath; import console; var ee = wpath("/window[@Name='微信']//edit[@Name='输入']"); console.log(ee.Current.BoundingRectangle ) console.pause()
flaui从桌面开始查找
import console; import dotNet; import mouse; var assembly = dotNet.load("FlaUI",$"/res/FlaUI.dll"); assembly.import("FlaUI.UIA3"); root = FlaUI.UIA3.UIA3Automation().GetDesktop(); var tm = time.tick(); var ele = root.FindFirstByXPath("/Window[@Name='微信']//Edit[@Name='输入']") console.log(time.tick()-tm); console.log(ele) console.log(ele.BoundingRectangle) ele.SetForeground() sleep(3000) var rect = ele.BoundingRectangle; x,y = rect.x + rect.Width/2 , rect.y + rect.Height/2 mouse.click(x,y,true) console.pause()
登录后方可回帖
补充一个WPath实现的xpath
demo:
dll下载地址:
https://github.com/tobyqin/wpath/releases/tag/v1.0