AppleScript アップルスクリプト 質問、発表 7 [無断転載禁止]©2ch.net

1名称未設定2017/04/01(土) 12:42:51.78ID:F8/5NUFI0
質問、発表どっちでもスレ。

■注意
安直なスクリプト作成依頼、丸投げ、「こういうの作ってください!」はお断り。
わからない点、エラーが解決できない点についてはスクリプト片を添えて質問すること。
OSバージョンも忘れずに。

■参考
AppleScript Language Guide
https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptLangGuide/
TN2065: do shell script
https://developer.apple.com/library/mac/technotes/tn2065/
AppleScript: The Language of Automation
http://www.macosxautomation.com/applescript/
MacWiki - AppleScript
http://macwiki.osdn.jp/wiki/index.php/AppleScript
鳶嶋工房 / AppleScript
http://tonbi.jp/AppleScript/
AS Hole(AppleScriptの穴)
http://piyocast.com/as/
■過去スレ直近5つ
6 http://potato.2ch.net/test/read.cgi/mac/1387630245/
5 http://anago.2ch.net/test/read.cgi/mac/1330350325/
4 http://anago.2ch.net/test/read.cgi/mac/1256127156/
3 http://pc11.2ch.net/test/read.cgi/mac/1223026902/
2 http://pc11.2ch.net/test/read.cgi/mac/1197443062/

87名称未設定2017/09/01(金) 19:59:35.86ID:AsewW5Hc0
真の>>77だけどw
理由は、アプリ起動にショートカット付ける系のアプリでcontrolキーが割り当てられなかったりするから

まあどうしても割り当てたかったら、スクリプト実行するだけの.appバンドルを自分で作ればいいんだけど
できればアプリ形式でそのままできたほうがいいなーと思って

88名称未設定2017/09/23(土) 00:28:29.83ID:qrnvJJOc0
A
set lst to 2
if lst = 2 then
display dialog "中止"
end if

B
set lst to {1, 2}
repeat with i in lst
display dialog "中止"
end repeat

C
set lst to {1, 2}
repeat with i in lst
if i = 2 then
display dialog "中止"
end if
end repeat
--ここからメインの処理

質問です
A,Bは機能するのにCが動かないのはなぜでしょうか?

それとメインの処理の前にリストをチェックしてリストにあった場合処理を中止したいのですが、
Cでdisplay dialog でキャンセルを押せば中止されるのですが
中止する前に別なダイアログを表示させてから中止するような場合はどうすればいいでしょうか?
よろしくお願いします。

89名称未設定2017/09/23(土) 01:51:01.56ID:oE2fSdGf0
>>88
repeat内にiが2かどうか判断する処理しかないじゃない。
end repeatをメインの処理より後にしないと。

display alert
なら「OK」ボタンしかでないからその後に
returnとか

repeat with i in {1, 2, 3, 4}
if i as integer = 3 then
display alert "中止"
return
end if
--メイン処理
display dialog "メイン処理"
end repeat

90名称未設定2017/09/23(土) 04:17:22.60ID:m1CA2BF10
https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-128481
AppleScript Language Guide > Control Statements Reference > repeat Statements
> repeat with loopVariable (in list) から

> the value of the variable is a reference to the first item in list, in the second iteration, it is a reference to the second item in list, and so on.
→ ループ中、変数はリストの項目のreferenceである。
> To access the actual value of an item in the list, rather than a reference to the item, use the contents of property:
→ 値を利用するには contents of とする。→ contents of i
> This technique is especially important when performing a comparison, as you typically want to test whether the value of a list item matches another value.
→ 比較を行うときに特に重要。
> You can also use list variables directly in expressions, which may result in an implicit coercion from an object reference to a specific data type.
→ 式の中では特定のデータ型に変換され直接使える。 i + 0 とか

91名称未設定2017/09/23(土) 07:18:19.41ID:qrnvJJOc0
>>89さん
>>90さん
ありがとうございました
as integer, contents of 共に上手くいきました
メイン処理をrepeatの外に置いたのはひとつでも該当したら
一切の処理を中止したかったからです
でもreturnで上手くいきました

