確認ですが「スクリーンをロックした状態」というのは「画面スリープ」の真っ暗になった状態ではなく、パスワード待ちのロック画面のことですね?
あ〜、すみません。説明が足りませんでした。キーチェーンアクセス > メニューバー > ステータスメニューから「スクリーンをロック」した後の状態を示したつもりでした。つまり、画面スリープ、パスワード待ち、両方ともです。
重要なポイントとなりそうなので、試したことを詳しく説明しておきます。以下長文になりますがご勘弁を。
ーーーーー
下記は、画面スリープ及びパスワード待ちの画面で AppleScript の挙動を観察するために用いたスクリプトです。音が出た方が分かりやすいので iTunes をコントロールするものにしました。
概要
スクリプトを実行すると、30秒待機した後に、「iTunes で曲の再生を開始、30秒待機、再生を停止、1秒待機」の一連の動作をを3回繰り返します
下準備
- iTunes を起動して適当なプレイリストを選択しておく
- キーチェーンアクセスの環境設定で、「メニューバーに状況を表示」を ON にしておく
使い方
- スクリプトを実行
- キーチェーンアクセスのメニューバーのステータスメニューから「スクリーンをロック」
- 画面スリープのままにしたり、(キーボード操作等で) パスワード待ちの状態にしながら様子を観察
コードは通常スクリプトの「A」と GUI スクリプティングを使った「B」の2種類でこんな感じ。
A: 通常
on run my _delay(30) repeat 3 times my itunes_play() my _delay(30) my itunes_stop() my _delay(1) end repeat end run on itunes_play() tell application "iTunes" to play end itunes_play on itunes_stop() tell application "iTunes" to stop end itunes_stop on _delay(n) do shell script "sleep " & quoted form of (n as text) end _delay
B: GUI スクリプティング
on run my _delay(30) repeat 2 times my itunes_play() my _delay(30) my itunes_stop() my _delay(1) end repeat end run on itunes_play() tell application "iTunes" to stop tell application "System Events" tell process "iTunes" set frontmost to true # # iTunes > メニューバー > 制御 > 再生 をクリック # ・iTunes のバージョンにより異なる場合は適宜書き換える # ・画面スリープとパスワード待ちの場合は動かない? # click menu item 1 of menu 1 of menu bar item 6 of menu bar 1 end tell end tell end itunes_play on itunes_stop() tell application "System Events" tell process "iTunes" set frontmost to true # # iTunes > メニューバー > 制御 > 停止 をクリック # ・iTunes のバージョンにより異なる場合は適宜書き換える # ・画面スリープとパスワード待ちの場合は動かない? # click menu item 3 of menu 1 of menu bar item 6 of menu bar 1 end tell end tell end itunes_stop on _delay(n) do shell script "sleep " & quoted form of (n as text) end _delay
動作確認
- Mac OS X 10.6.8
- iTunes 11.3.1 (2)
ーーーーー
結果としては、「A」は画面スリープ、パスワード待ちのどちらでも問題なく動きました。
一方、「B」は、どちらの状態でも期待どおりに動作しませんでした。click が空振りしてるものと思われます。また、スクリプト動作中にパスワードを入力してロック画面を解除すると、次のループからは正常動作。これは 69+ さんがおっしゃったとおりかなと。
あと、通常どおり iTunes を手動で操作できる状態では「A」「B」どちらも正常に動きました。ま、これは当たり前ですね。
ーーーーー
それと、もし、以下の (キーチェーンアクセスからスクリーンをロックする) スクリプトが Sierra でも動くなら、
do shell script "python <<'EOF' # coding: utf-8 from Foundation import NSURL, NSBundle furl = NSURL.fileURLWithPath_( '/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu/') bundle = NSBundle.bundleWithURL_(furl) keychain_extra = bundle.principalClass().alloc().init() keychain_extra._lockScreenMenuHit_(None) EOF"
こんな感じにすると、キーチェーンアクセスの手動での操作は不要となり、検証がしやすくなります。
on run my lockscreen() my _delay(30) repeat 3 times my itunes_play() my _delay(30) my itunes_stop() my _delay(1) end repeat end run on lockscreen() do shell script "python <<'EOF' # coding: utf-8 from Foundation import NSURL, NSBundle furl = NSURL.fileURLWithPath_( '/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu/') bundle = NSBundle.bundleWithURL_(furl) keychain_extra = bundle.principalClass().alloc().init() keychain_extra._lockScreenMenuHit_(None) EOF" end lockscreen on itunes_play() tell application "iTunes" to play end itunes_play on itunes_stop() tell application "iTunes" to stop end itunes_stop on _delay(n) do shell script "sleep " & quoted form of (n as text) end _delay
動作確認
- Mac OS X 10.6.8
- iTunes 11.3.1 (2)
- Python 2.6.1 / PyObjC 2.2b3 (Mac OS X 10.6.8 に最初から入ってるやつ)
なお、lockscreen() は下記を参考にしました。
AppleScriptであれこれする > キーチェーンの「スクリーンをロック」を実行する。lockScreen
http://memogakisouko.appspot.com/AppleScript.html
もし、これらのスクリプトを試す場合は、何があっても対処できるようにデータのバックアップ体制を整えてからにしてください。
以上、ご参考まで。