如何在解雇Sikuli窗口后恢复焦点

时间:2016-03-09 18:37:50

标签: ui-automation sikuli

使用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上运行的任何应用程序。可以是浏览器,可以是任何其他本地应用程序。我正在解雇的对话框是由非浏览器应用程序生成的。

1 个答案:

答案 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)

根据应用程序的不同,您可能需要指定程序的完整路径,而不仅仅是标题。