a reference なんですけど参照する項目の情報って意味ですか?
今回の場合ならリストの1番目の項目、2番目の項目という情報のことで
それぞれの値ではない(自動的に値を用意してくれる場合もあるが要注意)
用語に慣れてなくてすいません

92名称未設定2017/09/23(土) 22:27:10.77ID:oE2fSdGf0
set lst to {1, 2, 3, 4}
repeat with i in lst
end repeat
i
結果=>item 4 of {1, 2, 3, 4}
なるほど参照。

set lst to {1, 2, 3, 4}
set item 4 of lst to 14
lst
結果=>{1, 2, 3, 14}
そりゃそうだね。

set lst to {1, 2, 3, 4}
repeat with i in lst
set i to i + 10
end repeat
lst
結果=>{1, 2, 3, 4}
自分が思ってた参照と違う。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)

93名称未設定2017/09/23(土) 22:55:23.02ID:IBOjc3/u0
>>91
リピートから抜けるのは
exit repeat
の方が良いよ
returnだとハンドル内だとハンドル抜けちゃうから

94名称未設定2017/09/24(日) 00:06:47.63ID:96tAYODX0
>>93
ありがとうございます
フォルダの中身を処理するスクリプトを書いていて
中身をまず先に全部チェックして問題があったら取り除いて
問題が無くなってから一斉処理するものを考えてました
exit repeat でも試してみます!

95名称未設定2017/09/24(日) 17:23:54.15ID:CfSbM5kK0
>>92
参照を数値で置き換えているんだろう。

set lst to {1, 2, 3, 4}
repeat with i in lst
set contents of i to contents of i + 10
end repeat
lst

でどうかな。

96名称未設定2017/09/25(月) 00:06:57.00ID:lK9q1Hxq0
>>94
それ再帰的に何度もフォルダ内をrepeatしてファイルを移動なり削除なりするってことだよね
それはかなり非効率的(同じファイルを何度も評価する)だから
1度のrepeatで問題あったファイルはパスでリストなりに保存して行って
全部のファイルをチェックし終わったら移動or削除リストを処理するようにした方が良いんじゃないかな

97名称未設定2017/11/27(月) 15:51:30.59ID:UfjHgS1L0
QLabというソフトでApplescriptが使えるのでファイル指定の一括変更をやってみたいのですが、
ファイル名の一部をファイルパス内に入れる表記方法がわかりません

「cue」に対して対象ファイルをパスで指定する部分です
リスト内で指定しているのは事前に用意してあるファイル群の先頭の文字列です
各数字に対して01_A.aif、01_B.aif、01_C.aifといった感じで大量にあります

set File_A to choose from list {"01","02","03"}
 set file target of cue"01" to "ファイルパス/「File_Aで選択した文字列」_A.aif"
 set file target of cue"02" to "ファイルパス/「File_Aで選択した文字列」_B.aif"
 set file target of cue"03" to "ファイルパス/「File_Aで選択した文字列」_C.aif"

File_Aで02を選択すると02のA、B、Cが割り振られてほしいんですがどう書いたら良いんでしょうか

98名称未設定2017/11/27(月) 17:29:56.00ID:MxIY0UcX0
単なる文字列結合、
"ファイルパス/" & File_A & "_A.aif"
でいいんじゃないの。必要なら POSIX path of 付けて
POSIX path of ("ファイルパス/" & File_A & "_A.aif")

99名称未設定2017/11/27(月) 17:33:26.90ID:MxIY0UcX0
POSIX path of は意味ないか。POSIX file の方か、必要ならは
POSIX file ("ファイルパス/" & File_A & "_A.aif")

100名称未設定2017/11/27(月) 18:49:54.82ID:UfjHgS1L0
できました!
&はクォーテーション内に書くんですね

101名称未設定2017/11/27(月) 19:26:59.63ID:MxIY0UcX0
外だけどね

