我可以使用Applescript控制程序而不将该程序带到前台吗?

时间:2012-05-17 13:18:13

标签: scripting background popup window applescript

我正在将Applescript与Alfred结合使用,以便在Billings中提供启动和停止计时器的键盘快捷键。这对我跟踪自由职业的工作非常有用。

这是我正在使用的代码:

tell application "Billings" to activate
tell application "System Events"
    tell process "Billings"
        tell menu bar 1
            tell menu bar item "Slips"
                tell menu "Slips"
                    if menu item "Start Timer" exists then
                        click menu item "Start Timer"
                    else
                        click menu item "Stop Timer"
                    end if
                end tell
            end tell
        end tell
        keystroke "h" using {command down}
    end tell
end tell

我将它弹出到一个Alfred扩展集中,用CTRL + ALT + CMD + T激活。

不幸的是,它有点笨重。在昨天之前,我从未碰过过Applescript,所以我担心我的排骨有点差。 Billings窗口暂时弹出到前景,然后再次隐藏。如果键盘上按下了除H之外的任何修改键,它也不会隐藏。

因此:

  • 有没有更好的方法来调用Billings以便它不会弹出?
  • 如果没有,是否有更好的方法来隐藏它并返回到以前具有焦点的应用程序。

为清晰起见编辑 比林斯是一个OSX自由职业时间跟踪和发票包。我使用计时器来跟踪我在每项任务上花费的时间,以便我可以准确地向我的客户开账单。我个人认为它非常有用。计时器(我正在处理的当前项目)显示在菜单栏中,可以通过鼠标点击切换。理想情况下,当Billings不在前台时,我可以使用键盘快捷键轻松启动和停止它,但没有内置功能。它看起来像这样:A picture of the timer

2 个答案:

答案 0 :(得分:4)

这是一个将应用程序保留在后台的解决方案。

-- no activate
tell application "System Events"
    tell group 1 of group 2 of window "Billings" of process "Billings"
        perform action "AXPress" of (get first button whose its name ends with " Timer")
    end tell
end tell

-

如果它不起作用,这里的解决方案是隐藏应用程序而不使用快捷方式

activate application "Billings"
tell application "System Events"
    tell process "Billings"
        tell menu "Slips" of menu bar item "Slips" of menu bar 1
            click (get first menu item whose its name ends with " Timer")
        end tell
        set visible to false
    end tell
end tell

答案 1 :(得分:2)

这是另一种方法:

tell application "System Events" to set xxx to (1st process whose frontmost is true)
activate application "Billings"
tell application "System Events"
    tell process "Billings"
        click menu item 7 of menu 1 of menu bar item 7 of menu bar 1
        if visible then
            set visible to false
        end if
    end tell
end tell
set frontmost of xxx to true