保存标题栏名称

时间:2016-07-27 09:43:05

标签: macos automation applescript screenshot

使用组合cmd + shift + 4拍摄的屏幕截图的标题是“Time Time DATE at TIME”,这并不多见。我希望应用程序截图的标题就像“YYYYMMDD_HHMMSS Whatever Title Bar Text”。

在Windows上我使用GreenShots,默认情况下这样做,命名窗口的每个屏幕截图,时间戳后跟标题栏上的名称。

在我的OS X El Capitan上,我找不到这样做的开源应用程序,所以I was suggested代替使用AppleScript。

我现在所拥有的是接近解决方案

do shell script "screencapture -W ~/tmp"
delay 3
tell application "System Events"
    set frontApp to name of first application process whose frontmost is true
end tell
tell application frontApp
    if the (count of windows) is not 0 then
        set window_name to name of front window
    end if
end tell
set screenShotName to do shell script "date +%Y%m%d_%H%M%S_"
set screenShotName to screenShotName & window_name
do shell script "mv ~/tmp ~/\"" & screenShotName & "\".png"

要保存此内容,请将其复制粘贴到“脚本编辑器”中并将其另存为应用。要使用它,请双击屏幕截图应用程序图标,然后单击要截取屏幕截图的窗口。

但是,这种方法存在一些问题:

  • 经常我必须在窗口上点击两次我要截取屏幕截图,第一个选择它,第二个将其置于焦点
  • 它比我以前做的更费力,我宁愿使用键盘快捷键

可以修复此脚本以解决上述问题,还是应采取不同的方法?

1 个答案:

答案 0 :(得分:1)

我做了几次测试,我认为Apple处理服务的方式存在一个错误。在调用Service时,所选进程的窗口列表不存在(!!)。如果你从一个应用程序中调用它(这是我测试它的方式!),它就存在了。 在服务事件期间,UI元素也不再可用(当您从应用程序运行它时,情况仍然不是这样!)。

因此,经过多次测试并尝试后,我通过将其作为应用程序然后要求Automator启动该应用程序来解决这个问题。

有几件事情要做:

1)输入此脚本是脚本编辑器

delay 2
set DefaultPath to POSIX path of (path to desktop folder)
set TimeStamp to do shell script "date +%Y%m%d_%H%M%S_"
tell application "System Events"
set frontApp to first application process whose frontmost is true
set FWindow to first window of frontApp
set FName to DefaultPath & TimeStamp & (name of FWindow) & ".jpg"
set {x, y} to position of FWindow
set {w, h} to size of FWindow
do shell script "screencapture -R " & x & "," & y & "," & w & "," & h & " " & quoted form of FName
end tell

2)将该脚本保存为脚本编辑器中的应用程序(而不是脚本)。将它保存在某个地方,任何地方都可以。

3)在您的Automator服务中,添加操作"启动应用程序"。然后,在此操作中,选择"应用其他..."并选择步骤2中保存的应用程序。

4)打开系统偏好设置,"安全性,标签"机密性"。选择"辅助功能"在左侧列表中,单击" +"在右侧列表的底部。添加并选择在步骤2中保存的应用程序。这将允许此应用程序驱动您的Mac。

对我来说效果很好!

此变通办法的消极方面是,在启动服务后,您有大约2秒的时间来选择要复制的窗口。如果你不这样做,那么最前面的应用程序将是脚本本身......没有窗口! 我设置延迟时间为2秒,让您点击要捕获的窗口,但是可以通过更改脚本的第一行将其缩短为1秒或1.5 ...