102名称未設定2017/11/27(月) 19:55:08.77ID:UfjHgS1L0
あぁ、クォーテーションで囲ったパスに挟まれてるのか
理解しました

103名称未設定2017/11/27(月) 20:15:20.28ID:MxIY0UcX0
パスというか文字列だけどね。File_A も文字列(変数)、"..."も文字列(定数)
文字列 & 文字列 & 文字列
でしかないよ

104wata2017/12/10(日) 11:53:09.80ID:VyM05FE50
こんなんできたらなーっていうのなんですけど。
アップルスクリプトっていろんな
アプリケーションの制御ができるじゃないですか。

アシスタントスクリプトみたいなものって作れるものなんでしょうか?
数秒ごとか、それよりも短い時間でループしてアクセスして、

具体的には現在アクティブになっているアプリケーションの
例えば選択しているオブジェクトの種類を取得して

その種類で予め登録した、複数のスクリプトを並べて実行しやすいように出してくれるような。

登録が手間かもしれませんが、一度登録してしまえばルーチンワークには楽かな。
数秒ごとにアプリにアクセスするから重くなるので非現実的なのかな。

スクリプトの提案にGUI使えたらいいなと思ったんですが、、notificationとかつかえるのかな
フォルダに細かく分けてスクリプトを入れといて、そのパスを登録してしまえばFinderからフォルダウィンドウを開けば楽なのかな。

いややっぱり、重くて使いものにならないのかな。。。

105wata2017/12/10(日) 12:10:52.19ID:VyM05FE50
自分がどれだけ仕事に集中しているのか監視してもらうスクリプトを書いてて
現実的にできそうかなと思った次第です。
下のがそれです。アプレット書き出しで、オプションは終了しないにチェック入れたら使えると思います。
できたログを眺めていてうまく拾えていない箇所は、おそらくmacがスリープしたからかななんと思います。

宅ファイルにアップしましたので、気になった方はみていただけるとありがたいです。
https://free.filesend.to/filedn_infoindex?rp=e25cbf030cad39b2fbeec2de1edd394o

106名称未設定2017/12/10(日) 13:58:23.42ID:qGzyW+jE0
そういうのはobjcで書いた方が柔軟性あって楽だよ
わざわざスクリプト言語で縛りプレイする必要ない

107名称未設定2017/12/10(日) 13:59:23.13ID:qGzyW+jE0
もちろん他のアプリケーションを操作する部分は
applescriptで書けば良いけど
マネージャーまでapplescriptで書く必要はないって事ねb

108名称未設定2017/12/11(月) 21:57:21.82ID:hlnB+ZGT0
何度も提案されては消えたアイデアだね。
嫌いじゃないけど、大変すぎる。

109名称未設定2018/01/14(日) 15:13:48.90ID:XdTiug1c0
充電が80%になったら通知してくれるCharge CheckというAppleScriptアプリを作ってくれている人がいるけど
OSX10.6でも同じようなの作れる?
そもそも10.6では無理?

110名称未設定2018/01/14(日) 15:55:07.63ID:UXK1jNFW0
簡易的なのは割とすぐ作れるんじゃないの
バッテリー情報は do shell script "pmset -g batt" 等で取得
通知はGrowlで

111名称未設定2018/01/14(日) 20:21:13.67ID:XdTiug1c0
>>110
ググってこんな感じのしか見つけられなかった
set batteryPercent to do shell script "pmset -g batt | awk '/InternalBattery/ { sub(/;/, \"\"); print $2 }'"
display dialog "Battery is " & batteryPercent & " charged." buttons {"OK"} default button "OK"
なんかできそうだけど、自分には作れないや
どうもありがとう

112名称未設定2018/01/15(月) 12:50:15.73ID:8aMEURZz0
on idle

return 60
end idle

で挟んで、diplay dialogの前の行に
if batteryPercent > 80 then
後の行に
quit
end if
挿入する。

113名称未設定2018/01/15(月) 22:01:42.13ID:1GAnzEgZ0
>>112
ありがとう
これでいいのかな?

