使用Sikulix,我想我会编写一个快速脚本来尽可能无缝地关闭对话框。这意味着将鼠标放回原位,并在对话框解除之前将焦点恢复到焦点窗口。我似乎无法找到正确的咒语,让焦点回到行动前有焦点的窗口。
Settings.MoveMouseDelay = 0
while True:
wait("1457542434677.png", FOREVER)
# Save user current state
aLoc = Env.getMouseLocation()
aRegion = App.focusedWindow();
# myApp = ??????
# dismiss the dialog
click(Pattern("1457542434677.png").targetOffset(81,33))
# return to the previous state
mouseMove(aLoc)
# myApp.focus()
sleep(1)
在上面的代码中正确恢复指针位置。我假设我已经定义了Region,但是无法找到一种方法来获得对焦点的App的引用。
添加3/13:我在Windows 7上使用当前版本的SikuliX。 添加3/17:上面的“myApp”可以是在Windows 7上运行的任何应用程序。可以是浏览器,可以是任何其他本地应用程序。我正在解雇的对话框是由非浏览器应用程序生成的。
答案 0 :(得分:0)
使用程序标题或可执行文件的完整路径创建App
的实例。此外,您没有使用您创建的区域。检查固定代码。
Settings.MoveMouseDelay = 0
while True:
wait("1457542434677.png", FOREVER)
# Save user current state
aLoc = Env.getMouseLocation()
aRegion = App.focusedWindow();
myApp = App('Notepad') # or whatever program title / full path
# dismiss the dialog
# use aRegion.click if you want to click within aRegion.
# aRegion.click(Pattern("1457542434677.png").targetOffset(81,33))
click(Pattern("1457542434677.png").targetOffset(81,33))
# return to the previous state
aRegion.mouseMove(aLoc)
myApp.focus()
sleep(1)
根据应用程序的不同,您可能需要指定程序的完整路径,而不仅仅是标题。