SafariウインドウのView部分のみのスクリーンショットを撮る [AppleScript辞書はつくれるか?]
use scripting additions use framework "Foundation"
on run
set imageFile to do shell script "echo $HOME/Desktop/imgName.png" --output my mainScript()
end run
on mainScript() tell application "Safari" activate set {x1, y1, x2, y2} to bounds of window 1 set viewOriginY to my SafariViewOrigin() set y3 to y1 + viewOriginY set {w1, h1} to {(x2 - x1), (y2 - y3)} end tell
set commandText to "screencapture -R" & x1 & "," & y3 & "," & w1 & "," & h1 & " '" & imageFile & "'" do shell script commandText return end mainScript
on SafariViewOrigin() set LogList to "" tell application "System Events" tell menu 1 of menu bar item "表示" of menu bar 1 of process "Safari" set objList to (name of (every UI element)) repeat with i from 1 to (count of objList) set oneObj to (item i of objList) if oneObj is not missing value then set LogList to LogList & oneObj & return end repeat end tell end tell
set viewOriginY to 38 -- {origin: 0, urlbar:+38, bookmark:+23, tabbar:+23} if LogList contains "お気に入りバーを非表示" then set viewOriginY to viewOriginY + 23 if LogList contains "タブバーを非表示" then set viewOriginY to viewOriginY + 23 return viewOriginY end SafariViewOrigin |
なぜかrunハンドラや、細かくハンドラを分けていますが、applescript_obj-Cの保存時にエラーを起こさないための逃げ道です。 Object-Cの命令文から変数に代入するなどの式が書かれていると、問題が起きるそうです。 代入する変数をローカル変数にするため、 local |変数| でローカル変数を宣言にするか、ハンドラの中に入れることによって回避できるようです。
さて本題、 SafariViewOrigin() ハンドラの部分では、Safariの最前面にあるウインドウの大きさを取得し、System Eventsを経由してSafariのメニューから「編集」メニューの中身を得ます。 その中に『お気に入りバーを非表示』(つまり、お気に入りバーが表示されている)と『タブバーを非表示』(つまり、タブバーが表示されてる)を検出します。 ビューの位置はウインドウ上部から URLバー(常時表示)部分を避け、表示されていたら『お気に入り』と『タブバー』を避けてやればたどり着くと言う考えで、その避ける分をReturnで返り値としています。
上記の返り値を受け取り、スクリーンショットを撮影させています。
そんだけ。
問題は、画面から出た部分は切り落とされてしまうんですけどね。
|
コメント 0