on idle
set batteryPercent to do shell script "pmset -g batt | awk '/InternalBattery/ { sub(/;/, \"\"); print $2 }'"
if batteryPercent > 80 then
display dialog "Battery is " & batteryPercent & " charged." buttons {"OK"} default button "OK"
quit
end if
return 60
end idle

実行して充電してみたけど80%すぎてもなにも出てこなかった
なにか根本的に間違ってるのかな…

114名称未設定2018/01/15(月) 22:02:45.38ID:1GAnzEgZ0
試しにon idleで検索して3秒後に音が鳴る(たぶん)やってみたけど

on idle
beep
return 3
end idle

反応がなかった
初心者ですまない

115名称未設定2018/01/15(月) 23:08:14.67ID:kX+AUH5H0
on idle
は、アプリケーションを実行したときでしか動かない。しかも、起動中しか動かない。スクリプトを、
ファイルフォーマット: アプリケーション
ハンドラの実行後に終了しない
で保存して、保存された .app を起動すれば、そのシンプルなのでも動く

116名称未設定2018/01/16(火) 11:10:15.19ID:YivhleEe0
>>115
できました!
これはスリープもきかなくなるんだね…
なかなか思ったとおりにはいかないけど、とりあえず動いたのでちょっとすっきりした
どうもありがとう

117名称未設定2018/01/27(土) 14:19:06.01ID:/A7SfRfh0
友達や知人が一人もいないので、電話がかかってきた経験がない。
通話の着信音も聞いたことがない(鳴らない電話)。
手元のiPhoneはスマートフォンと呼ばれているが、
果たして本当に電話機なのか怪しいとさえ考え始めた。

そこで自分に電話(FaceTimeオーディオだけど)をかける。
スクリプトは以下の通り。
set phoneNum to "自分の電話番号"
do shell script "open facetime-audio://" & quoted form of phoneNum
tell application "System Events"
repeat while not (button "発信" of window 1 of application process "FaceTime" exists)
delay 1
end repeat
click button "発信" of window 1 of application process "FaceTime"
end tell

Automatorを使い上記をカレンダーアクションとして保存する。
該当ファイル(.appファイル)に「コンピュータの制御を許可」を
与えておけば、カレンダー.app内で通知時に同アクションを開く
設定にすることで、好きなタイミングで電話がかかってくる(予定調和)。

また電話をかけたりかけなかったりというスクリプトにして
launchdから定期実行しても良い(予期せぬ出会い)。
set rNum to random number from 1 to 10
if rNum < 3 then
さっきのスクリプト
end if

iPhone側には着信履歴(FaceTimeオーディオだけど)が残る。
「あいつしょっちゅう電話してきてうるせぇな」という気分を
満喫できる(リアル生活の充足)。

