サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

【mac】最後にスクリーンショットを撮った矩形範囲を取得する

はじめに

 macOS で決まった範囲のスクリーンショットを撮りたい場合、「Cmd + Shift + 5」でスクリーンショット.app を起動してマウスで範囲選択します。

 この範囲は次に起動したときも同じ範囲が選択状態になっているため、どこかに記憶されているはずです。その値を取得すれば、screencapture コマンドを使って自動化できるかもしれません。テストの自動化など、応用が広がります。

記憶されている場所

 記憶されているのは ~/Library/Preferences/com.apple.screencapture.plist です。

シェルで取得してみる

 下記のシェルで取得できました。screencapture コマンドに渡しやすい順番にカンマ区切りで表示しています。

#!/usr/bin/php
<?php

// 最後にスクリーンショットを撮った矩形範囲を取得する
$top = `/usr/libexec/PlistBuddy -c "print :last-selection:Y" ~/Library/Preferences/com.apple.screencapture.plist` * 1.0;
$left = `/usr/libexec/PlistBuddy -c "print :last-selection:X" ~/Library/Preferences/com.apple.screencapture.plist` * 1.0;
$width = `/usr/libexec/PlistBuddy -c "print :last-selection:Width" ~/Library/Preferences/com.apple.screencapture.plist` * 1.0;
$height = `/usr/libexec/PlistBuddy -c "print :last-selection:Height" ~/Library/Preferences/com.apple.screencapture.plist` * 1.0;

$range = [trim($left), trim($top), trim($width), trim($height)];

// 表示する
echo implode(',', $range) . "\n";

環境

 以下の環境で動作確認しました。

ProductName:   Mac OS X
ProductVersion: 10.15.7
BuildVersion:   19H1713
PHP 7.3.29 (cli) (built: Aug 15 2021 23:10:16) ( NTS )

実行結果の例
実行結果例