118名称未設定2018/01/27(土) 15:44:23.56ID:Z3ZqkQIR0
(´>ω<`) つらいのぅ〜

119名称未設定2018/01/27(土) 22:49:09.78ID:eOSJEmKf0
いい発表だった

120名称未設定2018/01/31(水) 17:15:08.29ID:RWzYK2TV0
メッセージは遅れる?

121名称未設定2018/01/31(水) 17:15:58.14ID:QG7bLxOR0
遅れる

122名称未設定2018/01/31(水) 17:29:10.56ID:+M/lBDyQ0
何分くらい?

123名称未設定2018/02/01(木) 07:31:17.86ID:x8RNVB090
メッセージは送れますか、(ㆀ˘・з・˘)

124名称未設定2018/02/01(木) 12:24:05.77ID:08iVOOBW0
送れる

125名称未設定2018/02/01(木) 13:18:03.93ID:+AZgGj040
>>115
Cocoa API使うと大丈夫そうな
スリープの邪魔要因は詳しくはわからんが、アクティビティモニタで 非スリープ がon idleだと はい にころころ変わるな。Cocoa API直接だと変わらない

use AppleScript version "2.4"
use framework "Foundation"
use scripting additions

current application's NSTimer's scheduledTimerWithTimeInterval:3 target:me selector:"timerFired:" userInfo:(missing value) repeats:yes

on timerFired:theTimer
beep
end timerFired:

(いきなりCocoa APIとかとは思うが、ほぼ一行&ほぼ定型みたいな感じなので)

126名称未設定2018/02/01(木) 13:20:41.93ID:+AZgGj040
>>125
>>116だった

127名称未設定2018/02/01(木) 13:44:39.11ID:DX8LljYV0
元質問者は10.6だよ
自分の実験に作ったんならあれだけど

128名称未設定2018/02/01(木) 15:08:48.12ID:+AZgGj040
どうも。ぬぁにぃいw
なるほど、それじゃだめだな。どうも

129名称未設定2018/02/04(日) 17:23:20.73ID:iafplOJZ0
こんにちわ、ヒントもしくは検索語句を教えてください。
──────────前提
古いMac mini Serverを眠らせておくのはもったいないので、
24節気を表示させようとしています。
AppleScriptのアプリを作って、毎日0:00に再起動させ、
起動項目として呼び出します。
24節気画像はキャドでおのおの作り、プレビュー.appを最大化して
各節気ごとに表示させます。
──────────ver
MacOSX Server 10.6.8
──────────AppleScript
--current dateをMMDD形式にする。
set M to month of (current date) as number
set MM to "0" & M --ひと桁月の桁揃え。
set MM to strings -1 thru -2 of MM --下から二桁をとる
set D to day of (current date)
set DD to "0" & D --ひとけたの桁揃え。
set DD to strings -1 thru -2 of DD --下から二桁をとる
set the24SekkiNum to MM & DD
if the24SekkiNum is "0204" then --このパターンでないとコンパイルできない
display dialog "立春" --ダミー
--ここにスクリーンショット等を最大化表示のコマンドを呼び出す。
else
--他の24節気を表示させる。
end if

130名称未設定2018/02/04(日) 17:23:57.74ID:iafplOJZ0
改行が多い。といわれたので。


という感じで。
太陽 黄経の計算が自分のスキルではできないので,
国立天文台の24節気一覧表から2018年の日付を取り、
春分だったら”0204”としてAppleScriptの結果と同じ場合”春分”の
画像を呼び出して表示させます。
──────────問題/疑問
春分から清明まで日にちがあるのでその間の処理をどうしようかと。
直近のデータを記憶(この場合は”0204”)させて表示させるとか。
エラーが出たら直近のデータを見ろ。というコマンドがあるかどうか知りたいと思います。

131名称未設定2018/02/04(日) 17:29:56.29ID:9fmbODdW0
はい。(´・ω・`)

132名称未設定2018/02/04(日) 18:51:09.73ID:LFznGo0p0
>エラーが出たら直近のデータを見ろ。というコマンドがあるかどうか知りたいと思います。

そういう風に組んどけばいい

133名称未設定2018/02/04(日) 22:46:28.75ID:iuBSBdB20
冒頭で
prop aDay: “”
としておいて、本文では
try
set aDay to getDay()
end try
かな?
エラーがなければ値が更新される。
的外れな回答ならごめん。

1341032018/02/05(月) 00:12:51.77ID:JlLAapt60
try文も難しいなぁ。と考えていたところ、
ひょっとしてと、
if the24SekkiNum ≥ "0204" then
display dialog "立春"
とやってみたところ、”0205”で”立春”と表示されました。
一年ごとに書き変えますので、これでいいかと。
大小の判定をstringsでできたのに驚きました。

ヒントありがとうございました。

1351302018/02/05(月) 00:13:29.94ID:JlLAapt60
いけね、130でした。

136名称未設定2018/02/09(金) 01:06:53.81ID:DJQSVNnB0
☆ 私たち日本人の、日本国憲法を改正しましょう。現在、
衆議員と参議院の両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

137名称未設定2018/02/09(金) 11:51:11.78ID:SUprxS5R0
保守

新着レスの表示
レスを投稿する