2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

AppleScript アップルスクリプト 質問、発表 7

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

■注意
安直なスクリプト作成依頼、丸投げ、「こういうの作ってください!」はお断り。
わからない点、エラーが解決できない点についてはスクリプト片を添えて質問すること。
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/

2 :名称未設定:2017/04/01(土) 13:01:16.77 ID:+bEEMwk80.net
>>1
乙です(*´・ω・)(・ω・`*)ネー

3 :名称未設定:2017/04/02(日) 00:55:40.49 ID:K0logwwW0.net
乙です
もう少し書き込んでおかないと
せっかく立ててくれたのに落ちるかも

4 :名称未設定:2017/04/02(日) 01:13:50.24 ID:N3WJVO2A0.net
保守

5 :名称未設定:2017/04/02(日) 01:23:07.56 ID:jddYfO370.net
display notification ">>1乙" with title "前スレはまだ埋まっていません"

6 :名称未設定:2017/04/02(日) 02:09:28.18 ID:5A+YS6oc0.net
>>5
なにこれ、そんな命令あるの知らなかった
横からシュルッて通知が出たw

7 :名称未設定:2017/04/02(日) 02:22:25.39 ID:ZjROB3li0.net
10.9からあるのに...

8 :名称未設定:2017/04/02(日) 07:13:07.70 ID:jddYfO370.net
でもぶっちゃけ大量の個人用スクリプト書き直すのめんどいから
ふだんは未だに tell app "GrowlHelperApp" してるわw
Growl 1.2.2 が今でも動いてるし、それで何の問題もないもんね

ただ今風のやり方も知ってて損はない
前スレにも書いたがたまには情報収集して脳みそアップデートすると三文の得があるかもよ
https://developer.apple.com/library/content/releasenotes/AppleScript/RN-AppleScript/

9 :名称未設定:2017/04/03(月) 01:26:06.30 ID:BGGk3dvh0.net
保守

10 :名称未設定:2017/04/07(金) 01:13:31.58 ID:JltYO6V70.net
捕手

11 :名称未設定:2017/04/07(金) 01:32:14.31 ID:oSX3o3FP0.net
Notification managerにアクセスできるようになった時は、ちょっとした祭りだったな。
クラッシックMacの頃から待ち焦がれていた機能だったから。

12 :名称未設定:2017/04/07(金) 08:40:28.90 ID:VtVVd1zu0.net
上で書かれてるようにみんなgrowl使ってたし実際それほどでもなかったような
いまさらか……みたいな感じ

13 :名称未設定:2017/04/11(火) 18:59:32.22 ID:AiQt1fau0.net
処理したファイルを最後に外付けディスク内の指定フォルダ内に保存したいのですが保存されません。
& " --out " & "/Volumes/外部HDD/外部ドライブ内フォルダ/"
起動ディスク内の指定フォルダでは問題なく保存されます。
& " --out " & "/~/Desktop/起動ディスク内フォルダ/"
書き方が間違ってますか?アドバイスお願いします。。

14 :名称未設定:2017/04/11(火) 19:08:09.24 ID:gpZTVfSa0.net
なんの話だよ
sipsコマンド?

15 :名称未設定:2017/04/11(火) 19:23:45.17 ID:AiQt1fau0.net
set scriptCommand to "sips " & " -s formatOptions 100% -p " & " --out " & "~/Desktop/フォルダA/"
do shell script scriptCommand
はい。これで起動ディスクのフォルダ内には放り込んだ1.jpgがCOPY1.jpgとして保存されます。
しかし外部ディスクのフォルダになると外部ディスク直下に白紙ファイルが出来たり何も起きなかったり。。
ちなみに指定したい保存先は:
/Volumes/3TB HDD/folder 1/folder 1 2/
です。パス内にスペースがあるのがまずいのか。。

16 :名称未設定:2017/04/11(火) 19:32:05.60 ID:gpZTVfSa0.net
quoted form of ...
すりゃいいんじゃないの
do shell script使うならTN2065読んだ方がいいよ

17 :名称未設定:2017/04/11(火) 19:37:12.98 ID:AiQt1fau0.net
シングルクォートで囲むだけで行けたんですね。。出来ました。。失礼しました。

18 :名称未設定:2017/04/11(火) 21:26:31.80 ID:HPoD/3iq0.net
常にquoted form ofしておけば悩まない。

19 :名称未設定:2017/04/12(水) 14:24:03.12 ID:k4FUZs150.net
あるある

20 :名称未設定:2017/04/28(金) 20:18:30.78 ID:VrfrApOV0.net
コピーした文章を単語登録するやつ、いろいろサイトを参考にしつつ書いてみたんだけどもっとスマートなやり方ってないんかな

tell application "System Events"
key code 49 using command down ―Spotlightを開く
delay 0.5
key code 102
delay 0.5
keystroke "keyboard"
delay 0.5
key code 36
delay 0.5
tell process "System Preferences"
tell tab group 1 of window "Keyboard"
click radio button "Text"
click button 1 of group 1
delay 0.3
keystroke tab
keystroke "v" using command down
keystroke tab using shift down
end tell
end tell
end tell

21 :名称未設定:2017/04/28(金) 23:08:06.28 ID:gZFbChtN0.net
前半の数行は、
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.keyboard"
end tell
じゃいかんの?
後半はよく知らないけど

22 :名称未設定:2017/04/28(金) 23:12:10.34 ID:gZFbChtN0.net
ゴミレスだった。。。
ごめんね

23 :名称未設定:2017/04/28(金) 23:12:52.64 ID:dTKzjSUR0.net
とりあえず同じことを簡単に書くならこう

tell application "System Preferences"
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
activate
end tell

UI Scripting はスマートじゃないから別の方法がほしいってことだと思うけど
iCloud の絡みもあるしユーザ辞書のデータは直接いじらないほうがいい気がする

24 :名称未設定:2017/04/28(金) 23:42:24.35 ID:ioUFI/yc0.net
こんな感じでどう?

tell application "Finder"
open POSIX file "/System/Library/PreferencePanes/Keyboard.prefPane"
end tell
tell application "System Events"
tell process "System Preferences"
repeat
if exists tab group 1 of window 1 then exit repeat
delay 0.3
end repeat
tell tab group 1 of window 1
click radio button 2
click button 1 of group 1
set value of text field of UI element 2 of last row of table 1 of scroll area 1 to the clipboard
click text field of UI element 1 of last row of table 1 of scroll area 1
end tell
end tell
end tell

25 :名称未設定:2017/04/28(金) 23:44:51.44 ID:ioUFI/yc0.net
>>23
こんな書き方あったのか…

26 :名称未設定:2017/04/29(土) 12:12:09.72 ID:FcvMI78f0.net
>>21-24
ありがとうございます
俺環なのかもしれませんが、POSIXで指定したら環境設定が最前面に来ないし
応答が遅くなるので、前半はSpotlightのままにしました
あと、set valueでやると、入力は出来るんだけど単語登録されないという
不思議な事態になったので、repeatのところだけ書き加えて改変しました

tell application "System Events"
key code 49 using command down
key code 102
delay 0.5
keystroke "keyboard"
delay 0.5
key code 36
delay 0.5
tell process "System Preferences"
repeat
if exists tab group 1 of window 1 then exit repeat
delay 0.3
end repeat
tell tab group 1 of window "Keyboard"
click radio button 2
click button 1 of group 1
delay 0.3
keystroke tab
keystroke "v" using command down
keystroke tab using shift down
end tell
end tell
end tell

27 :名称未設定:2017/04/29(土) 13:42:30.99 ID:Ux9tvKvS0.net
>>26
前半は>>23のやり方がベストだろう。変なことする必要もないし行数も半分以下

28 :名称未設定:2017/04/29(土) 13:47:49.82 ID:FcvMI78f0.net
>>27
環境設定のウィンドウが最小化されてると動かないことないですか? 

29 :名称未設定:2017/04/29(土) 18:09:01.88 ID:FcvMI78f0.net
reopenつけたらいけました!!
ありがとうございます

30 :名称未設定:2017/04/30(日) 06:08:05.40 ID:1oYYm5910.net
こうか
こんな書き方あったんだな

tell application "System Preferences"
reveal anchor "Text" of pane id "com.apple.preference.keyboard"
activate
reopen
end tell

31 :名称未設定:2017/04/30(日) 17:39:24.93 ID:IF7HMWKE0.net
applescriptの勉強で、見よう見まねで
Firefoxでurlを開いて読み込み完了したらそのウィンドを閉じるをやってみたのですけど、
「end of lineがあるべきところですが"""が見つかりました。」と出てうまくいきませんでした。
添削お願いします。

tell application "Firefox"
open location "http://www.google.com"
activate
end tell
repeat until window "Google" of application process "Firefox" of application "System Events" exists
delay 0.1
end repeat
tell application "Firefox"
close window "Google"
end tell

32 :名称未設定:2017/04/30(日) 18:13:33.53 ID:dCjh+jW10.net
勉強ならまともにスクリプタブルなアプリでやりなよ
いきなりFirefoxとか

33 :名称未設定:2017/04/30(日) 18:22:10.76 ID:qN2t4UJL0.net
これでいいんちゃう

tell application "Firefox"
open location "http://www.google.com"
activate
end tell
repeat
if exists window "Google" of application "Firefox" then exit repeat
delay 0.1
end repeat
tell application "Firefox"
close window "Google"
end tell

多分、application processって文言はtell application “System Events”の中身にしか続かないと思う
application specifierとelement specifierとかいう違いがあるらしいけど、僕も詳しいことはよく知らん

34 :名称未設定:2017/04/30(日) 18:30:57.84 ID:4jCfK0kz0.net
do shell script "open -b 'org.mozilla.firefox' 'http://www.google.com'"

35 :名称未設定:2017/04/30(日) 22:09:35.35 ID:DQZEroXk0.net
参考サイトはざっと見たんですけど、UI browserのオススメって何かありますかね?

36 :名称未設定:2017/04/30(日) 22:30:14.79 ID:4jCfK0kz0.net
Accessibility Inspector

37 :名称未設定:2017/05/01(月) 12:41:42.29 ID:OQ7pdtF70.net
>>36
超便利だ……
ありがとうございます

38 :名称未設定:2017/05/01(月) 23:22:34.46 ID:ENeWi3NJ0.net
時々バージョンアップするアプリケーションのアイコンをバージョンアップのたびに変えたくて、
Resourcesフォルダの中のアイコンファイルを置き換えるという荒技のアップルスクリプトを作ったのですが、
これだと部分的にしかアイコンが変更されず(Finderのカラムでは前のままでプレビューでは変更されているなど)
結局「情報を見る」にアイコンをペーストする方法でしかきれいに変更されませんでした。面倒なので、
>「情報を見る」にアイコンをペーストする
をアップルスクリプト化したいのですが、情報を見る、のアイコンを触る方法がまるっきりわかりませんでした

tell application "Finder"
set icon of application "test.app" to icon of file “test.jpg”
end tell

としたら
application ¥"test.app¥" をicon of file ¥”test.jpg¥"に設定できません
と叱られました。それで後半の icon of を外したら
application ¥"test.app¥" をfile ¥”test.jpg¥"に設定できません
と叱られました。そりゃそうだと思いますがこれ以上どうしたらよいかわかりませんでした。
すみませんがお分かりになる方がおられましたらよろしくご指導をお願いいたします。
ちなみに記録してみたら「情報を見る」ウインドウを開いて閉じただけとなっておりました。
(3年前のブログで、対応してないらしいことが書いてあるけど変わっていますように)

39 :名称未設定:2017/05/02(火) 00:38:54.24 ID:+RCS7gyN0.net
これ真似ればできるんじゃねー
ttp://hints.macworld.com/article.php?story=20091111215845472

40 :名称未設定:2017/05/02(火) 00:45:32.50 ID:MGTeBfHu0.net
リソースフォルダのアイコンを変えるので問題ないはずだけど
アイコンを変えた時は
確かFinder を再起動しないとダメじゃなかった?
今パソコンつけていないから試してないけど。

41 :名称未設定:2017/05/02(火) 08:57:31.97 ID:XpJQQkcz0.net
キャッシュされてるから入れ替えただけではすぐには反映しないね

42 :名称未設定:2017/05/02(火) 12:17:33.97 ID:9PGSaPWQ0.net
ある程度頻繁に変わるようなら
>>39にあるようにlaunchdaemon化するのがよさそう

43 :38:2017/05/03(水) 01:15:28.08 ID:kB+u14Ex0.net
>>39
おお、自分では見つけられませんでした
ありがとうございます
そうかー、キーストロークそのまま使えばいいのかー
今ちょっと時間ないので後日試してみます

>>40
Finderだけじゃなくて再ログインもMac再起動もしましたけど反映しませんでした

44 :名称未設定:2017/05/03(水) 01:38:13.88 ID:lZ95FE0B0.net
ググると最近のOSだと再起動ぐらいじゃダメで
キャッシュを捨ててパソコンを再起動させないといけないみたいで
みんな結構苦労しているみたいだね、失礼しました

45 :名称未設定:2017/05/03(水) 18:45:26.04 ID:AvL5ISgt0.net
keystroke以外の方法でSafari操作しようと思ったらやっぱJavaScript勉強しないといけないのかな

46 :名称未設定:2017/05/03(水) 22:04:10.28 ID:hvMVl1Ss0.net
何がしたいかによるとしか
普通のコマンドだって色々あるぞ

47 :名称未設定:2017/05/14(日) 04:20:39.78 ID:Xn9zYPgm0.net
最新OS(10.12.4)でDockのメニューがスクリプトエディタだけおかしいのは俺だけ?
標準的なメニュー項目(すべてのウインドウを表示、隠す、終了)が無い

48 :名称未設定:2017/05/14(日) 07:15:44.45 ID:DVHfr6Px0.net
>>47
たぶん上の方にあると思う。

49 :47:2017/05/14(日) 22:23:09.93 ID:Xn9zYPgm0.net
OS再起動したら治りまつた
Dock側の不具合かな

50 :名称未設定:2017/06/29(木) 14:10:14.66 ID:J/hivcen0.net
JXAもこのスレでいいの?
今どちらを覚えようか悩んでる状態
Java Scriptは元々ある程度書けるっていうのと、↓のサイトの

http://blog.s0014.com/posts/2016-08-04-osxjs1/

> 僕は元々AppleScript自体がほとんど分からない状態だったけど、どうやらAppleはOSXのスクリプティングをAppleScriptからJavaScriptに置き換えたいらしいです。

の記述を読んで、それが本当ならAppleScriptわざわざ覚えるのがもったいない気がして
逆に、AppleScript覚えた方が良いメリットなどあれば教えてもらえると嬉しいです!

51 :名称未設定:2017/06/29(木) 20:30:08.91 ID:wGpou5sn0.net
AppleScriptは近いうちになくなる、いや、なくなるのはJavaScriptだ、というのは憶測でしかなく、今のところどちらも外れている状態
AppleScriptよりJXAのほうが高機能なので、迷わず今日からJXAでコーディングするべし

52 :名称未設定:2017/06/29(木) 21:37:09.00 ID:LYx24vpp0.net
Mac最近使い出して、JavaScript書ける人ならば、JXAでいいんじゃないの
そのサイトにも書いてあるけど
まだ使ってる人が少ないから例文が少なくJXAに翻訳するのが面倒なくらいで

俺は過去の資産があるからまだAppleScriptのまま行くけども

53 :名称未設定:2017/06/29(木) 21:42:41.83 ID:/CPdHPEY0.net
JXAってJavaScriptだしセキュリティ的にどうなのって思っちゃうけど
さすがにappleが考慮してないわけ無いか

54 :名称未設定:2017/06/30(金) 11:26:17.64 ID:uwubp+Ju0.net
>>51-52
ありがとう!JXA覚えることにするね
ちなみにMac歴は20年くらいですw

55 :名称未設定:2017/06/30(金) 14:23:54.30 ID:/aRyw0p60.net
>>53
ちょっとイミフ
Javascriptのセキュリティ的にって?ブラウザ上/ネットワークで(勝手に)ダウンロードして実行が問題であって、Javascriptそのものの脆弱性ってなんかあったっけ?

56 :名称未設定:2017/06/30(金) 14:27:08.26 ID:/aRyw0p60.net
あー、JavascriptだからブラウザのJavascriptでJXAがってことか
ブラウザで動くJavascriptとはそこは別物だろう

57 :名称未設定:2017/06/30(金) 14:39:34.15 ID:/aRyw0p60.net
ああー、デバッガでSafariのWeb Inspectorが利用される/使えるのか
ローカルファイル実行の例外もしくはスクリプトエディタとのアプリケーション連携なだけかもしれないが、ちょっと危険な香りはするな。Safari(WebKit)が理解しているという点は

58 :名称未設定:2017/06/30(金) 22:27:49.30 ID:oZysuePQ0.net
俺も>>55のように思ったんだが、ASだって危険な処理やらそうと思えばできるし
JSであることが問題になるのってどういう場面だ?

59 :名称未設定:2017/07/01(土) 15:53:24.34 ID:E8Kr2aZd0.net
Webでいたずらかな。
ローカルのセキュリティはASの方がやばそうだが、いろいろ穴は塞がれ、そして不便になった。

60 :名称未設定:2017/07/12(水) 16:39:40.28 ID:M6Ixi3bA0.net
mac標準メモアプリを一括で書き出す方法を調べていたら下記スクリプトを書かれている方がいました。
多分書き出してくれるものだと思うのですが
自分は読み解けないのでどういう指令のものなのか教えて頂けると助かります。

count=0; sqlite3 Library/Containers/com.apple.Notes/Data/Library/Notes/NotesV4.storedata 'select ZHTMLSTRING from ZNOTEBODY' | while read line; do echo $line > note$count; ((count++)); done

61 :名称未設定:2017/07/12(水) 17:01:31.17 ID:99ZCzng50.net
このスレと全然関係ないじゃん

62 :名称未設定:2017/07/12(水) 17:38:19.59 ID:M6Ixi3bA0.net
すみません、ターミナルコマンドだったようです。

63 :名称未設定:2017/07/16(日) 01:52:12.56 ID:z5psAnZY0.net
app = Application.currentApplication()
app.includeStandardAdditions = true
outputFolder = app.pathTo("desktop",{from:"user domain"}) + "/Notes"
kRAWMarker = 'BEGIN_OF_RAW'
kShellScript = 'sqlite3 "$HOME/Library/Containers/com.apple.Notes/Data/Library/Notes/NotesV6.storedata" ¥'select "' + kRAWMarker + '", ZHTMLSTRING from ZNOTEBODY¥''
notes = app.doShellScript(kShellScript).split(kRAWMarker +'|')
notes.shift()
notes.forEach(function (anItem, index) {
filePath = $(outputFolder + "/Item " + index + ".txt").stringByStandardizingPath
error = $()
$(anItem).writeToFileAtomicallyEncodingError(filePath, true, $.NSUTF8StringEncoding, error)
if(error && error.code)
app.displayDialog(ObjC.unwrap(filePath) + "¥n¥n" + ObjC.unwrap(error.localizedDescription))
})

64 :名称未設定:2017/07/16(日) 08:53:23.47 ID:F1ckUwJ00.net
なんか微妙
メモアプリはスクリプタブルなのに

65 :名称未設定:2017/07/21(金) 21:48:47.83 ID:diQFvHvD0.net
勉強がてらJXAで昔書いたスクリプトを書き換えてみたりしたんだけど
出来たーと思っても、日本語文字化けしてるじゃんとか
Aのアプリだと問題ないのにBのアプリだと動くけどエラー吐いてるぞとか
情報が少なくてトラブった時の解決策が見つからなくて厳しかった
なんでAppleScriptでいいや

66 :名称未設定:2017/07/22(土) 00:45:46.79 ID:0kGQ4Eo+0.net
StackOverflowとか結構ヒットするけどなあ
日本語の情報はほとんどないけど

67 :名称未設定:2017/07/26(水) 00:59:45.52 ID:jAD80pxK0.net
mac でなんかやるには Python が最強って結論が出たわ。

最悪なのは 🍏 アップルスクリプト 🍎

アップルスクリプトは継続性が怪しいし、学習環境が悪い。
本とかほとんどない。

アップルスクリプトは連携させる外部のモジュールとかがないのも辛い。

Python だとワード、エクセル、pdf とかお手軽に操作、読み書きできる。
ウェブページのDLとかめちゃ簡単。

68 :名称未設定:2017/07/26(水) 01:32:37.46 ID:qeGztfLS0.net
ガチ言語と比べて頂いてありがとうございました

69 :名称未設定:2017/07/26(水) 11:28:50.31 ID:qArLzfXh0.net
あほだな〜賢い人は py と AS その他の両刀よ。適材適所

70 :名称未設定:2017/07/26(水) 12:11:11.52 ID:bK5NkiHw0.net
JXAにすると10.9以下に対応できなくなるから
古めのOSでも同じScript使いたいという場合に困るか

71 :名称未設定:2017/07/26(水) 15:37:45.56 ID:iyxVTdve0.net
>>67
AppleScriptのメリットって、
入力ダイアログや選択ダイアログとかの
インターフェースが一瞬で作れるところじゃない?

Dockに登録したアイコンをクリックすると実行される簡易アプリや、
ファイルドロップで実行されるドロップレットもすぐ作れるし。

内部処理はPythonなりRubyなり、使いたいライブラリが揃ってる
言語に投げちゃえるのもAppleScriptの大きな特徴。
そのへんをまだわかってないようなら、
do shell scriptを調べてみると幸せになれるかも。

72 :名称未設定:2017/07/26(水) 17:51:28.15 ID:eB8bopkn0.net
Pythonと背反というわけではないよな。
うまく組み合わせればウハウハ。

73 :名称未設定:2017/07/26(水) 19:58:24.34 ID:IWtuH9B10.net
pythonなんてマシンにインストールしてるのはコンピューターキモオタだけだよ。

74 :名称未設定:2017/07/26(水) 20:04:24.88 ID:bK5NkiHw0.net
OSXユーザー全員キモオタ宣言いただきました

75 :名称未設定:2017/07/26(水) 21:29:12.32 ID:Kee1Lxsd0.net
Perl PHP Python Ruby Java JavaScript AppleScript
これだけデフォルトで入ってるんだっけ?
まあキモオタかもね

76 :名称未設定:2017/07/27(木) 18:05:21.27 ID:kevaGaCM0.net
今Javaは自分でインストールしないと無いんじゃない?

77 :名称未設定:2017/08/31(木) 05:03:23.13 ID:nYdEYsJP0.net
アプリケーション形式で保存したものを起動時にcontrolキー押してると確認ダイアログ出るけどこれ無効にできないのかねえ

78 :名称未設定:2017/08/31(木) 09:04:57.61 ID:ZsSruYs40.net
方法は知らんけど、なんでcontrol押して起動したいのかを知りたい。

79 :名称未設定:2017/08/31(木) 09:37:21.27 ID:q7binzaZ0.net
controlキー押さなければダイアログ出ないってことを知らないんじゃないの?

80 :名称未設定:2017/08/31(木) 10:11:04.35 ID:TbHNu8N70.net
control+クリックとかemacs風キー操作とかしてて、裏でスケジュール起動されるとかじゃないの

81 :名称未設定:2017/08/31(木) 17:37:16.14 ID:uv9FJb930.net
キーボードが壊れていてControlが常に押された状態になっているのです

82 :名称未設定:2017/08/31(木) 17:49:27.84 ID:TbHNu8N70.net
なんだそのクソみたいな便乗

83 :名称未設定:2017/08/31(木) 17:56:00.69 ID:p9bPGsK+0.net
ビンジョー

84 :名称未設定:2017/08/31(木) 17:58:14.24 ID:8crVxHW10.net
システム環境設定のキーボードのところに
修飾キーっていうボタンがあるから
そこをクリックして
コントロールをアクション無しに設定すれば
コントロールキーを無効に出来るよ
壊れてるなら使えなくしても問題ないでしょ

85 :名称未設定:2017/08/31(木) 18:01:47.65 ID:8crVxHW10.net
よく考えたら>>81は本人じゃないのか

86 :名称未設定:2017/08/31(木) 23:50:33.84 ID:q7binzaZ0.net
俺が本人なんだが

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

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

88 :名称未設定:2017/09/23(土) 00:28:29.83 ID:qrnvJJOc0.net
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.56 ID:oE2fSdGf0.net
>>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.60 ID:m1CA2BF10.net
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.41 ID:qrnvJJOc0.net
>>89さん
>>90さん
ありがとうございました
as integer, contents of 共に上手くいきました
メイン処理をrepeatの外に置いたのはひとつでも該当したら
一切の処理を中止したかったからです
でもreturnで上手くいきました

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

92 :名称未設定:2017/09/23(土) 22:27:10.77 ID:oE2fSdGf0.net
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.02 ID:IBOjc3/u0.net
>>91
リピートから抜けるのは
exit repeat
の方が良いよ
returnだとハンドル内だとハンドル抜けちゃうから

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

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

97 :名称未設定:2017/11/27(月) 15:51:30.59 ID:UfjHgS1L0.net
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.00 ID:MxIY0UcX0.net
単なる文字列結合、
"ファイルパス/" & File_A & "_A.aif"
でいいんじゃないの。必要なら POSIX path of 付けて
POSIX path of ("ファイルパス/" & File_A & "_A.aif")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

111 :名称未設定:2018/01/14(日) 20:21:13.67 ID:XdTiug1c0.net
>>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.73 ID:8aMEURZz0.net
on idle

return 60
end idle

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

113 :名称未設定:2018/01/15(月) 22:01:42.13 ID:1GAnzEgZ0.net
>>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.38 ID:1GAnzEgZ0.net
試しにon idleで検索して3秒後に音が鳴る(たぶん)やってみたけど

on idle
beep
return 3
end idle

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

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

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

117 :名称未設定:2018/01/27(土) 14:19:06.01 ID:/A7SfRfh0.net
友達や知人が一人もいないので、電話がかかってきた経験がない。
通話の着信音も聞いたことがない(鳴らない電話)。
手元の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.56 ID:Z3ZqkQIR0.net
(´>ω<`) つらいのぅ〜

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

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

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

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

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

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

125 :名称未設定:2018/02/01(木) 13:18:03.93 ID:+AZgGj040.net
>>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.93 ID:+AZgGj040.net
>>125
>>116だった

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

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

129 :名称未設定:2018/02/04(日) 17:23:20.73 ID:iafplOJZ0.net
こんにちわ、ヒントもしくは検索語句を教えてください。
──────────前提
古い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.74 ID:iafplOJZ0.net
改行が多い。といわれたので。


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

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

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

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

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

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

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

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

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

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

138 :名称未設定:2018/04/01(日) 10:20:19.58 ID:gXYcv3aN0.net
今日SierraからHigh Sierraにしんだけど、スクリプトメニューから実行した時、
アプリケーション形式じゃないとdisplay notification動作しなくなってる

139 :名称未設定:2018/04/01(日) 10:35:44.10 ID:gXYcv3aN0.net
んー、2台あるうちの1台ではscptでも動作してる
ただどっちもsound nameは効いてない

140 :名称未設定:2018/04/01(日) 11:39:55.41 ID:gXYcv3aN0.net
10.13.4 Combo Update入れて再起動したらscptでも通知自体は出るようになった

141 :名称未設定:2018/04/10(火) 21:18:44.21 ID:CDZivbba0.net
applescript 初心者です
safari > 環境設定 > 一般 > ホームページ
のURLを設定したいのですがどうすればよいのかわかりません
every UI Elements で調べても環境設定...までしか見れなくて困ってます

142 :名称未設定:2018/04/10(火) 21:53:37.79 ID:EQJZ4INE0.net
一般を開いた状態での構造はこういう感じのようだけどSafari 11.1
tell application "System Events"
tell application process "Safari"
tell window "一般"
tell group 1
tell group 1
tell text field "ホームページ:"
value
end tell
end tell
end tell
end tell
end tell
end tell

143 :名称未設定:2018/04/10(火) 21:56:44.50 ID:EQJZ4INE0.net
Xcode入れてそこからAccessibility Inspector使った方が楽かもよ
そのためだけに5GBとかダウンロードするのもアレだけど

144 :141:2018/04/10(火) 22:17:15.31 ID:CDZivbba0.net
皆さんありがとうございます
色々試して調べてみます

145 :名称未設定:2018/04/18(水) 08:15:41.27 ID:8eLIIhnA0.net
HighSierra+Xcode9.3にしたところ、昔作った自作のAppleScriptObjcアプリがエラーするようになりデバッグしようとしています。
NSDictionaryの引数がどうのというエラーです。HighSierraでのバグらしく、スクリプト側の書き換えが必要だとか。

これのxcode プロジェクトを開いてAppleScriptのファイルを編集したのですが、
CleanしてBuild+runしても、症状が変わらずソースの編集が反映されない様に見えます。

久々でASOCの編集で諸々忘れているので、
どこをチェックすべきかコメント頂けますでしょうか。

146 :名称未設定:2018/04/18(水) 10:52:46.18 ID:AAas5iZN0.net
ここ https://macscripter.net/viewforum.php?id=63 漁った方が早いんちゃう?
これ https://macscripter.net/viewtopic.php?id=45941 とか https://macscripter.net/viewtopic.php?id=46010 とか

147 :名称未設定:2018/04/18(水) 20:35:57.17 ID:K9ubVgDS0.net
145です。直りました。
AppleScriptのコメント化の文法勘違いでした
単にコンパイル通ってなかっただけの様です( ´△`)

ブランクがあると厳しいな。

148 :名称未設定:2018/04/19(木) 00:29:35.09 ID:/8p2JHg70.net
Project Builder&Interface Builder AppleScript―Mac OS Xアプリケーション開発技法 Mac OS Xアプリケーション開発技法

そういやこの間古本屋じゃない書店で売ってて笑った
何年前のだよ

149 :名称未設定:2018/04/26(木) 04:31:37.60 ID:FIwH5oI80.net
最近用語説明見てなかったけどいつの間にかASCII characterとASCII numberがcharacter idとidに置き換わってる

150 :名称未設定:2018/04/26(木) 05:39:00.79 ID:UIlM09fA0.net
>>148
Amazonからコピペ?後ろの重複具合から
2002かなんかすごい昔

151 :名称未設定:2018/05/06(日) 20:37:36.24 ID:ozaP+Ecf0.net
アプリで保存したスクリプトを
スクリプトエディタの開くダイアログで開いて修正しても
動作が修正されていないので
パッケージを開くから中のスクリプトを開くと
修正前のスクリプトのままでした
開くダイアログやドラッグドロップした時に
エディタは何を修正しているんですか?

152 :名称未設定:2018/05/06(日) 20:58:50.83 ID:mfbWGI0z0.net
コンパイルエラーにでもなってたんじゃないの

153 :名称未設定:2018/05/06(日) 21:27:19.64 ID:ozaP+Ecf0.net
ありがとうございます
自分のmacが不調なんですね
よく見たらmain.scptの他にmain.rtfという
ファイルが出来てました

154 :名称未設定:2018/05/06(日) 21:33:58.10 ID:oQzqsfAw0.net
それはリッチテキストやで

155 :名称未設定:2018/05/06(日) 22:15:04.68 ID:eFrAD1aL0.net
試すのめんどいんで applescript main.scpt main.rtf でググったw
ちょっと古いけど https://jp.tidbits.com/TidBITS-jp-1137.html#lnk4

156 :名称未設定:2018/05/06(日) 22:49:51.14 ID:ozaP+Ecf0.net
>>155
ありがとうございます
main.rtfは削除しておきました
参考になりました
何処かの段階でシンタックスエラーとか
何かやってしまったんですね

157 :名称未設定:2018/05/07(月) 06:50:35.80 ID:SSE/IZDj0.net
実行後に終了しない.appだと、
アプリ動作中にmain.scptを修正しても、
アプリ終了→アプリ再起動、ってやると
修正前のスクリプトに戻っちゃったような…

158 :名称未設定:2018/05/08(火) 03:57:17.42 ID:eQvzgAXd0.net
戻っちゃわないような...

159 :名称未設定:2018/05/08(火) 09:12:08.14 ID:4fXEfzZn0.net
どっちやねん!!!

160 :名称未設定:2018/05/08(火) 11:02:36.52 ID:yoJVCH6G0.net
すいません。昔、AppleScriptのソースの中身をSpotlightで検索するためのプラグインがあったように思うのですが、まだどこかに落ちていないでしょうか?

161 :名称未設定:2018/05/08(火) 12:24:23.20 ID:+P6mKPZa0.net
ググったら 「ちまちまとMacをいじるブログ | SpotlightでAppleScriptファイルの内容を ...」 があって、そこの google-toolbox-for-mac のリンク先 https://github.com/google/google-toolbox-for-mac
バージョン 1.6.0 に含まれてるようだった
バージョン 2.0.0 で構成変わったようでぱっと見にないんでわからない

最初の「ちまちまと〜」のページはググってくれ
fc2のblogだからか、リンク貼ったらNGワードで書けない

162 :名称未設定:2018/05/08(火) 21:45:22.72 ID:By+Xekyi0.net
Wed Sep 09 2015 00:53:47 GMT+0900
に、
Kill off the Spotlight and Xcode plugins as they haven't been maintained.
で、消されたよう。そこの一つ前まで遡ればか、現在はビルドは提供されていないので、1.6の入っているのを使うだね

163 :名称未設定:2018/05/08(火) 21:52:54.51 ID:By+Xekyi0.net
2008/08/21 に追加されてそれから何も変更されずっていう、マジほっぽらかし(まあ、変える必要がない完成度/機能性の少なさなんだろけど)なので、
1.6のでも全く同じではあるな(ビルドしたXcodeが古いってだけで。それもあんま関係ないだろう)

164 :名称未設定:2018/06/23(土) 20:41:34.77 ID:4D4GIS+V0.net
Finderでフォルダの表示を切り替える行為を記録したのですが実行するとエラーが出てしまいます。
記録で書かれた内容なので違うとも思えないのですが、どのように書き直せば狙い通りに動くでしょうか?

MacOSX 10.8.5
やりたいこと:Finderでリスト表示フォルダのソート順を違う物から作成日の新しい順に切り替える
(多数のフォルダを一括でリネームしたらソート順がデフォになってしまったのをrepeatで一気に直すつもりです)

記録された内容:
tell application "Finder"
activate
set sort column of list view options of Finder window 1 to creation date column
set sort direction of column id creation date column of list view options of Finder window 1 to normal
end tell

set sort column of list viewの行で
error "Finder でエラーが起きました:ソート列にするには、その列が可視状態である必要があります。" number -10000
と言われてしまいます。
作成日は可視状態です。

よろしくお願いします。

165 :名称未設定:2018/06/23(土) 21:53:57.52 ID:dl6jfKi60.net
記述が足りない。10.8はさすがにだが同じだろう

set sort column of list view options of Finder window 1 to column creation date column of list view options of Finder window 1

(sort column に設定してもダイレクトには変わらないので、一度ウィンドウを閉じて開いてが常套手段なのかな)

166 :164:2018/06/24(日) 17:22:04.27 ID:ncIqQlQ00.net
>>165
回答ありがとうございます。
試したところ、同じエラーが出て上手く行きませんでした・・・。

ちょっと感情的になり、そんなに言うなら(意味がないけど)入れてやるわ!って以下を先に入れたら上手く動きました。

set visible of column id creation date column of list view options of Finder window 1 to true

ASは現状をチェックしない、という事ならソレはソレで何で最初ので動かないのか腑に落ちませんが
何とか動いたので良かったです。
お手を煩わせてすみませんでした。

167 :名称未設定:2018/06/24(日) 19:03:16.31 ID:Vmg1bVKi0.net
GJ!

168 :名称未設定:2018/07/05(木) 17:27:56.62 ID:HQ3dQZRQ0.net
set the clipboard to "A" & return & "B"

returnは未だにCRなのか

169 :名称未設定:2018/07/05(木) 17:52:41.89 ID:PoXKaBtJ0.net
そらそうだろ

170 :名称未設定:2018/07/05(木) 21:59:10.93 ID:0Y7iJzAh0.net
まあ、今時改行がCRでないと困るというのは皆無だからLFにしちゃっていいとは思うけど
もよほど特殊(?)でもないとCRでもLFでもどっちでもいいようにして(必要なら適時変換して)成り立ってしまってるので変える必要もないってとこか

171 :名称未設定:2018/07/12(木) 00:46:26.76 ID:MYN0DAfb0.net
最近MavericksからSierraにアップデートしたのですが、loadしたスクリプトへのtellがうまく動かないことがあります。
何か仕様が変わっていますか?

172 :名称未設定:2018/07/12(木) 03:17:52.67 ID:B39vhWEN0.net
とりあえず変更点はこれで調べれ
https://developer.apple.com/library/archive/releasenotes/AppleScript/RN-AppleScript/Introduction/Introduction.html

173 :名称未設定:2018/07/12(木) 09:01:45.92 ID:+OderRzd0.net
JXAからアドビのjs呼び出す事ってできないんでしょうか?
色々試したけどわかりませんでした。もしできるなら引数の渡し方も併せて教えてください。

174 :名称未設定:2018/07/14(土) 09:51:12.53 ID:xTJCq1RB0.net
POSIX file aPath と aPath as POSIX fileで挙動が違うのですが、こういうものですか?

175 :名称未設定:2018/07/24(火) 21:30:22.03 ID:hEIqPkjW0.net
>>173
どのアドビのjsのことを言っているのか。とりあえずPhotoshop CS6なんぞだとして
Javascriptを動かしているエンジン(及びその環境/仕組み)が違うから直接は無理だろう。Photoshop CS6はAppleScriptに対応していて当然のようにJXAでソレを使え、その中にdo javascriptなんぞがあるようなのでそれでだろう
具体的に動く方法とかは、
http://blog.kanemu.net/2008/02/applescriptadobejavascript.html
なんぞとか、PhotoshopのAppleScriptでdo javascriptをググってJXAに書き換えればわかるだろう

>>174
違ったような気もする、違ったことがあるような気もする。が、なんだったかなあ。
POSIX file "/Users/hoge/Desktop/hoge.jsx"
/Users/hoge/Desktop/hoge.jsx" as POSIX file
いちおう、得られる結果は同じだな。
class of POSIX file "/Users/hoge/Desktop/hoge.jsx"
class of (/Users/hoge/Desktop/hoge.jsx" as POSIX file)
としても得られる結果は同じようだが、POSIX file ~ の方はMacintoshパスに書き換えられるから挙動は違うな。まあ、そんなもんということで

176 :173:2018/07/25(水) 09:46:58.52 ID:AQuCr0Br0.net
>>175
基本イラレ、インデザインですが、今まで作成したjsxファイルを使ってshellやアプリ間の連携をさせたいので。
今まではASでやっていたのですが、JXAで書けるなら色々とラクなので。
以下のスクリプトを試しましたが、下2つは動作しません。
INDD = Application("Adobe InDesign CC 2018");
INDD.includeStandardAdditions = true;
INDD.displayAlert('alert("Hello from the other side")');
INDD.doJavaScript('alert("Hello from the other side")');
INDD.doScript('/Users/hoge/Desktop/hello.jsx');

177 :名称未設定:2018/07/25(水) 10:21:49.37 ID:CBkLGNxW0.net
そもそも用語説明ではどう説明されてんのかと

178 :名称未設定:2018/07/25(水) 18:47:48.83 ID:G7md3iPc0.net
>>176
なんだ、AppleScriptをJXAに書き換えられないってだけか
Adobeの公開しているAppleScriptドキュメントではInDesignはdo scriptのようだけど、公開しているドキュメントが古くて新しいのはdo javascriptもサポートしてんのか??
と、しょーーーーがないから試用版入れてみたら... InDesignにdo javascriptなんてないやんっ!

そもそもAppleScriptでできてたやっていたのかとすら疑わしいとすら思うぞ、>>177の言うとおり用語説明にちゃんと書いてあるやんだし
用語説明がわからない(わからいづらいのはわかる)、AppleScriptをJXAに書き換えるのがわからない(わかりづらいのはわかる)けどな

179 :名称未設定:2018/07/25(水) 19:03:15.38 ID:WKdQ5Y7+0.net
何がしょうがないのかよくわからない

180 :名称未設定:2018/07/25(水) 19:14:57.66 ID:G7md3iPc0.net
最後力尽きてた。ってのならわかるけどな

>>176
ググっての do script には、後ろに language javascript ってあって値がないオプション?かと思ったら、javascript が/の部分が値やん
INDD.doScript( theScript, { language: "javascript" } );
で、動くだろう、動いた。theScript は javascript文字列でもファイルパス文字列でも
とりあえず language javascript ということにしとけw

181 :名称未設定:2018/07/25(水) 19:16:28.21 ID:G7md3iPc0.net
ということ=必須ということ

>>179
しょうがない??

182 :名称未設定:2018/07/25(水) 19:19:47.42 ID:3O+dxvTs0.net
日本語でおk

183 :名称未設定:2018/07/25(水) 19:25:41.74 ID:G7md3iPc0.net
小説ぐらい読もうな。そしたら読めるようになると思うぞwたぶん
ラノベじゃなくてな

184 :名称未設定:2018/07/25(水) 19:36:40.52 ID:3O+dxvTs0.net
アスペの文章は理解出来ない

185 :名称未設定:2018/07/25(水) 19:41:03.31 ID:G7md3iPc0.net
スレ内容に関係ないことだけに沸くねえ。関係ないというか無内容のレスをって、いろいろ可哀想な人ってのだけはわかるけどさ

186 :173:2018/07/26(木) 10:39:52.37 ID:caNfuuYP0.net
>>178
わざわざ試用版まで入れてありがとうございます。
用語説明の見方(使い方)は全然わかっていません。ネットでサンプルを探して目的にあった書き方を探してる感じです。
INDD.doScript( theScript, { language: "javascript" } );で動きました。
しかし、今度は引数の渡し方がわかりません。
下の様な書き方では駄目でした。parametersをargumentsにしても同じでした。
INDD.doScript(Path('/Users/hage/Desktop/hello.jsx'), { language: "javascript",parameters:[1,2]});

187 :名称未設定:2018/07/26(木) 11:44:52.58 ID:fO/SjuSt0.net
なんかさあ、当てずっぽうに書いて動かないだ駄目だ繰り返してるだけじゃん
もっと事実を調べなさいよ

188 :名称未設定:2018/07/26(木) 16:03:48.28 ID:skM+7rGt0.net
>>186
>用語説明の見方(使い方)は全然わかっていません
まあ、わからないでもない
>ネットでサンプルを探して目的にあった書き方を探してる
まあ、間違ってはいない。

が、
>今度は引数の渡し方がわかりません...parameters:
なんでそうなる。どうして、用語説明の見方(使い方)は全然わかってないからネットでサンプルを探して目的にあった書き方を探して、から、用語説明の見方をわかる努力にならないのか
だから、>>187と言われるんだよ。俺も全く同じに思う
用語説明にパラメータも載ってるでしょ。parameters:なんてないでしょ。InDesignの用語説明のはJavascript表記が出ないようだけど、AppleScriptからJavascript表記にはほぼ機械的にだよ。さあ、用語説明を見てみよう&これから用語説明をまずはみよう

189 :173:2018/07/26(木) 17:18:35.05 ID:caNfuuYP0.net
用語説明を見てwithArgumentsとしてみましたが、やっぱり駄目です。
書き方も合っているかわからないので2通り試してみましたが駄目でした。
NDD.doScript(Path('/Users/hage/Desktop/hello.jsx'), {language: "javascript",withArguments:[1,2]});
INDD.doScript(Path('/Users/hage/Desktop/hello.jsx'), {language: "javascript"},{withArguments:[1,2]});

190 :名称未設定:2018/07/26(木) 17:45:37.71 ID:skM+7rGt0.net
/Users/hage/Desktop/hello.jsx
の受け側がちゃんとしてんの?InDesign消したからめんどくさいなめんどくさいなめんどくさいなあw まあ、見てみるよ

191 :名称未設定:2018/07/26(木) 18:23:40.12 ID:skM+7rGt0.net
一番目のでええやん...それじゃAppleScriptで同じように書いても駄目って話だろう

もー、>>187のまんまやんっ
site:www.adobe.com InDesign AppleScript
で、ググって、ドキュメントを読めっ!(日本語訳ドキュメントがあるし、目的のとこがとてもみつけやすいだろに)
ドキュメント読んでもとかドキュメントどこにとかならわかるが、そこを省いてってありえないぞ
(まだ付き合ってもいいけど、ちゃんと終わりなら終わりって言ってね。InDesign消すから。無応答だと1日後に消す)

192 :名称未設定:2018/07/27(金) 00:14:05.40 ID:wnC7e1nR0.net
ハイシエラでプレビューのHEIF変換機能を利用してシステムフォトライブラリのJPGとPNGをHEIF化出来ますか?

193 :名称未設定:2018/07/27(金) 01:15:30.85 ID:03yX7pFC0.net
プレビューってAppleScriptに対応してないだろ
Automatorのアクションに何か用意してあるかもしれないけど

194 :名称未設定:2018/07/27(金) 08:08:35.51 ID:y2NdpSAD0.net
http://www.macotakara.jp/blog/mac_os_x/entry-34719.html
らしい。sipsコマンドも変換はまだらしい。クリックとかSystem Eventで地道にPreviewを操作すればできないことはないかなあ

https://eclecticlight.co/2017/10/20/converttoheif-a-contributed-script-and-automator-workflow-to-convert-jpeg-images-to-heif/comment-page-1/
こんなのあった。まるっきりただのシェルスクリプトだけだが
変換なんぞffmpegを使ってる。必要なコマンド(バイナリのffmpegとwriterapp/シェルスクリプトのconvertToHEIF)はWorkflow(パッケージ)に同梱されているのでまんまWorkflowとして動くのだろう

195 :173:2018/07/27(金) 09:04:33.81 ID:GlNa7yiZ0.net
>>191
すみません。パスがダミーのままでした。(;^_^A
できました。何度もありがとうございました。助かりました。
おかげでjxaも少し理解しました。asをjsに置き換えて使ってる感じなんですね。

196 :名称未設定:2018/08/06(月) 01:13:49.55 ID:/TKVSQZZ0.net
小人よりこっちなので

-- AppleScript
set theResult to {}
set savedDemimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to "/"
repeat with theURL in input
set theItems to every text item of theURL
set theResult to theResult & ((items 4 thru -1 of theItems) as string)
end repeat
set AppleScript's text item delimiters to savedDemimiters
return theResult

197 :名称未設定:2018/08/06(月) 01:14:31.49 ID:/TKVSQZZ0.net
-- AppleScriptObjC
use framework "Foundation"
set theResult to {}
set regex to current application's NSRegularExpression's regularExpressionWithPattern:"^[^/]*//[^/]*/" options:0 |error|:(missing value)
repeat with theURL in input
set theResult to theResult & {(regex's stringByReplacingMatchesInString:theURL options:0 range:{location:0, |length|:(length of theURL)} withTemplate:"") as text}
end repeat
return theResult

198 :名称未設定:2018/08/06(月) 01:15:15.41 ID:/TKVSQZZ0.net
// JXA ObjC
theResult = [];
regex = $.NSRegularExpression.regularExpressionWithPatternOptionsError('^[^/]*//[^/]*/', 0, $());
input.forEach(function ( theURL ) {
theResult.push(regex.stringByReplacingMatchesInStringOptionsRangeWithTemplate(theURL, 0, $.NSMakeRange(0, theURL.length), '').js);
});
return theResult;

199 :名称未設定:2018/08/06(月) 01:15:40.96 ID:/TKVSQZZ0.net
// JXA っ(ていうかただのJavaScript)
theResult = [];
input.forEach(function ( theURL ) {
theResult.push(theURL.replace(/^[^/]*¥/¥/[^/]*¥//, ''));
});
return theResult

200 :名称未設定:2018/08/06(月) 17:22:44.19 ID:D9/5MFlz0.net
本人不在でやっても仕方ないと思うが

201 :名称未設定:2018/08/06(月) 18:35:19.86 ID:/TKVSQZZ0.net
元に本人はいないからw 単に「発表」的なです

202 :名称未設定:2018/08/09(木) 14:46:28.17 ID:KT1Ue3i80.net
BathyScaphe向け、画像をimgurに上げるスクリプト
macOS Sierra 10.12.6で作成したもの

・~/Library/Application Support/BathyScaphe/Scripts/ に置く
・実行するとファイルを開くダイアログが出るので、画像を一つ選ぶ
・書き込みウインドウが前面に出ていれば、画像のリンクをテキストの最後に付ける
 なければダイアログにリンクを表示する
・上げた画像を削除するようなら、ターミナルでたとえば
log show --info --style syslog --predicate 'eventMessage contains "X DELETE"' --last 1d
して表示されるcurl以降、行末の ' までをそのまま実行する

== スクリプトここから
-- ref. https://apidocs.imgur.com
property apiUrl : "https://api.imgur.com/3/image"
property authHead : " -H 'Authorization: Client-ID cc2c5a0c5e345d1'"

use framework "Foundation"
use scripting additions

set imgUrl to ""
set imgFile to choose file of type {"public.image"} default location (path to desktop) without multiple selections allowed
set {imgData, |error|} to current application's NSData's dataWithContentsOfFile:imgFile options:0 |error|:(reference)
if imgData is missing value then
displayError(|error|'s localizedDescription as string)
end if
set base64Data to (imgData's base64EncodedStringWithOptions:0) as string
try
set respJson to do shell script "curl " & apiUrl & authHead & " -F image=" & quoted form of base64Data
set respRec to run script "JSON.parse(" & quoted form of respJson & ");" in "JavaScript"
on error |error|
displayError(|error|)
end try

203 :202のつづき:2018/08/09(木) 14:46:58.04 ID:KT1Ue3i80.net
if success of respRec then
set imgUrl to link of |data| of respRec
set imgDelUrl to apiUrl & "/" & deleteHash of |data| of respRec
current application's NSLog("image uploaded to " & imgUrl & "; to delete, do curl -X DELETE " & imgDelUrl & authHead)
else
displayError(|error| of |data| of respRec)
end if

tell application "BathyScaphe"
if (count of documents) is not 0 and class of front document is reply document then
set text of front document to text of front document & imgUrl
return
end if
end tell
display dialog imgUrl buttons {"Cancel", "Copy to Clipboard"} default button 2 cancel button 1
set the clipboard to imgUrl

on displayError(|error|)
display dialog |error| buttons {"OK"} default button 1 cancel button 1
end displayError
== スクリプトここまで

204 :名称未設定:2018/08/09(木) 15:06:34.83 ID:vFbNol+B0.net
テスト
https://i.imgur.com/yteLrOI.jpg

205 :名称未設定:2018/08/09(木) 15:07:15.92 ID:vFbNol+B0.net
おーすげえ!こんなの書ける人尊敬する!

206 :名称未設定:2018/08/09(木) 18:01:53.48 ID:mufzrc0b0.net
すげえ!


おっぱい

207 :名称未設定:2018/08/09(木) 20:18:39.12 ID:413UzQ5n0.net
もういいやらしいけどw、

-[NSAppleEventDescriptor getFileSystemRepresentation:maxLength:]: unrecognized selector sent to instance 0x610000426ba0

なんのこっちゃだが、NSData's dataWithContentsOfFile: でかな?ググったところでは
古いのだとimgFile を適正に POSIX Path な NSString に変換してない/できないとかかなあ
set {imgData, |error|} to current application's NSData's dataWithContentsOfFile:(POSIX path of imgFile) options:0 |error|:(reference)
でとか

208 :202:2018/08/10(金) 10:02:41.65 ID:2JR4DTyh0.net
修正ありがとう
10.10を復元して、現象とその修正後の動作OKを確認しましたわ

209 :名称未設定:2018/08/10(金) 10:44:18.33 ID:oKd0Un460.net
>>207,208
え?>>202,203でちゃんとおっぱいアップ出来たけど、なんか違ってるの?

210 :名称未設定:2018/08/10(金) 10:55:36.98 ID:soT9aK2E0.net
10.10だとエラーになってたから

211 :202, 208:2018/08/10(金) 10:57:21.03 ID:2JR4DTyh0.net
あー、IDが変わってしまったw

212 :名称未設定:2018/08/10(金) 11:36:28.24 ID:oKd0Un460.net
>>210
そっか、10.10ってOSのことなのね

213 :名称未設定:2018/08/10(金) 12:51:57.43 ID:SWETQyVl0.net
>>208
10.10を復元っ!作り、確認。お疲れ様です。いいねっ!

214 :名称未設定:2018/08/10(金) 18:04:22.41 ID:SWETQyVl0.net
500kくらいのでエラるので、なんでかなーと思ったら引数が大きすぎると
じゃ、標準入力で受け取るように&だったらbase64化はコマンドでかなと思ったら、curlはbase64化もしてくれるだった

set {imgData, |error|} 〜
から
set respJson to do shell script "curl "

set respJson to do shell script "curl " & apiUrl & authHead & " -F image=@" & quoted form of (POSIX path of imgFile)
もしくは
set respJson to do shell script "cat " & quoted form of (POSIX path of imgFile) & " | curl " & apiUrl & authHead & " -F image=@-"

でいいみたい

215 :名称未設定:2018/08/10(金) 21:44:52.39 ID:t4AHFPON0.net
もう、こんなのはAppleScriptじゃないよ。

216 :名称未設定:2018/08/10(金) 23:23:47.26 ID:UadeuJbL0.net
AppleScriptObjC
名前にAppleScript付いてるけど全然AppleScriptじゃないし

217 :名称未設定:2018/08/11(土) 11:50:13.71 ID:Q2Fo4sRd0.net
俺の知らないことだからってだけでよう文句言えるw AppleScriptだよ、どう見たって
Base64を作らなくてもいいならその嫌ってるObjCのとこなんて無いじゃん。唯一NSLogが残るくらいか。「AppleScriptじゃない」と言えるほど純粋AppleScriptをすらわかってなさげ

218 :名称未設定:2018/08/11(土) 13:27:25.65 ID:2/YlJDew0.net
いい年して顔真っ赤にしながらレスなんて恥ずかしいよ

219 :名称未設定:2018/08/11(土) 17:14:05.05 ID:iBkCFSt30.net
>>217
「パッと見だとまるで普通の英語の文章のように思える」のがAppleScriptが所謂超高級言語と呼ばれる所以だろ
このコードにはその側面が感じられない。プログラムのソースコードに見える

ってことだと思うんです。おれ>>215じゃないけどw
ちなみに超高級言語には他にMax/MSPなんかがある

220 :名称未設定:2018/08/11(土) 17:34:21.50 ID:Q2Fo4sRd0.net
>>219
何を言いたいのかわからないなあ。それじゃ、do shell scriptでシェルスクリプトも書いちゃダメなの?do javascript でJavaScript書いちゃダメなの?同じだよ。純粋AppleScriptでできないからソレを使うだけけど、AppleScriptはAppleScript、メインは
超高級言語wだから、current application's とかくっそめんどくさかったりするから、やっぱそこもAppleScriptだろう

221 :名称未設定:2018/08/11(土) 17:53:11.47 ID:Q2Fo4sRd0.net
そんな唐突にAppleScriptじゃないとか、AppleScriptは超高級言語でそういう記法じゃない(?)とか言える感覚が全くわからんので、具体的に

例えば、
set {imgData, |error|} to current application's NSData's dataWithContentsOfFile:imgFile options:0 |error|:(reference)

set imgData to current application's NSData's dataWithContentsOfFile_options_error( imgFile, 0, |error| )
もしくは
set imgData to dataWithContentsOfFile_options_error( imgFile, 0, |error| ) of NSData of current application
だったらいいの?全然変わらんと思うけど超高級言語云々では。てかObjective-C記法の方がその超高級言語に近いんじゃないかとさえ思えるけど

222 :名称未設定:2018/08/11(土) 17:53:11.99 ID:iBkCFSt30.net
>>220
多分もっと説明しても君には分からないと思う
美意識の問題だから

223 :名称未設定:2018/08/11(土) 17:54:56.45 ID:Q2Fo4sRd0.net
>>222
いや、その美意識で同じことを書いてみてよ。美意識...よくまあなんていうか...正直キモいのでわからなくていいです

224 :名称未設定:2018/08/11(土) 19:46:41.17 ID:n+eFXxpk0.net
別人だけど、ジジイもとい初期のASからいじってたせいか、何となくどちらの言っていることも分かる気がする。
自然言語記述は、最初の頃は頑張ってたけど、途中で挫折した感じだったなあって笑

225 :名称未設定:2018/08/11(土) 19:56:04.30 ID:IuAs9oMp0.net
AppleScript好きだからあえて言うけど言語の試用が時代にあってないよね
扱える桁数とかさ

226 :名称未設定:2018/08/11(土) 19:56:50.13 ID:IuAs9oMp0.net
仕様ね
Appleに改善しようという気が全くない

227 :名称未設定:2018/08/11(土) 20:25:17.52 ID:Q2Fo4sRd0.net
オリジナルは「使える」ので自分用ライブラリにしてた。できる限り元のまま(敬意を込めて)でとしたが、まあ全く原型は無くなってしまったw
https://paste2.org/ZCaVK6vt

File Type UTI を比較するのがない(探せない)ので
do shell script でエラー文字列が得られない(探せない)ので
curlで得られるのがそれなら、じゃ、これでparseでええやん
ってことで、全文AppleScriptObjCにしたぞw

よくわからん美意識とかどうでもいいー、それも具体性ゼロなんてクソだっw
AppleScriptからCocoa呼べるなんて最高じゃん、なんでもできそうで。まあ、AppleScriptの記法はめんどくさいからJXAの方がと傾いているが、それでもAppleScriptも好き

228 :名称未設定:2018/08/11(土) 20:31:32.83 ID:Nx8nl+xo0.net
綺麗に書けるならそれに越したことはないけど純ASだけでなんでもできるわけじゃないんだからしゃーない
「ASObjCだと読みやすいAS的記法からだいぶ変わっちゃうね」ってだけの話でしょ
文句つけてるor噛みついてるような発言に取れなくもないけどそんなイライラしなさんな

AppleはもうASに力入れてないでしょ
むしろいつ廃止しようか様子見してるぐらいじゃない?

個人的にはSwiftコード実行できるにして欲しいけど
do shell script "printf 'print(¥"Hello¥")' | swift"
で呼べなくもないけど立ち上がりが遅いし出力に余計なのが含まれるし使えるとは言い難い

229 :名称未設定:2018/08/11(土) 20:37:48.56 ID:Q2Fo4sRd0.net
>>228
イライラは別にしてないけど。何言ってんの?ってことでしかない
「読みやすい」って何?>>221で話を具体手に膨らませてほしいな。おれおれ純粋AppleScriptのサブルーチンともそんなに変わらないし

>むしろいつ廃止しようか様子見してるぐらいじゃない
何年も前にも言われているねえ。まあJXAの方になるかもだが。なんで急にSwift?

230 :名称未設定:2018/08/11(土) 20:52:39.39 ID:Nx8nl+xo0.net
JXAすら「全然使われてねえ作るんじゃなかった」って思ってそうな気もするが

set imgData to contents of imgFile
set base64Data to base64 of imgData

こんなふうに、他の言語のメソッド呼び出してる感なく書ければいいなってことじゃないのかね

231 :名称未設定:2018/08/11(土) 21:00:51.55 ID:Q2Fo4sRd0.net
ググったら、AppleScriptの頃より使われている気がするけどね。さすがJavaScriptの方を元々使ってた人が多いのかと思ってたけど

それは「言語」としてサポートしていたらのでしょ。てか、そうだとしたら、サブルーチンどうしてんだろ?AppleScriptらしくないと嫌な思いしながら書いて使ってるのかなあ??

OSAXでもやればできるんじゃないのかなあ。OSAXはよく知らんが。ナイナイものねだりというか、文句言うくらいだったらOSAX作れよって感じかな。んなの作らなくても使えるだけで最高だけどな、俺は
なんか勝手な思いで勝手に文句だけ言っているだけにしか見えないなあ

232 :名称未設定:2018/08/11(土) 21:37:13.19 ID:oXbzerTj0.net
日本語AppleScriptの時代を知っているが、あれから比べたら全く別の言語みたいなもの。
別の言語を習得するのはもうきつい年代になった。

233 :名称未設定:2018/08/11(土) 21:56:31.04 ID:DWdhQaCx0.net
>>231
横から突然すみません
お詳しそうなので、宜しければ別スレで解決できなかった質問にご回答いただきたいのですが、
iMacに外部ディスプレイを繋げていて、そのディスプレイでWEBブラウザ経由で映画を観る際に
iMac本体側のディスプレイをOFFにしたいのですがどうやれば良いでしょうか?
真っ黒な画面だと明るさがあるので駄目なんです
AppleScriptは全くの初心者ですが‥‥

iMac Late 2015, Sierraです
外部ディスプレイはminiDPで繋いでます

234 :名称未設定:2018/08/11(土) 22:00:59.85 ID:IuAs9oMp0.net
■注意
安直なスクリプト作成依頼、丸投げ、「こういうの作ってください!」はお断り。
わからない点、エラーが解決できない点についてはスクリプト片を添えて質問すること。

235 :名称未設定:2018/08/11(土) 22:01:06.60 ID:Q2Fo4sRd0.net
なんか変なの来た...w

236 :名称未設定:2018/08/11(土) 22:02:19.20 ID:IuAs9oMp0.net
草生やして楽しそうだね

237 :名称未設定:2018/08/11(土) 22:02:43.71 ID:Q2Fo4sRd0.net
楽しいていうか困惑

238 :名称未設定:2018/08/11(土) 22:04:03.61 ID:IuAs9oMp0.net
なら生やすの止めた方がいいね

239 :名称未設定:2018/08/11(土) 22:05:15.03 ID:Q2Fo4sRd0.net
そんなに気にすんなw

240 :名称未設定:2018/08/11(土) 22:07:16.37 ID:IuAs9oMp0.net
意味なく草生やすな
ウザいので

241 :名称未設定:2018/08/11(土) 22:08:08.54 ID:Q2Fo4sRd0.net
気にしすぎw

242 :名称未設定:2018/08/11(土) 22:09:50.93 ID:Q2Fo4sRd0.net
そんなんじゃすぐに煽られるような5chでどうすんねんって思うけどな
それとそんな細かいことうだうだとお前はお母さんかっていうw

243 :名称未設定:2018/08/11(土) 22:10:08.81 ID:IuAs9oMp0.net
ID: :Q2Fo4sRd0

これで説得力ないことがよくわかったね
関わるのもウザいのと同じことだからでこれで最後

244 :名称未設定:2018/08/11(土) 22:10:56.04 ID:Q2Fo4sRd0.net
自分の文句には説得力があったらしいw

245 :名称未設定:2018/08/12(日) 08:54:08.42 ID:hC36oMXg0.net
AppleScriptに期待し過ぎじゃないの知らないからかもしれないけど
https://egg.5ch.net/test/read.cgi/mac/1485917995/724-

246 :233:2018/08/12(日) 11:38:29.52 ID:2zZ9jlN20.net
>>245
ああ、それが自分です
元々JavaScriptは組めるんですがAppleScriptはスリープさせるボタンを作ったくらいで、ほぼわかりません
でもやっぱ期待しちゃいますね、色々出来るので

247 :名称未設定:2018/08/12(日) 17:35:05.02 ID:NuNpmwk20.net
教える側がアスペだと教わる側も大変だ

248 :名称未設定:2018/08/13(月) 10:16:03.52 ID:UTOw6PAr0.net
お前が教えてやれよw

249 :名称未設定:2018/08/13(月) 11:19:21.24 ID:XeQ2t/PX0.net
>>207
俺のために修正ありがとう
念の為コピペしといて正解だったようだw

250 :名称未設定:2018/08/13(月) 14:56:07.52 ID:kBD5kebK0.net
ks

251 :名称未設定:2018/08/15(水) 12:05:21.71 ID:10A72j8V0.net
Finder上のフォルダに対してdo shell script でxxx.pyを実行するスクリプトを作ってFinderのツールバーに登録して実行してみると、
最前面がFinderからPythonのスクリプトに一旦切り替ってそのあとFinderに戻りました。
機能しているので問題ないのですが、Finderが最前面のままで処理できるような書き方ってあったりしますか?
よろしくお願いします。

252 :名称未設定:2018/08/15(水) 13:45:52.02 ID:+4Zl7rCP0.net
アプリ形式にしてるなら、Info.plistに
<key>LSUIElement</key>
<true/>
加えればいけたぽいけど

253 :名称未設定:2018/08/15(水) 20:14:41.07 ID:10A72j8V0.net
>>252
出来ました! ありがとうございます

254 :名称未設定:2018/10/02(火) 04:21:25.77 ID:+tE6D5jE0.net
俺ブックマークMojave注意事項
https://latenightsw.com/mojave-brings-in-big-security-changes/

255 :名称未設定:2018/10/16(火) 10:38:59.02 ID:3t2jis0j0.net
意外と若かった

https://twitter.com/cdespinosa/status/1047880387349770241
On this day 25 years ago, Apple introduced AppleScript, a system and application automation system and language.
It’s still shipping in Mojave and is one of the oldest code bases in continual use in macOS. Happy birthday, AppleScript!
(deleted an unsolicited ad)

256 :名称未設定:2018/10/20(土) 16:08:12.73 ID:0cFAYEEo0.net
ここまで長かったなあ。
日本語AppleScriptから今のCocoaベースのスクリプトは想像もつかなかった。

257 :名称未設定:2018/10/21(日) 21:45:44.85 ID:TPOtjsO20.net
> 在日の親は、子供を朝鮮幼稚園・朝鮮学校に入れたいっていうのが多いのよ。
> 日本人からすると、なんでだろうって思うけど、日本人の学校では、民族の誇りを持った教育がしてもらえないんだそうだ。
> よく分からないけど、済州島の流刑者の白丁が大阪に密入国して住み着いたじゃ誇りが持てないけど、
> 日本人に強制連行された被害者なら誇りが持てる、とかそういう事かな??
>
> 市原市の能満は昔から市街化調整区域で、新規の建物は造れないことになっている。
> そのため土地が安く、日本の法律を無視した在日が、次々と移り住んできた。
> そこで問題になったのが、朝鮮学校だ。なかなか許可が下りず、一番近くても千葉市にしかない。
> そこで在日居住区の能満内にあった、能満幼稚園・市原小・市原中・緑高の保育士や教師を、朝鮮化する事を考えた。
> 今では在日幼稚園の保育士は全て朝鮮帰化人で、在日の父兄からの絶大な支持を受けている。
> 遠くからでも、わざわざ在日幼稚園に入園させたいという在日の親は、後を絶たない。
> この在日幼稚園卒園者はほぼ朝鮮系の帰化人と在日だ。

258 :名称未設定:2018/10/31(水) 01:08:37.57 ID:5LHTA+eS0.net
テキストをコピって、その文中に出てくる二つの数字(数字A・数字B)を使って
計算させるApplescriptを作りました。
あちこちのサイト見て作った簡単なものでして、
当初は数字の出てくる位置と桁が決まっていたので
クリップボード内00文字目〜00文字目(数字A)と00文字目〜00文字目(数字B)を指定してました。
set 数字A to characters 5 thru 7 of NmLpLcSPpLc as text
set 数字B to characters 8 thru 10 of NmLpLcSPpLc as text

しかしこれではすぐに使い辛くなりました。
そこでこれを何桁でもどの位置に出てきても使えるように
「先に出てくる数字」「後に出てくる数字」みたいに
位置と桁を固定せず指定する方法を教えてください。

259 :名称未設定:2018/10/31(水) 02:04:58.42 ID:2A490WkA0.net
NmLpLcSPpLc
なんだこの呪文みたいな変数名は

260 :名称未設定:2018/10/31(水) 02:08:22.68 ID:w0lLlxVj0.net
>>258
ざっくりと
on pickupNumbers from sourceString
set numbersString to do shell script "echo " & quoted form of sourceString & " | sed -e 's/[^0-9][^0-9]*/ /g;s/^ *//;s/ *$//'"
set savedDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to {" ", return}
set numberItems to text items of numbersString
set AppleScript's text item delimiters to savedDelimiters
return numberItems
end pickupNumbers

set theNumbers to pickupNumbers from the clipboard
item 1 of theNumbers
item 2 of theNumbers
item -1 of theNumbers

261 :名称未設定:2018/10/31(水) 03:00:44.18 ID:EBY8pLWp0.net
javascriptでmacアプリ操縦できるんかい!便利すぎワロタwwwww
何で今まで知らんかったんだ俺。
アップルももっと宣伝しろや!

262 :名称未設定:2018/10/31(水) 07:02:45.78 ID:w0lLlxVj0.net
いちおう、負数と少数対応
https://ideone.com/U5bvc7
(行が長いと怒られたのでideone)

263 :名称未設定:2018/10/31(水) 10:20:22.09 ID:EecYNdku0.net
>>258
>>260はたぶん現段階では意味がわからなさすぎるだろうから
asは諦めてJXA(javascript)にしたらいいよ。asのみでそれをやるとかなりややこしい。
JXAはサンプルとか少なくて苦労するだろうけど、単独で使う分にはjavascriptだから。
app = Application.currentApplication()
app.includeStandardAdditions = true
str = app.theClipboard()
nums=str.match(/¥d+/g)
sum=getSum(nums)

function getSum(ary){
s=0
for (var i=0; i<ary.length; i++){
s=s+parseInt(ary[i])
}
return s
}

264 :名称未設定:2018/10/31(水) 10:21:38.73 ID:EecYNdku0.net
>>263の4行目の¥dの¥はバックスラッシュに置き換えてね。

265 :名称未設定:2018/10/31(水) 11:28:34.38 ID:EecYNdku0.net
>>258
asのみで試しにやってみた。思ったよりはスッキリしてるかな。
https://ideone.com/DrP4v8

266 :名称未設定:2018/11/01(木) 13:41:26.79 ID:tDuq1l2w0.net
質問です
デスクトップにあるファイルを全て取得してリストに格納する場合
tell application "Finder"
set theList to every file of desktop
end tell
こうするとファイル名順のリストになると思うのですが、これを作成日時順にすることは可能でしょうか?

267 :名称未設定:2018/11/01(木) 13:53:42.13 ID:JGEC5ORU0.net
set theList to every file sort by creation date of desktop

でできたっぽい

268 :名称未設定:2018/11/01(木) 18:58:11.38 ID:tDuq1l2w0.net
>>267
ありがとうございます!できました!
sort dy〜で出来るのは何となく見当は付いていたのですが、入れる場所を間違っていてうまく動かなかったみたいです
文法頑張って勉強します

269 :名称未設定:2018/11/03(土) 04:40:35.41 ID:MI1Joi0x0.net
かつてAppleScriptの日本語バージョンがあったんですね
使ったことありますか? 使ってみたかったなあ

270 :名称未設定:2018/11/03(土) 14:35:07.08 ID:AewTmxnd0.net
>>267 sort by知らんかった!Finder以外でも使えるといいのに

>>269 少し触ってみて、書きづらくてやめた気がする

271 :名称未設定:2018/11/03(土) 15:26:19.53 ID:4JGEp5/z0.net
日本語表現は実用性があるとは言い難かった。
非純正アプリはほとんどが日本語表現がないため、結局ちゃんぽんになってしまい、快適ではなかった。

272 :名称未設定:2018/11/10(土) 22:57:17.33 ID:DhCPvyoL0.net
あそっか、アプリの方も対応しないといけないのか
直ぐに消えたのも納得です、ありがとうございました
でも、ちょっと使ってみたかった

273 :名称未設定:2018/11/13(火) 01:03:26.10 ID:VllV+WTz0.net
http://r2.upup.be/wV2qsULdHm

274 :名称未設定:2018/11/13(火) 02:51:16.99 ID:aJ0+HTL70.net
>>273
ブラクラ。

275 :sage:2018/11/18(日) 07:33:20.44 ID:eQLKwBbw0.net
macOS Mojaveにしたところ,Safariで
ダウンロードしたpdfファイルをSafariの
虫眼鏡でアクセス(Finder上に表示)しようとすると
自作したappleScriptが実行されてしまいます。
10年以上前に作成したappleScriptで
今までは,こんな動作はしませんでした。
回避策はございますか?

276 :名称未設定:2018/11/18(日) 08:12:14.67 ID:T5+J33Nx0.net
ナゾ&キモいな
フォルダアクションが設定&動いているっぽいが、Mojaveで急にとか??とりあえず見てみる

277 :名称未設定:2018/11/18(日) 10:12:37.48 ID:qFTANg+J0.net
AppleScriptが関係あるのかないのかわからんけど、それにしても状況をもっと絞った方がいいのではないか
他のpdfは?
他の種類の書類は?
ダウンロード先のフォルダとそのスクリプトとの関係、配置は?

278 :名称未設定:2018/11/18(日) 10:56:30.55 ID:p936fZ460.net
>>275
>Safariの
>虫眼鏡でアクセス(Finder上に表示)

うちのSafariではそもそもそれがわからんw
ファイルのダウンロード先をデスクトップにしているので
とうぜんpdfファイルもデスクトップに置かれてるだけ
ツールバーをカスタマイズ、のところを見ても虫眼鏡などないw
ふだんSafari使ってないからこれ以上わからん

279 :名称未設定:2018/11/18(日) 11:05:53.52 ID:qFTANg+J0.net
ダウンロードのポップアップウインドウと思ってたけど
設定で項目を自動削除とかにしてると普段はツールバーに出てない

280 :275:2018/11/18(日) 18:31:11.73 ID:eQLKwBbw0.net
みなさま,コメントをありがとうございます。
>>277
>他のpdfは?
Safariでダウンロードした全てのpdfで発生します。
Finder上でそのpdfをダブルクリックすると,普通に
アプリの「プレビュー」が開き,アップルスクリプトは
起動しません。

>他の種類の書類は?
映像ファイルをよくダウンロードしますが,映像ファイルであれば
Safariのダウンロードリストのファイル名の横にある虫眼鏡を
クリックすれば,Finder上に表示できます。これがpdfだと
特定のアップルスクリプトが起動してしまいます。

>ダウンロード先のフォルダとそのスクリプトとの関係、配置は?
ダウンロード先のフォルダはDownloads(昔からのデフォルト)です。
起動してしまうアップルスクリプはApplicationsフォルダーに
入っています。そのアップルスクリプをFinder上でダブルクリックすると
正常な動作(複数のフォルダーを開いて,Finderの指定位置に移動)を
実行します。

10年前に作成したアップルスクリプトは,自宅のMacと職場のMacに入れて
10年間,更新していません。自宅と職場のMacを別々にmacOS Mojaveに
バージョンアップしたところ,両方のmacで上記の同じ問題が発生しました。

281 :名称未設定:2018/11/18(日) 21:29:31.37 ID:x89nB3Lq0.net
AppleScript使いなら、その不具合を逆手にとるべし!

勝手に起動してしまうスクリプトの中身を、
「Downloadフォルダの中で最新のPDFファイルをプレビューで開く」
って内容に書き換えちゃえ

282 :名称未設定:2018/11/18(日) 23:58:16.34 ID:KI7XpZB+0.net
そんなことやりたい訳じゃないだろ馬鹿馬鹿しい

283 :275:2018/11/19(月) 08:37:59.88 ID:aQYaMYht0.net
スクリプト名は00finder2.app,内容はこんな感じです:
tell application "Finder"
activate
close every window
make new Finder window
set bounds of Finder window 1 to {0, 0, 1080, 400}
set position of Finder window 1 to {0, 0}
make new Finder window
set bounds of Finder window 1 to {0, 0, 1080, 400}
set position of Finder window 1 to {0, 420}
(以下省略)

スクリプト名の最初の00を削除しても,同様の問題が発生します。
スクリプトを別のフォルダーに置いても,同様の問題が発生します。
スクリプトをゴミ箱に移動すると,問題は発生せずに,ダウンロードしたpdfファイルが
Finder上に表示されます(正常な動作)。

使用環境はmacOS Mojave 10.4.1, Safari Version 12.0.1

284 :275:2018/11/19(月) 08:51:18.87 ID:aQYaMYht0.net
スクリプト名は00finder2.appの内容をコピーして,新しい
appleScriptファイルを作成し,別の名前を付け,元の00finder2.appを
ゴミ箱に移動したところ,問題は解決できました。
ただ,問題の発生の原因はわかりませんが。

285 :名称未設定:2018/11/19(月) 10:05:08.69 ID:SmQ2Gv2t0.net
AppleScriptのアプリとかアプレットとか書いた方がいいよねと思うわ

Info.plistが狂ってたかなんかじゃないの CFBundleIdentifier とか CFBundleSignature とか
それかMojaveは使ったことないから変わってるかわからないけどLaunchServicesのDBが狂ってた

286 :名称未設定:2018/11/19(月) 13:01:04.84 ID:51CbbUAG0.net
世の中狂ってる

287 :名称未設定:2018/11/19(月) 13:25:22.10 ID:feFxtWev0.net
ああ、そうだな

288 :名称未設定:2018/12/06(木) 11:35:14.24 ID:pXZOuPXA0.net
最近書き始めた初心者です
文字列処理してる時、tell application finder 〜でくくった中で
offset of〜を書くと、ログではエラー吐いてtell current application に飛ばされてますよね
処理が止まるエラーにはならないんですが、ログが汚く長くなるので回避できるならしたいのですが、何か手法はありますか?

289 :名称未設定:2018/12/06(木) 12:26:15.81 ID:zmYpw3wN0.net
なぜスクリプト例を書かないか

290 :名称未設定:2018/12/06(木) 12:28:34.45 ID:zmYpw3wN0.net
あ、いいやw

291 :名称未設定:2018/12/06(木) 12:32:49.86 ID:zmYpw3wN0.net
とりあえず先頭に
use scripting additions
入れたら出なくなった

これで試した
set msg to "tell application finder"
tell application "Finder"
offset of "finder" in msg
end tell
--> error number -10004

292 :名称未設定:2018/12/06(木) 12:39:50.05 ID:5stFhJjG0.net
>>288
osのバージョンは?
10.11ではuse scripting additionsは無くても問題無いが。

293 :名称未設定:2018/12/06(木) 13:13:10.96 ID:/2BqwjjI0.net
例を示していただきありがとうございます
OSは10.13です
ただ今出先なので、試せる環境に戻りましたらやってみたいと思います

294 :名称未設定:2018/12/06(木) 19:11:12.56 ID:ZB9JhEHI0.net
>>291
ありがとうございました。何となく引っかかっていたのでスッキリしました。

295 :名称未設定:2018/12/08(土) 04:57:44.18 ID:OsXKkkYC0.net
エラーの出るところを
tell me
end tell
で囲う

296 :名称未設定:2018/12/08(土) 09:43:09.05 ID:Q2Unigq80.net
それもまたよかろう

297 :名称未設定:2018/12/08(土) 23:14:27.71 ID:FECiCgaZ0.net
>>295
そんな書き方があるなんて知りませんでした
なんか可愛いですね、ありがとうございます

298 :sage:2018/12/10(月) 11:00:43.24 ID:mNpt5IAA0.net
javascriptで'QuickTime Player’を制御するコマンドを書き始めました。

var quickTimePlayer = Application('QuickTime Player');
quickTimePlayer.activate()

これで最後に開いていた複数の動画が開けました。次に,これをルーブ再生させます。

delay(2)
var lenX = quickTimePlayer.documents.length
for (i = 0; i < lenX; i++){
var test = quickTimePlayer.documents[i];
test.play();
test.looping = true;
}


最後に,この動画(複数)Finder上の指定の場所に移動させたいのですが
どのように書けばよろしいでしょうか?

299 :名称未設定:2018/12/10(月) 11:23:51.28 ID:gAIj8poC0.net
quickTimePlayer = Application('QuickTime Player')
finder = Application('finder')
homedir = Application('System Events').users[0].homeDirectory()
desktop =Path (homedir+'/Desktop')
f= Path (quickTimePlayer.documents[0].file())
finder.move(f,{to:desktop,replacing:false})

300 :298:2018/12/10(月) 19:29:17.30 ID:mNpt5IAA0.net
>>299
スクリプトをありとうございます。私の説明が悪かったことを
お詫び申し上げます。

やりたい作業は,quickTimePlayer.documents[0]を
モニタースクリーンの{0, 0}の位置に,quickTimePlayer.documents[1]を
{720,0}に,quickTimePlayer.documents[2]を{0,480}に,
quickTimePlayer.documents[3]を{720,480}に移動させるような
ことです。

お手数をかけて申し訳ありませんでした。

301 :名称未設定:2018/12/10(月) 23:11:31.03 ID:lqAuC0EH0.net
位置とサイズ情報(bounds)はwindowが持ってるからそっち使うんじゃないの
ob = quickTimePlayer.windows[0].bounds()
quickTimePlayer.windows[0].bounds = {x:0, y:0, width:ob.width, height:ob.height}
等々

302 :298:2018/12/11(火) 04:02:12.21 ID:tNqI8RCK0.net
>>301
>位置とサイズ情報(bounds)はwindow
“bounds”を使うんですね!
本当にありがとうございました。
ずっと”position”という言葉で検索していたため
正解が見つかりませんでした。
 ご教示いただいたwidth:ob.widthというような書き方は
全く知りませんでした。Script EditorのDictionaryにも
width:ob.widthに関する解説はないですよね?
 自分でも勉強したいのですが,これを解説している
ページや書籍などはございますか? 

303 :名称未設定:2018/12/11(火) 12:13:29.08 ID:QaN2g9Yw0.net
ごめんね
いつも適当にやってるし、JavaScriptで書くことも滅多にないしで、まともな説明も紹介もできないよ

エディタの下側、ログを表示>返された値、を見ると 〜.bounds() 実行結果が {"x":20, "y":38, "width":700, "height":705} 形式で返ってた、だから元の値を維持するのに . (ドット)表記を使ってみた
ここ↓は読んだりするけど
https://developer.apple.com/library/archive/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html

それと、positionやsizeはSystem Events経由で得られる
Application('System Events').applicationProcesses['QuickTime Player'].windows[0].position()
自分はAppleScript非対応のアプリで使うことがあるけどPreviewとか

304 :名称未設定:2018/12/11(火) 12:16:17.47 ID:QaN2g9Yw0.net
>だから元の値を維持するのに . (ドット)表記を使ってみた

別にこれ聞かれたんじゃなかったね、無視してちょ

305 :名称未設定:2018/12/11(火) 12:33:44.54 ID:7MKZiNAb0.net
>>302
jxaは用語説明もまともに用意されてなかったり、参考になるものも少ないので、
特にjsの機能を使いたい訳じゃなければapplescriptの方がラクではある。

306 :298:2018/12/11(火) 23:25:54.84 ID:tNqI8RCK0.net
>>305
>特にjsの機能を使いたい訳じゃなければ
過去5年間に自作したプログラムでの
appleScriptの使用率は1%以下。
そのため,appleScriptの基本的なループや
条件処理なども完全に忘れてしまっている。
 現在使用しているプログラムは主にjavascriptと
python。使い慣れたjavascriptだとスクリプトの
90%以上が簡単に書き上げられるが
最後のmacOS特有のコマンドでお手上げでした。

307 :名称未設定:2018/12/12(水) 09:46:23.78 ID:Vt3ZJFcS0.net
js書き慣れてる割には;入れたり入れなかったりまちまちだな。

308 :名称未設定:2018/12/12(水) 10:51:51.10 ID:pEW5eCYS0.net
結局>>303は丸ごと無視されたのか
それなりに気を使って書き上げたつもりだったけど、まあ内容ないけどさ
しかし辛いの〜

それじゃ俺はこれで
tell me to quit saving no

309 :名称未設定:2018/12/12(水) 11:14:18.54 ID:f2LM9iRz0.net
>>304 でその前も全部無視したんじゃね
どう入れたらどういうフォーマットやねんって、言う通りbounds() 実行結果が〜なんぞのgetterで出してみりゃだいたいわかるよね

310 :名称未設定:2018/12/13(木) 03:07:11.52 ID:Yo74efIG0.net
達人は298の時点でスルー決定していた予感

311 :298:2018/12/14(金) 10:00:07.79 ID:2l/2lhQa0.net
//複数の動画を大画面モニターに表示して,重ならないように
//並べて,音声を消し,ループ再生するjavascript #1
var pathX = "/Users/Tanabe/Movies/";
var yHeight2 = 480;
var xWidth2 = 850;
var quickTimePlayer = Application('QuickTime Player');
quickTimePlayer.activate();
var lenX = quickTimePlayer.documents.length;
//前に開いていた動画を閉じる
if(lenX > 0){
___for (i = 0; i < lenX; i++){
_____quickTimePlayer.documents[0].stop();
____ quickTimePlayer.documents[0].close();
___}
}
//次のtrue以下のコマンドを実行しないと,エラーが出る!?
if(true){
___quickTimePlayer.quit();
___quickTimePlayer = Application('QuickTime Player');
___quickTimePlayer.activate();
}
//次に続く…

312 :298:2018/12/14(金) 10:00:39.50 ID:2l/2lhQa0.net
//311の続き

var listX = ["08.m2v", "09.m2v", "12.mov", "13.mov", "14.mov", "15.mov", "01.mov", "02.m2v", "07.m2v"];
var lenMov = listX.length;
var qtX = 0;
var qtY = 0;
for (i = 0; i < lenMov; i++){
___fullPath = pathX + listX[i];
___qtMov = quickTimePlayer.open(fullPath);
___ob = quickTimePlayer.windows[0].bounds();
___console.log("333: " + qtMov.name());
___qtY = parseInt(i / 3) * yHeight2;
___qtX += xWidth2;
___qtX %= (xWidth2 * 3);
___qtY %= (yHeight2 * 3);
___quickTimePlayer.windows[0].bounds = {x:qtX, y:qtY, width:ob.width, height:ob.height};
___qtMov.play();
___qtMov.looping = true;
___qtMov.audioVolume = 0;
}

313 :298:2018/12/14(金) 10:17:27.42 ID:2l/2lhQa0.net
>>307
>js書き慣れてる割には;
言いたかったのは,>>312
var lenMov = listX.length;
for (i = 0; i < lenMov; i++){
qtY = parseInt(i / 3) * yHeight2;
qtX %= (xWidth2 * 3);
のループや,実数を整数変換,剰余などのコマンドが
javascriptであれば直ぐに書けるのですが,純正AppleScriptだと
いちいちネットを検索しないと無理,ということです。

>>299
今回は使用しませんでしたが
Path (quickTimePlayer.documents[0].file())
finder.move(f,{to:desktop,replacing:false})
というような書き方ができることを知って,驚きました。
自分ではこのような複雑なスクリプトを書けませんが
意味ははっきりと理解できます。
時間を使ってスクリプトを作成していただき
本当に感謝しております。

314 :298:2018/12/14(金) 10:34:15.37 ID:2l/2lhQa0.net
>>303
>いつも適当にやってるし
perlを長年使用していた私は,pythonに乗り換える時に
「適当にやって」も上手くいきました。
ところが大昔から時々,AppleScriptを利用してきており
かつ,JavaScriptを頻繁に使用している私には
>>299, >>300
で紹介していただいたスクリプトを全く独力では(どんなにネットを検索しても!)
書けない状況です。
 自分では書けませんが,読んで内容は理解できるし
とにかく >>299 のようなスクリプトはカッコいいです!
30年以上Macを使用していて,JavaScriptを愛していますが
久しぶりにシビれました!

315 :298:2018/12/17(月) 08:28:58.67 ID:6ayU5alI0.net
>>311
>//次のtrue以下のコマンドを実行しないと,エラーが出る!?
上記の”You don't have permission"エラーには最後まで悩まされましたが,
>>299
のスクリプトを何度か読み返して,Path (…)を実行することで
「true以下のコマンドを実行」しなくても,”permission”エラーを回避することができました。

ネットで検索すると,AppleScriptで書く場合には
set srcFileRef to (open POSIX file srcFileString)
で”permission”エラーが回避できるところまでは調べられましたが
それをjavascriptでどう書きなおすのかが,分かりませんでした。
スクリプト >>299 は,本当に役に立ちました!
貴重なスクリプトを提供していただき,ありがとうございました。

316 :名称未設定:2018/12/28(金) 13:16:28.09 ID:iV1mosCl0.net
Location Helperを使わない逆geocodingのやり方が分かる方はいますか?

317 :名称未設定:2018/12/28(金) 14:14:34.28 ID:jhzLnqgc0.net
https://itunes.apple.com/us/app/location-helper-for-applescript/id488536386?mt=12
これを使わずに、macOS(Cocoa) APIを使ってなの?もしくはGoogleGoogle Maps APIなんぞを使ってとか?

318 :名称未設定:2018/12/28(金) 14:27:55.99 ID:YnoMIWXv0.net
Google map APIを簡単に使えるようにするのがそのソフトらしいのだけれど、APIの有料化云々で使えなくなったのです。
macOSにもlocation managerなるAPIがあるらしいのですが、cocoaに慣れていないのでうまく呼び出せません。
やりたいことは、緯度経度から住所への変換です。

319 :名称未設定:2018/12/28(金) 14:47:39.40 ID:xq4jQ5B10.net
CoreLocationについてはここ http://piyocast.com/as/archives/tag/cllocationmanager 参照すればいい

320 :名称未設定:2018/12/28(金) 14:50:51.72 ID:jhzLnqgc0.net
残念ながら CLGeocoder reverseGeocodeLocation の結果を返してくれるのはBlocks(クロージャ、無名関数)しかなかった。セレクタ(メソッド)に返してくれるのもあればよかったんだけどね。もしくは、AppleScriptObjC/JXAがBlocksをサポートしてくれれば
Xcodeでそんなコマンド/ヘルパーアプリを書く、swiftコマンド使ってでSwiftをスクリプト的に書く、Google Maps APIを自分で使う
あたりかなあ

321 :名称未設定:2018/12/28(金) 14:57:42.48 ID:jhzLnqgc0.net
>>319 みたく、メソッド(デリゲート)で返してくれればいいのに、「逆」も。まあ、Objective-C/SwiftだったらBlocksとメソッド両方あったらどっち使うと言ったらBlocksを使う、Blocksしか使わないけどw
AppleScriptObjC/JXAがBlocksをサポートしてくれれば、いやしてくれw

322 :名称未設定:2018/12/28(金) 15:05:52.63 ID:YnoMIWXv0.net
つまり現状では難しいということでしょうか。
Cocoaをよくわかっていないので、紹介先も半分くらいしか理解できませんでした。

323 :名称未設定:2018/12/28(金) 15:24:56.62 ID:jhzLnqgc0.net
ああ、「逆」も じゃなく、「Geocoding」も か。「正」もBlocksしかないので、CLGeocoderのやろうwは

>>322
ちょっと難しいかなあ。Cocoaをちょっと勉強すればいいんじゃないのとは思わなくもないけどw
Google Maps APIならWeb APIというある意味一般的なのを使ってだけど(単にhttp呼び出し/取得)。準備とか面倒かもだけど

324 :名称未設定:2018/12/28(金) 15:53:18.02 ID:jhzLnqgc0.net
>APIの有料化云々で使えなくなった
のじゃなくて、(API) Keyless での Google Maps API 利用はできなくなったね
Keyless access to Google Maps Platform is deprecated. Please use an API key 〜
Location Helperのサンプルに
-- These commands use 'Core Location'
ってあるのに、なんでそこがGoogle Maps APIなのかと思ったら、Location Helperの最新最後が出た時には、CLGeocoderなんて存在しなかったあたりっぽい

で、自分でAPI Key取得すれば、
https://stackoverflow.com/questions/52727698/google-reverse-geocode-multiple-coordinates-with-one-api-call
なんぞでできるよ(たぶん)。app_id= や app_code= なんぞがAPI Key(確かたぶん)。自分で取得した値にすれば動くだろう

325 :名称未設定:2018/12/28(金) 16:03:06.41 ID:jhzLnqgc0.net
よくみたら
batch.geocoder.api.here.com
って、ナゾのサイトだったw まあ、それで(API Keyはそのサイトのなのかな)。Google Maps APIも同じようなのがたぶんあるだろう

326 :名称未設定:2018/12/28(金) 18:01:48.64 ID:jhzLnqgc0.net
Google Maps API のはこれ
https://developers.google.com/maps/documentation/geocoding/intro#reverse-exampleintro#ReverseGeocoding
単にkey= に取得したAPI Keyを入れればいいんじゃね

コマンドでできるか(許可とかなんとかウザいwの対応するためにはヘルパーアプリじゃなきゃかな)と試したらコマンドでできた
https://ideone.com/0We7Hg

$ hogehoge 35.1707 136.8826
2018-12-28 17:33:56.830 YYYY[462:4851] 住所:(
2018-12-28 17:33:56.830 YYYY[462:4851] 〒450-0002
2018-12-28 17:33:56.830 YYYY[462:4851] 愛知県名古屋市中村区
2018-12-28 17:33:56.830 YYYY[462:4851] 名駅1丁目1
2018-12-28 17:33:56.830 YYYY[462:4851] )

な感じ。たったこれだけでいいんだからAppleScriptObjC/JXAでBlocksが使えれば/CLGeocoderのやろうがセレクタにも返してくれれば、AppleScriptObjC/JXAで完結するのにぃ

327 :名称未設定:2019/01/28(月) 09:09:40.38 ID:5kzQRvO50.net
display alertをtimeoutさせない方法って無いですよね?
ググるとwith timeout of 〜 secondsすればいいとかあるけど、Mojaveだとこれやってもgiving up afterやっても2分でtimeoutしちゃう

328 :名称未設定:2019/01/28(月) 09:27:13.85 ID:5kzQRvO50.net
あ、activateしてからdisplay alertすればtimeoutしなかった
背後でdisplay alertしたときだけ2分でtimeoutするのか…変な仕様だな

329 :名称未設定:2019/01/28(月) 17:14:26.26 ID:qPnOw4hI0.net
AppleScriptの骨幹のApple Eventの仕様かな。Apple Eventのリクエストしてからそれのレスポンスが返るまでのタイムアウトがちょうど2分らしい、エラーメッセージもそういうメッセージ
バックグラウンドだとレスポンス返すとこまでは動かない(=displayまではしてない)からかな

330 :名称未設定:2019/01/28(月) 17:26:07.90 ID:qPnOw4hI0.net
Apple Event timeout error はハンドリングできるので、activateがウザい(他になんかしているときに勝手にアクティベートされるのはウザい)からしたくなければ、timeout なら display alert を再び/繰り返すかなあ

331 :298:2019/02/09(土) 08:31:44.76 ID:48/L+ULp0.net
>>299
file()メソッドを使わせていただきましたので,その報告です。

複数のQuickTime動画を大型モニター4画面で同時自動再生(>>311,312,315)しています。
開いている複数の動画のパスを次のようなスクリプトで取得して保存しておきます。
このようなリストを複数作成しておけば
そのリストに指定された複数の動画を同時に開いて同時に再生できるので便利です。

var quickTimePlayer = Application('QuickTime Player');
quickTimePlayer.activate()
delay(2)
lenMov = quickTimePlayer.documents.length
console.log("333: " + lenMov)
for (i = 0; i < lenMov; i++){
___console.log(quickTimePlayer.documents[i].file())
}

332 :名称未設定:2019/03/02(土) 03:11:39.45 ID:4RgGEeXD0.net
画像ファイルの画像サイズを得てみる

// Image Events
ImageEvents = Application("Image Events");

function IEImageWidth(path) {
let image, dimensions;
if((image = ImageEvents.open(path)) == null)
return undefined;
dimensions = image.dimensions();
image.close();
return (dimensions.length == 0 ? undefined : dimensions[1]);
}

333 :名称未設定:2019/03/02(土) 03:12:19.87 ID:4RgGEeXD0.net
// Spotlightのメタデータ。AppleScript(JXA)ではサポートしてない(?)のでシェルで
app = Application.currentApplication();
app.includeStandardAdditions = true

function SSMDImageWidth(path) {
let result = app.doShellScript("mdls -name kMDItemPixelWidth '" +
path.replace(/'/g, "\\'") +
"' 2>/dev/null | awk 'NF==3&&/^kMDItemPixelWidth/{if($3 != \"(null)\") print $3; exit 0;}'");
return (result.length == 0 ? undefined : Number(result));
}

334 :名称未設定:2019/03/02(土) 03:12:51.19 ID:4RgGEeXD0.net
// Spotlightのメタデータ。Cocoa API直接
ObjC.import("CoreServices");

function MDImageWidth(path) {
let result = undefined;
let item, attributes;
if((item = $.MDItemCreate($.kCFAllocatorDefault, path)).isNil())
return result;
if(!(attributes = $.MDItemCopyAttributes(item, ["kMDItemPixelWidth"])).isNil()){
if((result = attributes.js["kMDItemPixelWidth"]) != undefined)
result = result.js;
$.CFRelease(attributes);
}
$.CFRelease(item);
return result;
}

335 :名称未設定:2019/03/02(土) 03:19:58.16 ID:4RgGEeXD0.net
function run(input, parameters) {
result = [];
input.forEach(item => {
if((width = IEImageWidth/SSMDImageWidth/MDImageWidth(item.toString())) == undefined)
return;
result.push(width);
});
return result;
}

IEImageWidth:おっそ、まあ、画像ファイルを開いてなんちゃらやってだからこんなもんか
SSMDImageWidth:んー、おっそ。んー?
MDImageWidth:ゲロ速い。SSMDImageWidthから少しは速くなればいいかなと思ったら、ゲロ速い。SSMDImageWidthはいちいちシェル起動するからとかか

C関数まんま使えるのか、すげーな、AppleScriptObjC。BlocksもJavascriptのクロージャがそのまんま使えるのを最近知った。鬼金やな
鬼らしく、ミスったら簡単にScript Editor/Automatorクラッシュする/させることできるけどw

336 :名称未設定:2019/03/05(火) 10:49:12.91 ID:AAVk5UnP0.net
[Mojave以降] AppleScript製アプリのアクセス許可のダイアログが毎回出るのを防ぐ
ttps://mac-tegaki.com/trouble-shooting/applescript-app-ask-permission-every-time.html

まだHigh Sierraなんですが
こんなの見かけたけどめんどいですね

337 :名称未設定:2019/03/05(火) 12:28:37.92 ID:+Yw6Dqc90.net
許可したら システム環境設定 > プライバシ に登録されて「毎回」は出ないハズだよ
自動登録時にアクセス許可するアプリのチェックが付いてないとかじゃないのかな「毎回」は
だが、SIPもそうだが面倒なことが増えるねえ

338 :名称未設定:2019/03/05(火) 13:07:26.36 ID:+Yw6Dqc90.net
あら、確かに「毎回」出てくる。だがしかし、書かれているようなややこやしいことではなさげかな?単にチェックするとこタイミングが変ってことじゃないのかなあ

・ベタがき
・on run
で、tell application "Another Application" すると、許可してるのに「毎回」聞きやがる
・on idle
で、tell application "Another Application" すると、最初に聞かれるが、許可すると2度目以降聞かれない
感じ。on idleではなくてもrun終わった後のどこか(標準ハンドラってなにかあったかなあ)の時点でならばっぽいかなあ、いや、単なるバグじゃないのかと

339 :名称未設定:2019/03/05(火) 22:57:30.53 ID:azgzqLfF0.net
>>336
手前のアプリを制御するスクリプトとか書くとアプリごとに毎回聞かれたりするしクソうざいんだよねこれ
「〜には全てのアプリの制御を許可」とか設けて欲しい

340 :名称未設定:2019/03/19(火) 23:16:10.19 ID:6rhIpSKL0.net
最近興味もったんだけど、ShellScriptとどうちがうの?
まったく別もの?

341 :名称未設定:2019/03/20(水) 00:30:14.28 ID:MPMHipPd0.net
似たようなもんだしまったく別ものでもある。何をするかによるね
perl(など)がShellScriptとどうちがうの?と聞いているようなもんだね。答えづらい問いだねw

342 :名称未設定:2019/03/20(水) 05:10:34.36 ID:+Z1ho9s70.net
Entanglerってアプリいいね

343 :名称未設定:2019/03/20(水) 18:13:32.31 ID:/i8VCt340.net
なにそれ

344 :名称未設定:2019/03/20(水) 18:21:50.77 ID:MPMHipPd0.net
http://entanglerapp.com
これだろな

https://www.macupdate.com/app/mac/49255/entangler
https://itunes.apple.com/jp/app/entangler/id680030301?mt=12

Launch Automator actions and script on your Mac from your iPhone
ネタ的にこのスレにふさわしいと思うが、from your iPhone はびみょー、俺的に

345 :名称未設定:2019/03/20(水) 18:51:40.15 ID:PnbuvbRk0.net
FaceTimeをペットカメラ代わりにしようと思ったんだけど、受け側のMacの自動応答がどうやっても出来なかったんだよね
なのでメールをトリガーにして、AS使ってMacからかけようと思ったんだけど、メール送るのめんどくて他の方法探してたら見つけた
問題なく動作してるよ

346 :名称未設定:2019/03/23(土) 11:59:14.33 ID:XBdRsdKw0.net
初心者です
スクリーンセーバーの稼働開始時間を簡単に変更したくて、
ネットでそれらしいScript探してきたんですが、実行して見たらエラーが出てしまいました
コードの修正方法わかればお知らせください
コードとエラー内容は添付のイメージの通りです。
https://i.imgur.com/ci09d9g.png

347 :名称未設定:2019/03/23(土) 12:05:51.98 ID:4RgCPhsh0.net
OSバージョンを明らかに
それとスクリプトはどこにある

348 :名称未設定:2019/03/23(土) 12:16:42.15 ID:XBdRsdKw0.net
早速のレスありがとう
OSは Mojave 10.4.3
ソースは誰かのブログだと思うけど
http://nyoro2.net/wp/?p=93

です。

そうそう、「初心者」というのはAppleScriptが初心者という事で
Macは10年以上使ってます

349 :名称未設定:2019/03/23(土) 12:51:05.16 ID:4RgCPhsh0.net
OS聞いといたくせにこっちはMojaveじゃないんだけど、この↓スクリプトを
tell application "System Events"
tell process "System Preferences"
entire contents of window 1
end tell
end tell
・デスクトップ側を選んで実行 →結果にUIエレメントが普通にずらずら〜っと出る
・スクリーンセーバ側を選んで実行 →結果に何も出ない、空 {}
になったからAppleScriptでは無理なのかも
UI Browserでも検出されない

で、System Eventsの用語説明を開くとscreen saverがあるから、UI操作じゃなくて直接設定するんじゃない
tell application "System Events"
set delay interval of screen saver preferences to 10 * minutes
end tell
とかで変更できるようだけど

350 :名称未設定:2019/03/23(土) 13:39:30.92 ID:oXMaMgqy0.net
Mojaveでなくても(Sierraでも)すでに動かないスクリプトだね
https://www.youtube.com/watch?v=JKVdbktENb0&feature=youtu.be&t=41
こんなUIの時のスクリプトだろね。開始時間設定するスライダーなんて無くなったので、エラーで出ている通り
ポップアップメニューに(及びグルーピング)変わってるのでそれに対応すれば動くようにできるだろうけど、>>349の最後のがあるんだからそれを使う方が簡単確実だろね

>>349
チラっとググってdefaultsコマンドでってのがあってそれでいいじゃんと思ってたが、System Eventsであるのねええ

351 :名称未設定:2019/03/23(土) 15:29:06.24 ID:XBdRsdKw0.net
>>349
レスありがとうございました
おかげで、希望通りの操作ができる以下のスクリプトが書けました

set delayTime to 0

tell application "System Events"

set delayTime to delay interval of screen saver preferences

if delayTime = 0 then

set delay interval of screen saver preferences to 300

set msg to "スクリーンセーバー開始は5分間後"

else

set delay interval of screen saver preferences to 0

set msg to "スクリーンセーバーはOFF"

end if

end tell

display dialog msg

352 :351:2019/03/23(土) 15:34:03.21 ID:XBdRsdKw0.net
ありゃ、レスが1行おきになってしまった
Twinkleのレスのレビューでコード部分が1行で繋がってしまったので改行入れたら1行おきになってしまった
Twinkleのバグだったか

353 :名称未設定:2019/03/28(木) 10:48:32.04 ID:AaFTaDr40.net
作成し直しというか別名で保存しないとダークモードで動作してくれないのね

354 :名称未設定:2019/03/28(木) 10:58:52.77 ID:+up6tGkS0.net
レスそのままの意味でのではそうでもないけど

355 :名称未設定:2019/04/19(金) 20:44:26.97 ID:V4x/CTV/0.net
>>316
https://pastecode.xyz/view/be96be14

JXAなscrpをAppleScriptからScript Libraryとして読めない呼べないのはよしとしよう(まだでそのうちに使えるようになるんでしょ?)
load script でどうせなら、JavaScriptのソース部分だけテキストで返してくれればいいのに
run script in "JavaScript" で with parameter は使えないのか??のくせに run() は実行するしようとするのね(いや、その方がいいんだろうけど)

もうちょっとあとちょっとツメてほしいとこ

356 :名称未設定:2019/04/19(金) 21:16:01.95 ID:po87l5Oa0.net
> まだでそのうちに使えるようになるんでしょ?

とうに開発チームも解散されられたし、そういうことにはならんのじゃないの

357 :名称未設定:2019/04/19(金) 21:24:54.86 ID:V4x/CTV/0.net
そういう息を吐くように嘘はいらんから

358 :名称未設定:2019/04/19(金) 21:37:21.43 ID:po87l5Oa0.net
どうせあてになんないよ
iOSと共通に使えない機能なんか開発リソース縮小されてんだから

359 :名称未設定:2019/04/19(金) 21:48:34.03 ID:V4x/CTV/0.net
そういう妄想自分はそう思うだけのもいらんから(なに後退してるねんw)
iWorkでもちょっとは前進したみたいだけど。ちょっとだけだけどなw

360 :watarie:2019/04/20(土) 20:01:10.76 ID:2MHI6VMA0.net
空のスクリプトオブジェクトを呼び出すと
スタックオーバフローで続けることができなくなるようです。
どなたか何故そうなるのか教えて頂けませんでしょうか?

tell test to run--これがエラーします

script test
end script

test2()--これはエラーしません

on test2()
end test2

361 :watarie:2019/04/20(土) 20:17:51.66 ID:2MHI6VMA0.net
先程の質問なんですが
scriptの中に
何かを記述するか
runハンドラを入れるとうまくいきました。
なにか入れないとrunハンドラが発生しないのでしょうか・・・
つまらないことを聞いてすみません。

362 :名称未設定:2019/04/20(土) 20:28:16.57 ID:yLj5TBgV0.net
load script でも run script でもスクリプトとして空なのはダメっぽい
run ハンドラ入れなくても、何かスクリプトとして一行でもあればいいっぽい
スタックオーバフローは空であるかどうかのチェックをせずになんかぐるぐるしてスタックオーバーフローにっぽいけど、まあ、エラーにはしてるんだからw

script は空ではダメってだけ(それで困ることはない、もしくは on error で引っかかる)でいいんじゃね

363 :名称未設定:2019/04/20(土) 22:03:53.08 ID:yLj5TBgV0.net
ああ、間違えたかな

load script は空でも読めそう
run script 及び、load script での run は、空コメント
--
2文字(3文字?)でもあれば、エラーにならない(ある意味ナゾw)

script ~
end script
run の場合、実行すべき文が無ければなにか彷徨ってスタックオーバーフローかな
on で別のハンドラとかがちゃんとあってもスタックオーバーフロー。on run でなくても実行すべき文が一行があればそうならない、それが例えリテラル
0
一文字だとしても(まあ、リターン文のようなもんだろけど)

364 :watarie:2019/04/22(月) 18:27:46.90 ID:b5k8dtsU0.net
ご返答くださいまして有り難うございました。
まさかこんなに早く回答いただけるなんて思ってもいませんでした。
自分の中で腑に落ちました。
本当にありがとうございました。

365 :watarie:2019/04/22(月) 18:35:20.23 ID:b5k8dtsU0.net
すみません。又質問なのですが^^;
下のrun scriptで最後にmeを付けないとdialog()が動かないようです。
meはこの作られる予定のスクリプト自身を指すのは分かるのですが、
最後にそれを入れないとハンドラが動かない理由をどなたか知りませんでしょうか?

run script "
on dialog(naiyou)
display dialog naiyou
end
me
"
result's dialog("テスト")

366 :名称未設定:2019/04/22(月) 19:08:24.33 ID:HEwjvD6Z0.net
run script ~
なので、あくまでも以下のスクリプトを実行 するにすぎない
meが無けれななにも実行しないとのと同じ
me があることによって run script の実行結果として(たまたま) run script で実行中の自身の scriptオブジェクト が返ることになり、その scriptオブジェクト 対して存在する dialog ハンドラを呼んでいるから動くってとこかな

その使い方が真っ当かどうかはわからんw イレギュラーっぽい感じがするけどね

367 :名称未設定:2019/04/22(月) 19:17:42.98 ID:HEwjvD6Z0.net
スクリプトな文字列からscriptオブジェクトを作る文は用意されてないのか??
だったら、その手法はその目的ではアリなのか

368 :watarie:2019/04/22(月) 20:36:27.87 ID:b5k8dtsU0.net
set aList to {{_name:"watarie", _age:39}, {_name:"tanaka", _age:30}, {_name:"sugita", _age:25}, {_name:"watanabe", _age:25}}
theWhose(aList, "wata", "_name")


on theWhose(aList, _keyValue, _keyAsText) --1.レコードのリスト 2.絞り込みたい内容 3.key値をテキストにしたもの
set resultList to {}
repeat with i from 1 to (length of aList)
run script "
on getValue(itemI)
return |" & _keyAsText & "| of itemI
end
me
"
result's getValue(item i of aList)
if _keyValue is in result then set end of resultList to item i of aList
end repeat
return resultList
end theWhose

369 :watarie:2019/04/22(月) 20:37:37.10 ID:b5k8dtsU0.net
レコードのリストでwhoseみたいなことがしたいと思っていまして。
自分で調べながら作ったのですがどうしてもmeだけが腑に落ちませんでした。
理解できないと覚えられないタチで^^;;;

ご教示ありがとうございました!

370 :watarie:2019/04/22(月) 20:45:17.24 ID:b5k8dtsU0.net
run scriptで最後にmeを使わなければ、ただの実行結果が返り値になって
meを使うとscirptオブジェクトそのものが返って、その中に含まれているハンドラも動くようになると言う感じで良いでしょうか?(・・;

371 :名称未設定:2019/04/22(月) 21:17:35.66 ID:HEwjvD6Z0.net
run script ~
だから、結果を返す(こともできる or ある意味勝手に返す、最後のどうであれ文の結果のなにがしら。>>363の最後も同じことそゆこと)。最後に
me
なので、実行している自身の scriptオブジェクト を返すことになる(最後に return me としたいとこだが、ルート(?)レベルで return は書けない)

呼び出し側は返ってきたたのが(どうであれ)scriptオブジェクト なので、以後、scriptオブジェクト に対しての(load script や script で宣言した scriptオブジェクト と同じ)

set dialogScriptObject to run script "
on dialog(naiyou)
display dialog naiyou
end

on run
return me
end run"

set dialogScriptObject to load script "dialogScriptObject.scpt"

script dialogScriptObject
on dialog(naiyou)
display dialog naiyou
end dialog
end script

dialogScriptObject's dialog("テスト")

おなじこと(ほぼ)

372 :watarie:2019/04/22(月) 21:31:45.72 ID:b5k8dtsU0.net
うわわわ。すごく分かります。
returnということだったんですね〜
出口まで案内していただき、ありがとうございます!
当方飲み込み悪いんで今回めっちゃ勉強になりました!
run scriptでできることの幅が広がりそうです。
有り難うございました!^^

373 :名称未設定:2019/04/23(火) 19:32:11.04 ID:njFtA4nd0.net
return meはトップレベルで書けないなんてルールあったかな?
まあ、トラブりたくなければ
on run
end run
は省略しない方がいい。

374 :名称未設定:2019/04/23(火) 20:30:20.52 ID:k/h6+in70.net
今はベタでreturn書けるようになったのか。昔は書けなかったーエラーになったような気がしてた
もしかしたらJavaScriptと混同してただけかもしれないが、AppleScriptもそうだった気がするんだけどな

375 :名称未設定:2019/04/23(火) 22:39:43.23 ID:dhicO9pL0.net
>>360
>tell test to run--これがエラーします

>script test
>end script

この場合、testは親スクリプトのrunを継承しているから、自分自身を無限に呼び出しているのかな?
それがload scriptとの違いかもしれない。

376 :watarie:2019/04/25(木) 19:14:00.13 ID:oOLbKuUl0.net
度々すみません。
次はillustratorの絡みなんですけど場所違いでしたらすみません。
アクションを削除するコマンドが辞書にあったので使おうとしているのですが
エラーが起こってしまい進めません。

tell application "Adobe Illustrator"
tell current document
load action action file path POSIX file saveFile--ファイルパスの変数です。これはうまくいきました。
unload action action file path "アクションのセット名"--ここでつまずきます
end tell
end tell


因みに辞書は
unload action v : unloads an action into action palette
unload action
action file path text : Name of the set to be unloaded
action file path text : Name of the action to be unloaded

エラー内容は
error "Adobe Illustratorでエラーが起きました: Illegal argument - argument 1
- Required value is missing" number 1242

辞書の引数名が間違ってると思うのですが・・・


どなたかご存知ありませんでしょうか?

377 :watarie:2019/04/25(木) 20:20:58.05 ID:oOLbKuUl0.net
いつもありがとうございます。 376の件で
javascriptにて方法を見つけられましたのでお知らせします。


tell application "Adobe Illustrator"
tell current document
load action action file path POSIX file saveFile
do javascript "
unloadAction('セット名','')
"--javascriptならできたのでこれで回避します。
end tell
end tell


以上です。お騒がせしました。^^;

378 :名称未設定:2019/05/05(日) 19:02:24.41 ID:C1jHmsWF0.net
複数また単体jpgファイルを放り込むとImageOptimが起動、
ImageOptimの自動処理としてexifデータ削除後、ImageOptimを閉じる。
というものをautomatorやapplescriptで書いてますが、
automatorではアプリケーションを終了指示が無視され、
applescriptではImageOptimが処理を開始する前に終了命令が実行されてしまいます。
どなたか方法を教えてください。

379 :名称未設定:2019/05/05(日) 19:17:19.87 ID:ZMil4/BF0.net
どう書いたのか上げてくれると答えやすいと思う

380 :名称未設定:2019/05/05(日) 19:51:19.10 ID:ZMil4/BF0.net
ざっくりと
set theFiles {"/Users/.../File1.jpg", "/Users/.../File2.jpg", "/Users/.../File3.jpg"}

tell application "ImageOptim" to open theFiles

tell application "System Events"
tell window "ImageOptim" of process "ImageOptim"
repeat
if not (exists busy indicator 1) then
delay 1
if not (exists busy indicator 1) then exit repeat
end if
delay 1
end repeat
end tell
end tell

tell application "ImageOptim" to quit

381 :名称未設定:2019/05/05(日) 20:46:53.94 ID:L/9i61t+0.net
>>378
自分も同じことをAppleScriptでグラコンと組み合わせてやってる。
Automatorでやるんだったらこんな感じだと思う。
https://www.macorz.com/example/rea.png

382 :名称未設定:2019/05/05(日) 23:22:53.58 ID:C1jHmsWF0.net
>>379-381
有難うございました。
どちらが少しでも早いか、そして自分でもそのコードを応用して今後も使えるか、
自分のスキルに合っている方を参考にさせていただきます。
有難うございました。

383 :watarie:2019/05/11(土) 19:13:16.25 ID:hz1ihtRj0.net
知ってる人は知ってると思いますが、偶然見つけたのでお知らせします。

ハンドラからrunハンドラの変数を使うときは、引数に入れなくても、
my 変数としたらうまくいきました。

set aaa to 1
test()

on test()
display dialog my aaa
end test

いちいち引数に詰め込んでたけど開放されそうです。
ただ、引数の良いところが使えないので使い分けると良いかもしれません。

384 :名称未設定:2019/05/11(土) 19:37:44.28 ID:px/tgCTS0.net
>>383
そうだったんだ! 知らなかったなあ〜
自分で作ったScriptをちょい書き直してみたよ
これはけっこう便利なTipsだよ ありがとさん

385 :名称未設定:2019/05/12(日) 09:49:47.09 ID:MriXhlWP0.net
>>383
いままでglobal宣言するか、propertyにしてたよ…
次はこのやり方試してみる。ありがとう。

386 :名称未設定:2019/05/13(月) 11:21:47.88 ID:bti+YmC00.net
screenセーバーの開始を5分後とOFFを切り替えるスクリプト作ったんだけど、
Dockのiconに現在の設定をバッジで表示しようとして、ネットで調べて追記してみたけど上手くいかない

どなたか解決策を教えてください

コードとエラーは添付の通り
https://i.imgur.com/6nNHZ0U.png

387 :名称未設定:2019/05/13(月) 11:48:16.30 ID:fAgZmDit0.net
https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/AppendixA-AppleScriptObjCQuickTranslationGuide.html

メソッド呼び出しとかここ参照。

388 :名称未設定:2019/05/13(月) 12:03:59.96 ID:AwyTd4670.net
エラーメッセージに書いてあるとおりの、shodDockBadge: が tell application "System Events" の(スコープの)外にあるのでわかりませんっていう
shodDockBadge: があるとこの me/my を付ける明示する

showDockBadge_("5") of me

me's showDockBadge:"5"

my showDockBadge:"5"
っていう。上のネタとちょっと被ってるね偶然にも

389 :名称未設定:2019/05/13(月) 12:12:32.60 ID:AwyTd4670.net
showDockBadge: ハンドラはObjective-C形式なのに、なんで呼び出し側が(古い)関数(AppleScriptユーザ関数ハンドラ?)形式やねんと思ったら、勝手にObjective-C形式になるのね
Objective-C形式は、いつでもどこもで me's か my は必要だった。そりゃそうか

390 :名称未設定:2019/05/13(月) 12:19:12.65 ID:AwyTd4670.net
勝手に変わるのはハンドラ定義、また、いつでもどこも me's / my が必要なのはObjective-C形式で呼び出す場合
showDockBadge_("5")
で呼び出す場合は、スコープでme/myになる場合はme/myはいらない(というか省略可能という方が正しいのか)

391 :名称未設定:2019/05/13(月) 12:28:48.56 ID:AwyTd4670.net
me's showDockBadge_("5")
my showDockBadge_("5")
の場合も書き換えられるのだった。なので、>>388で書かなかったのだった
なんかだらだらとすまん

392 :名称未設定:2019/05/13(月) 16:48:50.02 ID:bti+YmC00.net
>>388
早速のレスありがとうございます。
AppleScriptは初心者で変更前のスクリプトもここで助けてもらって書きました。
教えていただいた方法で一歩は進んだのですが、今度はshowDockBadge関数でsetBadgeLabelなんてメッソド無いよみたいなエラーとなりました。
ネットにあったバッジに項目を表示するスクリプトを実行しても同じエラーとなります。AppleScriptのバージョンの問題でしょうかね?
私の環境はMojaveでAppleScriptは2.7です。
・参考にしてるHP
http://piyocast.com/as/archives/914
・HPにあるSampleスクリプトの実行結果
https://i.imgur.com/TP44nM7.png
・修正後の私のスクリプトの実行結果
https://i.imgur.com/0orKTYh.png

393 :名称未設定:2019/05/13(月) 17:35:12.09 ID:mbqTpx2r0.net
最初から参考にしたページ出しとけっちゅーねん毎度毎度

394 :名称未設定:2019/05/13(月) 18:12:17.79 ID:AwyTd4670.net
>>392
とりあえず、Mojaveで問題なく動いている。Mojaveアップデートしてなかったからアップデート中

>setBadgeLabelなんてメッソド無いよみたい
AppleScript実現するための内部オブジェクトに対して isEqualToString: を呼ぼうとしている
本来Objective-Cの文字列クラス(NSString)であるべきインスタンスがなんか違うインスタンス(AppleScript実現するための内部オブジェクト)になっているという。とかなんとか、内部のどこかで
そのAppleScriptではそんなインスタンス間違いしてそうにしそうに見えないけどなあ

395 :名称未設定:2019/05/13(月) 18:41:55.39 ID:AwyTd4670.net
10.14.4 にしてみたが、何も問題なく動いているね。その参考にしてるHPのサンプルは
おま環かなあ。Mac再起動、新しいユーザを作ってそっちでどうなのとかかなあ

396 :名称未設定:2019/05/13(月) 18:42:27.18 ID:bti+YmC00.net
>>394
レスありがとうございます。
お手数おかけしてしまいすみません
原因は不明ですがとりあえず解決しました

誤って、スクリプトエディタを終了してしまったので、再起動して再度実行してみたら、どちらのスクリプトも上手く行きました。
AppleScript奥が深い

397 :名称未設定:2019/05/14(火) 05:30:46.51 ID:cZFEsQrI0.net
このスレってなんでお上品なんだよ?
オッパイとかちんことかまんことか全然出てこないのな
なんなんだよ?
ほんとはそういうの好きなくせに
そうだろ?

398 :名称未設定:2019/05/15(水) 01:54:40.38 ID:ELX00/ds0.net
say "おっぱい" using "Kyoko" volume 1

Otoyaは下手だな"おぱい"

399 :名称未設定:2019/06/18(火) 16:01:33.37 ID:zFJXUthD0.net
質問です
ファインダーのサイドバーに特定のファイルやフォルダを置くコマンドはありますでしょうか
やりたいことは

1. 毎日1個、名前が日付のディレクトリを作る、今日だったら「190618」
2. 最新の日付のフォルダを「today」という名前で参照出来るようにする
3. このtodayフォルダを、ファインダーのサイドバーに置く

です

1と2は以下のシェルをlaunchdで0時に行っています
#!/bin/bash
tmp=`date +%y%m%d` # 日付文字列作る
mkdir "$tmp" # 日付フォルダ作る
unlink ./today # シンボリックリンクtodayをいったん消す
ln -s ./today "$tmp" # 改めて日付フォルダにシンボリックリンク

で、このシンボリックリンクtodayを今は手動でドラッグして
ファインダーのサイドバー、よく使う項目の一番下に置いています

一度置くと暫くは保つのですが、日をまたぐと
サイドバーからtodayが消えてしまうことがしばしば起こります
※消える理由がよくわかっていません
※上記シェルが動いてtodayが更新されるときに、何らかの条件で消える?

ので、明示的&自動的にファインダーのサイドバーに設置したいのですが
やりようはありますでしょうか?

400 :名称未設定:2019/06/18(火) 17:09:40.77 ID:aXQlV97M0.net
こんなような手段 https://macscripter.net/viewtopic.php?id=23636

401 :名称未設定:2019/06/18(火) 18:10:40.02 ID:tu09u4QW0.net
シンボリックリンク削除、作り直しではなくて
ln -nfs
でリンク先を変更したら上手く行かないのかな?

402 :名称未設定:2019/06/18(火) 18:23:28.46 ID:zFJXUthD0.net
>>400
おお
早々にありがとうございます

>>401
fとnオプション知らなかった(*´∀`*)

403 :名称未設定:2019/06/21(金) 00:17:41.23 ID:A429MNsG0.net
UI Scriptingで、手前のアプリのうち、手前になってないWindowを手前にしたい場合はどうすればいいのでしょう?
clickもselectもダメでした

tell application id "com.apple.systemevents"
tell (first application process that frontmost is true)
--↓特定の条件に見合ったウインドウを手前にしたい
tell (first window that name starts with "Google" and subrole is "AXStandardWindow")
click --ダメ
select --ダメ
end tell
end tell
end tell

404 :名称未設定:2019/06/21(金) 00:55:00.86 ID:rNJQTnSo0.net
ちょっと試したところ
perform action "AXRaise"

405 :名称未設定:2019/06/21(金) 02:49:05.98 ID:A429MNsG0.net
それで行けました!
ググったらAXPressとかAXShowMenuとか色々あるんですね
ありがとうございます

406 :名称未設定:2019/07/28(日) 20:54:03.37 ID:coviUxk00.net
質問です

tell application "アプリ名" to activate
tell application "System Events" to key code 53
delay 1
tell application "アプリ名" to quit

上記で、ある特定のアプリをフルスクリーンを解除してから終了させるときに、
フルスクリーンになってる場合だけ、2行目のescを押すようにしたいんだけど、
どう書けばいいでしょうか?

if (現在フルスクリーンの状態←どう書くのかわからない…) then
みたいなので、できますか?

macos10.12

407 :名称未設定:2019/07/28(日) 21:08:36.79 ID:P72Ob8Tn0.net
ウィンドウがフルスクリーンなのかは
tell application "Finder" to set screenBounds to bounds of window of desktop
tell application "なにか"
if bounds of window どれか is screenBounds then
// フルスクリーン
end if
end tell
っていう。どこかで書いてあったのを使ってる

408 :名称未設定:2019/07/28(日) 21:28:12.63 ID:coviUxk00.net
>>407
ありがとうございます
「どれか」っていうのは、アプリ名ですか?

409 :名称未設定:2019/07/28(日) 21:34:58.58 ID:P72Ob8Tn0.net
System Events の process の window だと attribute "AXFullScreen" が状態及びそこを書き換えればいいだけだね
System Events の process の windows は他のスペースやフルスクリーンのが入ってないけど、>>406のようにアクティブにするならこっちの方がかな

tell application "System Events"
tell front window of process "アプリ名"
if value of attribute "AXFullScreen" then set value of attribute "AXFullScreen" to false
end tell
end tell


確認でやった、実行するごとに行き来
tell application "System Events"
tell front window of process "Script Editor"
set value of attribute "AXFullScreen" to not value of attribute "AXFullScreen"
end tell
end tell

>>408
うん

410 :名称未設定:2019/07/28(日) 21:51:01.64 ID:P72Ob8Tn0.net
>>409,408
ああ、「どれか」の方か。違う、どれかのウィンドウ、ウィンドウの番号や名前

411 :名称未設定:2019/07/28(日) 22:02:04.30 ID:coviUxk00.net
試しにテキストエディットでやってみたけど、
全体で、これであってます?

tell application "TextEdit" to activate
tell application "System Events"
tell front window of process "TextEdit"
if value of attribute "AXFullScreen" then set value of attribute "AXFullScreen" to false
tell application "System Events" to key code 53
delay 1
tell application "TextEdit" to quit
end tell
end tell

フルスクリーンの状態で実行したら、以下のエラーが出ました

error "System Eventsでエラーが起きました: window 1 of process ¥"TextEdit¥"を取り出すことはできません。正しくないインデックスです。" number -1719 from window 1 of process "TextEdit"

でもフルスクリーンじゃない状態で実行しても、escが空振りしてる音がするので、たぶん違うんですよね?…

412 :名称未設定:2019/07/28(日) 22:04:07.87 ID:coviUxk00.net
>>410
すみません
初心者過ぎて「ウィンドウの番号や名前」という時点でわからないです…

413 :名称未設定:2019/07/28(日) 22:22:54.68 ID:P72Ob8Tn0.net
>>411
のために、下の Script Editor のを付けたのに...w

>System Events の process の windows は他のスペースやフルスクリーンのが入ってない
からじゃないの
tell application "TextEdit" to activate
を実行して実際にアクティブになるまでは「間」がある。delayでも入れる(本当はちゃんとアクティブになるまでの方がいいが)

if value of attribute "AXFullScreen" then set value of attribute "AXFullScreen" to false
で、フルスクリーンだったらフルスクリーンをやめるなので、
tell application "System Events" to key code 53
はいらない

これでいいんじゃないの
tell application "TextEdit" to activate
delay 1
tell application "System Events"
tell front window of process "TextEdit"
if value of attribute "AXFullScreen" then set value of attribute "AXFullScreen" to false
end tell
end tell
delay 1
tell application "TextEdit" to quit

>>412
ウィンドウは複数ありえあるのでどのウィンドウというのが必要でしょ
順番の番号や名前やidなどで指定する
window 1 とか front window とか window "名称未設定" とか window id "123456" とか

414 :名称未設定:2019/07/28(日) 22:44:09.63 ID:coviUxk00.net
>>413
ありがとうございます
やりたかった動作ができました

>if value of attribute "AXFullScreen" then set value of attribute "AXFullScreen" to false
>で、フルスクリーンだったらフルスクリーンをやめるなので、
>のために、下の Script Editor のを付けたのに...w
そういうことなんですね、意味がわかりました
勉強になります

もっとあちこち検索して勉強します
どうもありがとうございました!

415 :名称未設定:2019/08/04(日) 09:45:26.29 ID:jKsWsrz50.net
情報パネルにある「このアプリケーションで開く」ってAppleScriptで変更するにはどうしたらいいですか?
すべてを変更ではなく指定のアプリのみを変更したいです。
いろいろ回って切り貼りしてこんな風にしてみたのですが

tell application "System Events"
set FilePath to "/Users/user1/Desktop/Photo001.JPG"
set AppName to (path to application "Adobe Photoshop CC 2019") as text
set default application of disk item FilePath to AppName
end tell

どなたかよろしくお願いします。

あと、Automatorでなら一発なのはわかりました。

416 :名称未設定:2019/08/04(日) 10:12:16.05 ID:06lM6iV50.net
こんなんで出来ちゃったぽいけど
set aFile to (((path to desktop) as string) & "test.txt") as alias
set anApp to path to application "CotEditor"
tell application "System Events"
set default application of aFile to anApp
end tell

417 :名称未設定:2019/08/04(日) 11:09:27.69 ID:jKsWsrz50.net
ありがとうございます!
やっぱり変数の型とかの問題ですかね。よく理解しないまま試行錯誤してもうまくいかないですね
たすかりました

418 :名称未設定:2019/08/23(金) 08:36:05.82 ID:WiRlxCdl0.net
Numbersの日付時刻のフォーマットを変更したいのですが、ググってもなかなか見つけられません、できないもんでしょうか?

419 :名称未設定:2019/08/23(金) 08:44:50.96 ID:v+hKUxy00.net
結局システム環境設定の書式と連動してんじゃないの
調べてないけど

420 :名称未設定:2019/08/23(金) 12:50:16.09 ID:su+ym9RY0.net
カスタムフォーマット使えばシステム環境設定の書式を外れてわりと自由にかな
だがしかし、Numbers 5.1 だとカスタムフォーマットを指定すると取得すらできないので、カスタムフォーマットがAppleScriptに対応してないぽい

新し目最新だとどうなのかなあ
tell application "Numbers"
format of cell "A1" of table 1 of sheet 1 of document 1
end tell
でエラらなきゃ対応してる=できるんじゃないのかな。カスタムフォーマットを作るもあるが、対応してなきゃ一度Numbersで手動で作っておいてでも

421 :名称未設定:2019/08/26(月) 08:01:27.03 ID:8zmCsz9X0.net
ありがとうございます。
試してみます。

422 :名称未設定:2019/08/26(月) 19:08:45.07 ID:C4Wo5j3h0.net
試してみました、標準の日付と時刻を選択して実行すると【date and time】が出力されますが、
カスタムフォーマットを設定して実行すると【"Numbersでエラーが起きました: AppleEventのハンドラで誤りが起きました。" number -10000】となってしまいました。
yyyy/MM/dd hh:mm:ss を設定したいだけなのに・・・残念です。

423 :名称未設定:2019/11/05(火) 21:39:48.23 ID:Vcy9rGGf0.net
スクリプトをアプリケーションとして保存して
補助のシェルスクリプトをアプレット内に一緒に格納する場合
パスをどのように書けばいいんでしたっけ?
確か出来たと思うんですが見つかりません、よろしくお願いします

424 :名称未設定:2019/11/05(火) 22:25:59.50 ID:Vcy9rGGf0.net
& POSIX path of (path to me) & "Contents/Resources/abc.sh

すいません、これで出来ました。
もっとシンプルに出来た気がしたんですが思い違いだったのかな?

425 :名称未設定:2019/11/05(火) 22:46:49.96 ID:XHVSwj5L0.net
path to resource "abc.sh"
で、Resoucesの下を探してあったら返してくれる

426 :名称未設定:2019/11/06(水) 00:00:21.25 ID:Z4lzSU3E0.net
>>425
ありがとうございます!
でも何故か「リソースが見つかりませんでした。」となってしまう
なんでだろう? ちょっと悩んでみます

427 :名称未設定:2019/11/06(水) 00:07:10.83 ID:Z4lzSU3E0.net
あっ、出来ました!
ありがとうございました

428 :名称未設定:2019/11/08(金) 11:41:22.05 ID:u7OnL8t/0.net
AppleScriptObjCで、独自のcompare:メソッドを持ってNSMutableArrayのsortUsingSelector:"compare:"でソートできる
NSObjectサブクラスを作れないかなと思ったのですが、下記を実行すると
-[NSObject compare:]: unrecognized selector sent to instance 0x600003f81d60
というエラーになってしまいます。
MyObjectのインスタンスの作り方が悪いのかなという気もしますが、どう変えればいいのかどなたか分かりませんでしょうか?

use framework "Foundation"
script MyObject
property parent : class "NSObject"
on compare:other
return (current application's NSOrderedSame)
end compare:
end script

set myObj to (my MyObject)'s new
myObj's compare:1

429 :名称未設定:2019/11/09(土) 08:03:40.24 ID:tAjv1YLo0.net
可能ならスクリプトオブジェクトから出してみたら?
前にdelegateメソッド使おうと、それと似たように書こうとして上手く行かず、結局メインスクリプトにメソッド直書きして使ってる

430 :名称未設定:2019/11/09(土) 12:45:17.13 ID:rGyy4J8Y0.net
XcodeでのAppleScriptObjCでも、
set myObj to (my MyObject)'s new
myObj's className は NSObject で、適正なクラスのインスタンスは作られてない(ある意味なんでやねんだけど)
set myObj to current application's NSClassFromString("MyObject")'s new
だと、className はちゃんと MyObject になっている

Script Editor でだと NSClassFromString("MyObject") は NULL でそんなクラス知らんがな的な
Objective-C と AppleScriptObjC のクラス書き換え簡単だよ説明は Xcode ででしかないかなあ、スクリプトとの結合依存関係ブリッジ加減(?)は難しいだろうからしょうがないとか?

431 :名称未設定:2019/11/09(土) 22:16:53.21 ID:yYy5/yUz0.net
無理矢理に Script Editor で NSObjectのサブクラスを作ってインスタンスを作る方法

NSObjectのサブクラスを別のファイルにして、フォルダに収める(バンドルにする。スクリプトバンドルではない)
MyAppleScriptObjCClasses.bundle
- MyAppleScriptObjCClasses.scpt
もしくは
MyAppleScriptObjCClasses.bundle
- Contents
-- Resources
--- MyAppleScriptObjCClasses.scpt
(Bundleとしては下の方がそれっぽいが、面倒だったら上でも可)

(current application's NSBundle's alloc()'s initWithPath:"/path/to/MyAppleScriptObjCClasses.bundle")'s loadAppleScriptObjectiveCScripts()

を呼べば、読み込まれて、NSObjectのサブクラスと認識される。ので、
current application's NSClassFromString("MyBundledSubClass")'s new()
でインスタンスが作れ、以後いろいろできる

だが、一度実行すると2度目はない。再実行は Script Editor は終了(クラッシュ)するので、再度 Script Editor を起動しての
Script Editor では AppleScriptObjCでのサブクラスの作成は対応してない、ありものをいろいろ使えるのが便利ってとこかな

432 :名称未設定:2019/11/09(土) 22:19:33.59 ID:yYy5/yUz0.net
ああ、拡張子 .bundle でなくてもいいよ
Finderでも見た目フォルダのままの特に決まった拡張子を付けてない単なるフォルダでも

433 :名称未設定:2019/11/09(土) 23:23:17.18 ID:ys/xCavs0.net
NSBundle loadAppleScriptObjectiveCScripts
を使ってのはいちおう正規かな。Script Editor で使って作っても問題はないかな
unload もしくは reload することは想定していず、プロセスとしては一度きり=2度目はクラッシュというだけの

一度呼ぶだけでは Script Editor はクラッシュしないし、Script Editor での全然関係ない別のスクリプトでもロードされたサブクラスは使えるってとこから

434 :名称未設定:2019/11/10(日) 00:21:47.06 ID:llER4Nxu0.net
ああ、そもそも NSBundle でバンドルをロードすること自体が Script Editor で想定してないサポートされてないのかな??
NSBundle initWithPath:
自体が1度きりのような??

435 :名称未設定:2019/11/10(日) 03:42:31 ID:e0I7Oe/u0.net
>>428 ですが皆様ありがとうございます。とても勉強になりました。
私のほうでも色々やったので、長くなりますが書いておきます。

元々やろうとしたことは、単にstringのlistを、数字表記を考慮して(ObjC的に言うとNSCaseInsensitiveSearch,NSNumericSearchで)ソートしたいだけでした。
が、そもそもAppleScriptって他の言語にある、2要素の比較ロジックだけを自作して配列をソートさせる手段が用意されてなさそうなので、同じような汎用ソート処理が作れないかなと思って>>428に至っていたところでした。

で、新規インスタンスを作る方法ですが
https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/conceptual/ASLR_script_objects.html
のInitializing Script Objectsにあるようなハンドラで返す方法にすれば、とりあえず作れてるような動きにはなりました。
compare:も呼べました。(compare:内でエラーになりますがそれはまた別の話…)

use framework "Foundation"
on makeMyObject()
script MyObject
property parent : class "NSObject"
on compare:other
return (current application's NSOrderedSame)
end compare:
end script
end makeMyObject

set myObj to makeMyObject()
log (current application's NSString's stringWithFormat_("%@", myObj)) as string --※A
myObj's compare:1

436 :名称未設定:2019/11/10(日) 03:43:14 ID:e0I7Oe/u0.net
教えて頂いたloadAppleScriptObjectiveCScriptsですが、私の環境(macOS 10.14.6)ではクラッシュしませんした。

use framework "Foundation"
-- bundle内のMyObject.scptには上記のscript MyObject〜end scriptだけ書いてある
set bundle to current application's NSBundle's bundleWithPath:"/path/to/MyObject.bundle"
bundle's loadAppleScriptObjectiveCScripts()

set myObj to current application's MyObject's new()
log (current application's NSString's stringWithFormat_("%@", myObj)) as string --※B
myObj's compare:1

気になった点として※Aのlogだと
<BAGenericObject @0x6000034ebe60: OSAID(2) ComponentInstance(0x820008)>
となるのに対し、※Bのlogだと
<MyObject @0x6000034fc140: OSAID(6) ComponentInstance(0x82000a)>
となります。全く同じ内容のscript objectでも、スクリプトエディタで書いた場合は内部的には別物のようですね。
(ちなみに、一度loadAppleScriptObjectiveCScriptsしてしまうと、スクリプトエディタを再起動するまで※Aの方も※Bと同じlog内容になるので、注意が必要)

437 :名称未設定:2019/11/10(日) 03:44:18 ID:e0I7Oe/u0.net
で次にNSMutableArrayでのソートですが、以下のように書いてみましたが、※Cと※Dのlogが全く同じなので、sortUsingSelector:が動作してくれていないようでした。
SortElementを外部に書いてloadAppleScriptObjectiveCScriptsする方法でも試してみましたが、ソートされないという点は同じでした。

sort_list({"BBBBB", "Z", "QQQ", "EE", "AAAAAAA"})

use framework "Foundation"
on makeSortElement(val)
script SortElement
property parent : class "NSObject"
property rawValue : val
on compare:other
--文字数の短い順でソートするようにしてみる
set l to count of rawValue
set r to count of (other's rawValue)
if l = r then return (current application's NSOrderedSame)
if l < r then return (current application's NSOrderedAscending)
return (current application's NSOrderedDescending)
end compare:
end script
return SortElement
end makeSortElement

438 :名称未設定:2019/11/10(日) 03:44:50 ID:e0I7Oe/u0.net
--続き
on sort_list(in_list)
--NSMutableArray<SortElement>を作成
set ns_arr to current application's NSMutableArray's arrayWithCapacity:0
repeat with v in in_list
(ns_arr's addObject:(my makeSortElement(v)))
end repeat
--ソート
log (current application's NSString's stringWithFormat_("%@", ns_arr)) as string --※C
ns_arr's sortUsingSelector:"compare:"
log (current application's NSString's stringWithFormat_("%@", ns_arr)) as string --※D
--元の要素のlistに戻してreturn
set out_list to {}
repeat with se in (ns_arr as list)
set end of out_list to contents of se's rawValue
end repeat
return out_list --順番が変わってない
end sort_list

439 :名称未設定:2019/11/10(日) 03:46:21 ID:e0I7Oe/u0.net
結局、独自のcompare:でソートできないかという試みはもう疲れたので、この辺でやめておき、
AppleScriptでクイックソートするコードを拾ってきて、比較の部分だけハンドラに出しておくという方法にしました。
is_equalとis_ascendingのハンドラを書き換えれば何でも好きなようにソートできるはずです。

script quicksort
on do(_list)
if (count of _list) ≤ 0 then return _list
sort(_list, 1, count of _list)
return _list
end do
----------http://www.codecodex.com/wiki/Quicksort#AppleScript
on sort(_array, _left, _right)
set i to _left
set j to _right
set v to item ((_left + _right) div 2) of _array --pivot
repeat while (j > i)
--repeat while (item i of _array < v)
repeat while is_ascending(item i of _array, v)
set i to i + 1
end repeat
--repeat while (item j of _array > v)
repeat while is_descending(item j of _array, v)
set j to j - 1
end repeat
if (not i > j) then
tell _array to set {item i, item j} to {item j, item i} --swap
set i to i + 1
set j to j - 1
end if
end repeat

440 :名称未設定:2019/11/10(日) 03:47:01 ID:e0I7Oe/u0.net
--続き

if (_left < j) then sort(_array, _left, j)
if (_right > i) then sort(_array, i, _right)
end sort
on is_descending(_left, _right)
return (not is_equal(_left, _right)) and (not is_ascending(_left, _right))
end is_descending
----------通常の比較処理
(*on is_equal(_left, _right)
return _left = _right
end is_equal
on is_ascending(_left, _right)
return _left < _right
end is_ascending*)
----------文字列のNSCaseInsensitiveSearch,NSNumericSearchでの比較処理
use framework "Foundation"
on is_equal(_left, _right)
return string_compare(_left, _right) is (current application's NSOrderedSame)
end is_equal
on is_ascending(_left, _right)
return string_compare(_left, _right) is (current application's NSOrderedAscending)
end is_ascending
on string_compare(_str, _other)
set opt to (current application's NSCaseInsensitiveSearch as integer) + (current application's NSNumericSearch as integer)
return (current application's NSString's stringWithString:_str)'s compare:_other options:opt
end string_compare
end script

quicksort's do({"a20", "A2", "A100", "a3"}) --→{"A2", "a3", "a20", "A100"}

441 :名称未設定:2019/11/10(日) 11:26:12.79 ID:llER4Nxu0.net
BAGenericObjectの場合、compare: に入ってきてなくない?
セレクタの存在チェックはしているが、呼んではいない返り値はmissing valueというナゾな動きのような、引数ありセレクタの場合
on foo()
return "HOGE"
end hoge

on bar:baz
return "BARBAZ"
end bar:

という単純なメソッド追加して、
(ns_arr's objectAtIndex:0)'s foo()
(ns_arr's objectAtIndex:0)'s bar:"baz"
と単純に呼んでも。んー??

MyObjectの場合、rawValue に入っているのが AppleScriptの(文字列クラス)オブジェクト ではないっぽい(NSTaggedPointerString?)
try
on error
end try
で囲むと count of で実行エラーが発生してるかな。Can’t get «class ocid» id «data ていう
途中で実行中止してるのになんでスルーやねんだけど

set l to count of (rawValue as text)
set r to count of (other's rawValue as text)
で求めた結果にはなるねえ

やっぱ Script Editor での NSObject のサブクラスはナゾが多いわな
(JXAだと、sortedArrayUsingComparator: が使えてサブクラス作る必要もないんだけどね、ソートだけなら。いかんせん、AppleScriptと相互にとかできねーけど)

442 :名称未設定:2019/11/10(日) 11:36:45.20 ID:llER4Nxu0.net
ああ、JavascriptだとデフォでArray.prototype.sort()があったか

443 :名称未設定:2019/11/10(日) 11:44:22.10 ID:llER4Nxu0.net
ああ、NSTaggedPointerString = NSString か
リアルNSObjectのインスタンス内へなので、第乳児に暗黙的にNSStringに変換という、まあ、そうなっても不思議ではないってとこか

444 :名称未設定:2019/11/10(日) 11:46:28.69 ID:llER4Nxu0.net
第乳児...なんやねんw。代入時
だらだらと、すまん。おわりおわりw

445 :名称未設定:2019/11/14(木) 03:30:22 ID:o1jiInHj0.net
>>436
AppleScriptでのインスタンスの生成だとObjCのオブジェクトではなくてあくまでもAppleScriptのscript object «script SortElement»ができているだけだね
script objectをObjCのAPIに渡すときにブリッジオブジェクトBAGenericObjectに変換されている
変換時にObjCのMyObjectクラスが認識できないから適当もしくは中途半端なObjCのブッリッジクラスのインスタンスができてる感じかな

446 :名称未設定:2019/11/14(木) 13:18:41.43 ID:Vr2Aed230.net
https://dotup.org/uploda/dotup.org1993659.jpg

メニューバーのこの「iPad Pro」をクリックするアップルスクリプトを教えてください

447 :名称未設定:2019/11/14(木) 13:54:16.45 ID:pcy7Pjtv0.net
こんな感じ?
tell application "System Events"
tell application process "SystemUIServer"
tell menu bar 1
tell item 1 of (every menu bar item whose accessibility description is "“ディスプレイ”メニュー")
click
delay 0.2
click menu item "iPad Pro" of menu 1
end tell
end tell
end tell
end tell

448 :名称未設定:2019/11/14(木) 14:19:33.37 ID:Vr2Aed230.net
>>447
https://dotup.org/uploda/dotup.org1993676.jpg
こうなってしまいますね
アイコンの名前はもしかしたらAirPlayかもしれないです

449 :名称未設定:2019/11/14(木) 15:59:50.15 ID:F3fMWxRM0.net
横から

is "“ディスプレイ”メニュー"

contains "ディスプレイ"

450 :名称未設定:2019/11/20(水) 09:40:00.58 ID:C7VATYi90.net
>>449
実行してみるとやはりこう言うエラーが出てしまいます
https://dotup.org/uploda/dotup.org1997888.jpg

451 :名称未設定:2019/11/20(水) 15:25:51.92 ID:Mak1iuzW0.net
tell application "System Events"
tell process "SystemUIServer"
menu bar 1's menu bar items's attribute "AXDescription"'s value
end tell
end tell

いま、ミラーリング使える環境にいないのでわかんないけど
上の奴実行するとメニューエクストラのアイテム名がわかる

452 :名称未設定:2019/11/20(水) 15:40:58.14 ID:Mak1iuzW0.net
あー、画像みると
click menu item "iPad Pro" of menu 1
のところがハイライトされてるからエラーが起きてるのそこだね
click menu item 5 of menu 1
とか書き換えてみる

453 :名称未設定:2019/11/23(土) 18:49:42.33 ID:DZHL0hyg0.net
超初心者でネット見ながら勉強中です。
とりあえずロト7の番号生成スクリプト(1〜37の数字からランダムに7つの数字を抽出)をなるだけ簡潔に作ろうと以下のようにしてみたのですが、もっとシンプルにできるでしょうか?
また、数字のリストを小さい順にソートするにはどうすればいいでしょうか?
よろしくお願いします。

set {num, numList} to {0, {}}
repeat 39 times
 set numList to numList & num
 set num to num + 1
end repeat

set selectNumList to {}
repeat 7 times
 set num to num - 1
 set randomNum to random number from 2 to num
 set selectNum to item randomNum of numList
 set selectNumList to selectNumList & selectNum
 set numList to (items 1 thru (randomNum - 1) of numList) & (items (randomNum + 1) thru -1 of numList)
end repeat

return selectNumList

454 :名称未設定:2019/11/23(土) 21:21:22.91 ID:T4pLpryV0.net
ソート部分はとりあえずJavaScriptでw

on sortNumList(numList)
set currASTID to AppleScript's text item delimiters
set AppleScript's text item delimiters to ","
set numList to numList as string
set AppleScript's text item delimiters to currASTID
run script "numList = [" & numList & "]; numList.sort((a, b) => a - b)" in "JavaScript"
end sortNumList

としといて、
my sortNumList(selectNumList)
とか

455 :名称未設定:2019/11/23(土) 23:20:28.56 ID:oW3zFR9P0.net
単に行数少ないアルゴリズム的には工夫もなんもないよ版

use framework "Foundation"
use scripting additions

set theNumbers to {}
repeat while (count of theNumbers) is not 7
set theNumber to random number from 1 to 37
if theNumber is not in theNumbers then set theNumbers to theNumbers & {theNumber}
end repeat

set sortedNumbers to ((current application's NSArray's arrayWithArray:theNumbers)'s sortedArrayUsingSelector:"compare:") as list

37のうちの7だとダブる確率は少ない初期化の39(37でいいんじゃないの?)ループ無いぶん速い場合もあるかな。速度は不定でもあるし元々のようなのを考えるけど

456 :名称未設定:2019/11/24(日) 15:51:03.91 ID:alTbaGem0.net
>>454
>>455
おー、なるほど。さすがにここの方々はお詳しいですね。ほんと勉強になります。
ありがとうございました!

457 :名称未設定:2019/11/28(木) 15:43:44.30 ID:KGTFiqUA0.net
なーんかいつの間にかFinderでレインボーカーソル出ることが多くなったなーと思ったらフォルダアクション設定したせいだった
フォルダ5つぐらいにごく短いスクリプト割り当てただけだったんだけど
ゴミ箱に割り当てたせいかな

458 :名称未設定:2019/11/28(木) 16:01:29.06 ID:T72ZmuSy0.net
因果関係は知らんけど、ゴミ箱はログイン時に作り直されることがあるからあんまよくないんじゃないの

459 :名称未設定:2019/12/11(水) 20:59:41.50 ID:WbxCu4h80.net
pathcontrolの使い方がわかりません。
解説ページなどあれば紹介していただきたいので、よろしくお願いいたします。

460 :名称未設定:2019/12/11(水) 21:18:49.30 ID:CgOE9puJ0.net
なんのこっちゃと思ったらCocoaの?(NSPathControl)
だとしたら、
AppleScript pathcontrol
でググったのでいいんじゃないの。ある意味お馴染みのサイトの

461 :名称未設定:2019/12/12(木) 22:37:35.22 ID:tfaxyOsK0.net
保存しておいたファイルパスがquoted formのPOSIX pathでした。
非quoted formならHFS形式に直せるのですが、quoted formだとうまく直せません。
方法はありますか?

462 :名称未設定:2019/12/12(木) 22:54:13.61 ID:TJMsdlxn0.net
もっといい方法ありそうな気もするけど

set quoted_path to quoted form of "/Users/ore/Desktop/ab'cd"
set posix_path to (do shell script "dirname " & quoted_path) & "/" & (do shell script "basename " & quoted_path)
log (posix_path as POSIX file)

463 :名称未設定:2019/12/12(木) 23:09:04.66 ID:tfaxyOsK0.net
>>462
できました!
ありがとうございます!

464 :名称未設定:2019/12/27(金) 11:35:13.67 ID:I6nW7LYs0.net
宛名職人と連絡先.appを同期したら
佐藤 太郎 様
鈴木 次郎 様
山田 花子 先生
と言った感じで全てに敬称が付与されてしまいました。
そこでAppleScriptで削除を試みるもうまく動きません。

tell application "Contacts"
set theList to selection
repeat with i in theList
set suffix of i to missing value
end repeat
end tell

値としては取れているし、実際値も変更されているようなのですが、
アプリケーション上の表記が変更されない状況です。
何か間違ってます?

465 :名称未設定:2019/12/27(金) 12:18:18.28 ID:LsMuj50Q0.net
save を入れる必要あるみたいよ

466 :名称未設定:2019/12/27(金) 14:32:25.72 ID:I6nW7LYs0.net
>>465
消せました。ありがとう。

467 :名称未設定:2019/12/30(月) 18:44:59.16 ID:1IerWe6O0.net
質問失礼致します。
Chromeのとあるサイトに画像のアップロードを自動化したいのですが、画像アップロードボタンをクリックすると画像選択ダイアログが表示されるのですが、これはどうやって操作すれば良いのでしょうか?

468 :名称未設定:2019/12/30(月) 20:40:49.30 ID:FYTkl10n0.net
set filePath to "/Users/yourname/Desktop/hoge.png"

tell application "System Events" to tell process "Chrome"
set openDialog to a reference to sheet 1 of front window
set openButton to a reference to button 1 of openDialog
set gotoFolderDialog to a reference to sheet 1 of sheet 1 of front window
set goButton to a reference to button 1 of gotoFolderDialog
repeat while not (exists openDialog)
delay 0.1
end repeat
keystroke "/"
repeat while not (exists gotoFolderDialog)
delay 0.1
end repeat
set value of combo box 1 of gotoFolderDialog to filePath
click goButton
repeat while (exists gotoFolderDialog) or not enabled of openButton
delay 0.1
end repeat
click openButton
end tell

469 :名称未設定:2019/12/31(火) 08:06:23.74 ID:M2yPiiu20.net
アプリ形式で保存したスクリプトのpropertyが保存されないのがあるのはなんなんなん

470 :名称未設定:2019/12/31(火) 12:25:52.53 ID:pH0B5LMq0.net
>>469
アプリ形式で保存したあと、そのアプリのパッケージを開いて
main.scptを直接修正するとダメになった経験が…

自分の場合、アプリ実行時に読み込むファイルを、
シンボリックリンクの形で
パッケージ内のResourcesに置いているケースで、
main.scptを直接修正すると、毎回この状況になる

大もとのスクリプトの名前を変えて、
新規にアプリ形式で保存し直すとなおる
(同じ名前で.appを作り直すとダメだった)

471 :名称未設定:2020/01/05(日) 14:10:06.50 ID:hVEfgoTG0.net
>>470
> main.scptを直接修正する
特にそういうことはしてなかったんですけどねー と、思ったけど自分で作ったサービスから、
do shell script "open -b 'com.apple.ScriptEditor2' " & |スクリプトへのパス|
で開いてたのでもしかするとそれが悪さしてたのかも…

> 新規にアプリ形式で保存し直すとなおる
> (同じ名前で.appを作り直すとダメだった)
これで治りました(&確かに同じ名前だと治らない)
ありがとうございます

472 :名称未設定:2020/01/05(日) 21:14:45.75 ID:pcMnH8Hm0.net
お前ら、なんでそのアプリをスクリプトエディタで開いて直さないの

473 :471:2020/01/06(月) 00:23:01.47 ID:FpKUEwtY0.net
アプリだからダブルクリックだと実行になっちゃうし、「このアプリケーションで開く」も使えない。
ドラッグアンドドロップはちょっと面倒。なのでAutomatorでサービスを作った。

on run {input, parameters}
tell application id "com.apple.finder"
repeat with i in input
try
set i to (original item of i) as alias
end try
if (name of i) ends with ".app" then
set bundle_id to (id of i)
set i_path to (quoted form of (POSIX path of i))
if bundle_id starts with "com.apple.ScriptEditor.id." then
do shell script "open -b 'com.apple.ScriptEditor2' " & i_path
else if bundle_id starts with "com.apple.automator." then
--tell application id "com.apple.Automator" to open i --書いてあるだけでAutomatorが起動してしまう
do shell script "open -b 'com.apple.Automator' " & i_path
end if
end if
end repeat
end tell
return 0
end run

474 :名称未設定:2020/01/06(月) 01:14:49 ID:jkH1ijcX0.net
ドラッグアンドドロップはちょっと面倒って発想はあんまなかったな

ファイルまたはフォルダ 検索対象: Finder.app
Finder項目を開く
このアプリケーションで開く: スクリプトエディタ.app

の1アクションだけでいいような

なだけならアレなので、AppleScriptアプリケーションだけにするフィルタ AppleScriptを実行 アクションを Finder項目を開くの前にとか。無くても開けないフォルダやファイル指定されてもスクリプトエディタでエラーになるだけだけど
いや、このままだと、scptもscpdもapplescriptも同じく開けるからこのままでいいかw

475 :名称未設定:2020/01/06(月) 02:01:13 ID:jkH1ijcX0.net
on run {input, parameters}
set theResult to {}
tell application "Finder"
repeat with theItem in input
if kind of theItem is "Script bundle" or ¬
(kind of theItem is in {"Application", "Script", "Text"} and creator type of theItem is in {"aplt", "ToyS"}) then set end of theResult to theItem as alias
end repeat
end tell
return theResult
end run

Script bundle は AppleScript の scpd ぐらいだろう、たぶん
app は aplt、scp 及び applescript は Toys、creatorはcreatorは無くすとかあったから怪しいけど

476 :名称未設定:2020/01/06(月) 09:34:31.52 ID:bPekrp180.net
>>472
自分の場合は、アプリ形式で保存したものを
スクリプトエディタで開けるの知らなかった…

だから、Finderで.appを選択した状態で実行すると、
.app/Contents/Resources/Scripts/main.scpt
を開いてくれるAutomatorのサービス作って、
それ使って開いてました…

477 :名称未設定:2020/01/06(月) 13:44:37.41 ID:BPSQGBVw0.net
> 自分の場合は、アプリ形式で保存したものを
> スクリプトエディタで開けるの知らなかった…
先入観ってやつだな

アプリケーションをダブルクリックで開けることを知らない人もいる
DockかLaunchPadからしか開けないと思ってたらしい

478 :名称未設定:2020/01/10(金) 00:49:21.46 ID:F6V63bMg0.net
最近になってXCodeを使い始めました。
ところが単純なPOSIX path変換がうまくいきません。
set aFile to POSIX file aPath
みたいなものなんですが。

479 :名称未設定:2020/01/10(金) 01:49:00.77 ID:B5706WgS0.net
XcodeのAppleScript Appでは、
POSIX file "POSIX形式ぱすぅ"
alias "HFS形式ぱすぅ"
文/コマンドは「使えない」かな。返ってくるオブジェクトがなんにもできないscriptオブジェクト
"POSIX形式ぱすぅ" as POSIX file
"HFS形式ぱすぅ" as alias
で、いつも通りのオブジェクト(file, alias)になるので、以後いつも通りいろいろ

480 :名称未設定:2020/01/10(金) 08:55:41.20 ID:F6V63bMg0.net
ありがとうございます!

481 :名称未設定:2020/01/23(木) 19:27:00 ID:IJm3Un4C0.net
Safariネタから。QRコードはmacOS 10.10から対応してるやん、めっちゃ簡単やん、一つの画像に複数あってもでめっちゃ賢いやん

use framework "Foundation"
use framework "CoreImage"

set imageDataList to {}
repeat with theItem in current application's NSPasteboard's generalPasteboard's pasteboardItems
set imageData to (theItem's dataForType:"public.png")
if imageData is missing value then set imageData to (theItem's dataForType:"public.tiff")
if imageData is not missing value then set end of imageDataList to imageData
end repeat

set messages to {}
set theDetector to current application's CIDetector's detectorOfType:(current application's CIDetectorTypeQRCode) context:(missing value) options:(missing value)
repeat with theItem in imageDataList
set theImage to (current application's CIImage's imageWithData:theItem)
if theImage is not missing value then
repeat with theItem in (theDetector's featuresInImage:theImage)
set end of messages to (theItem's messageString() as text)
end repeat
end if
end repeat
messages

とりあえず、クリップボードにコピられた画像から
で、Automatorでサービス作れるやんと思ったら、イメージデータを渡してくれるのは無かったのだった

482 :名称未設定:2020/01/24(金) 22:47:27 ID:7gY887yl0.net
QR作成
https://i.imgur.com/c2vZteK.png

483 :名称未設定:2020/01/25(土) 02:27:19 ID:1fVv5LlJ0.net
なるほどw

484 :名称未設定:2020/01/31(金) 13:37:19.07 ID:hSNWYVwE0.net
Xcodeでbuild settingをreleaseにしても、スクリプトが実行専用になりません。
どこかに設定とかありますか?

485 :名称未設定:2020/01/31(金) 14:59:25 ID:YQASqwBw0.net
プロジェクトのオプションにSave as Execute-Onlyがある。デフォルトでReleaseもNoなのでYesに

Project Navigator (View > Navigators > Show Project Navigator) で、プロジェクト選んで、PROJECT か TARGET 選んで、Build Settings を選ぶ
Save as Execute-Only で検索/絞り込みする。OSA Compile のオプションなので、osa で検索/絞り込みでもいい

486 :名称未設定:2020/01/31(金) 16:22:35 ID:hSNWYVwE0.net
ありがとうございます。
大変助かりました。

487 :名称未設定:2020/02/01(土) 18:48:04 ID:6o+Qiku40.net
に読みがなを手作業で付ける必要に迫られて、Jedit-Xにそんなメニューがあったなと思い出し、
久々に書いてみた。なんかもっと上手い手段もありそうだけど。
to Kanji2Kana(str)
set repList to {{"一", "いち"}, {"二", "に"}, {"三", "さん"}, {"四", "よん"}, {"五", "ご"}, ¬
{"六", "ろく"}, {"七", "なな"}, {"八", "はち"}, {"九", "きゅう"}, {"十", "じゅう"}}
set {workspace, myLF} to {"作業場", ASCII character (10)}
tell application "Jedit X"
if (not (document workspace exists)) then
set name of (make new document with properties {encoding:"Unicode (UTF-8)"}) to workspace
tell window workspace to set bounds to {0, 0, 400, 100}
end if
tell document workspace
set selected text to str
kanji to yomi
repeat with i in repList
if (item 1 of i is in selected text) then replaceAll string item 1 of i to item 2 of i
end repeat
set yomi to selected text
set selected text to ""
end tell
end tell
return yomi
end Kanji2Kana

488 :名称未設定:2020/02/02(日) 03:03:52 ID:mWTQTSzg0.net
>>487
うちの環境だと、
tell document workspace を
tell document 1 にしないと動かなかったです

あと、repeatの部分は、漢数字を含む場合に

set sList to {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十"}
set rList to {"いち", "に", "さん", "よん", "ご", "ろく", "なな", "はち", "きゅう", "じゅう"}
multiReplace strings sList to rList

って書くと一発で終わっていいかも…
(multiReplace はJedit Xのコマンド)

ところで、to Kanji2Kana(str) なんて書き方ができるんですね
on Kanji2Kana(str) しか知らなかったです

489 :名称未設定:2020/02/02(日) 15:07:49 ID:yRK9DEd+0.net
>>488
検証ありがとうございます。なにぶんJeditのscriptは初めてなもんで、
multiReplaceとか見落としてました。
toはなんかクセで書いちゃいますね。

490 :名称未設定:2020/02/08(土) 15:39:29.23 ID:Vxob91U30.net
Script editorではread命令の引数にPOSIX pathを使えるが、XcodeではHFS pathでなければならない。
正しいでしょうか?

491 :名称未設定:2020/02/08(土) 16:48:55.44 ID:Tx4PMeh20.net
アップルに聞け
仕様の細かいとこが重要なら

492 :名称未設定:2020/02/08(土) 19:01:54 ID:Ugr8AgWU0.net
>>491
何で倒置法なの?

493 :名称未設定:2020/02/08(土) 19:03:35 ID:Ugr8AgWU0.net
仕様の細かいとこが重要ならアップルに聞け

の方が良くない?

494 :名称未設定:2020/02/09(日) 00:01:17 ID:qoXdz+Pj0.net
キモ

495 :名称未設定:2020/02/09(日) 00:09:45 ID:qoXdz+Pj0.net
>>490
readって?
read v : Read data from a file that has been opened for access
のこと??

496 :名称未設定:2020/02/09(日) 00:54:29 ID:Rj6imeeY0.net
そうです。

497 :名称未設定:2020/02/09(日) 01:04:08 ID:ttHO+gbo0.net
read自体にパスは関係ないでしょ??
というのは置いていおいて、XcodeでもPOSX pathでもHFS pathでもどっちでもだけど
open for access "POSIX/path"
open for access ":HFS:path"
open for access ("POSIX/path" as POSIX file)
open for access (":HFS:path" as alias)
Xcodeでもどれでもオッケーのようだけど

XcodeのはどっちかというとPOSIXが良くてHFSがダメなのがあったような気がしないでもない

498 :名称未設定:2020/02/09(日) 01:17:40 ID:ttHO+gbo0.net
使ったことがない知らない使い方
read (alias, file)
なんてあるみたいだけど、動くのか??エラるだけだけど

set fileRef to open for access (path string, alias, file)
read fileRef
close access fileRef
での話ね>>497

499 :名称未設定:2020/02/09(日) 01:42:57 ID:ttHO+gbo0.net
>使ったことがない知らない使い方〜エラるだけだけど
暗黙的の opened for access な file reference number が使われるのね。なんらかのタイミングで開きっぱの場合にファイル終端のままでエラるのか

>>497
>read自体にパスは関係ないでしょ??
なんぞをなかったことに

で、Xcodeでも
read "POSIX/path"
でも読めるねえ

500 :名称未設定:2020/02/09(日) 10:15:16.24 ID:Rj6imeeY0.net
>>497

ありがとうございます。
おまかんなのかもしれません。

>XcodeのはどっちかというとPOSIXが良くてHFSがダメなのがあったような気がしないでもない

そう思っていたらエラーに見舞われたので確認したのですが、思い違いだったかもしれません。

501 :名称未設定:2020/02/09(日) 10:24:00.99 ID:Rj6imeeY0.net
>>498
>read (alias, file)
>なんてあるみたいだけど、動くのか??エラるだけだけど

経験的には、一度もopen accessしていないファイルならいけたような。
一度open accessすると、そのアプリからそのファイルはopen accessがないと読めなくなります。
アプリを再起動すると、open accessなしでもreadできるようになります。
システムのバージョンとかにもよるかもしれませんので、間違っていたらご容赦。

502 :名称未設定:2020/02/09(日) 14:36:08 ID:teDSMg7h0.net
エラるメッセージが ファイルの最後やで だったので、よくわからんが面倒だから
try
close access (path string, alias, file)
end try
と最初にやってしまえば読めるようにはなったことはなったかな

503 :名称未設定:2020/02/09(日) 23:55:57 ID:Rj6imeeY0.net
なるほど。
すると

>>501
>一度open accessすると、そのアプリからそのファイルはopen accessがないと読めなくなります。

というのは、何らかのミスでcloseできなかった開きっぱなしのファイルだった可能性もあるかも。

504 :名称未設定:2020/03/04(水) 14:29:38.48 ID:OV73e7Nn0.net
>>490
read コマンドはスクリプティング機能追加のコマンドだから、AppleScript を実行するアプリケーションには関係ないはず。

505 :名称未設定:2020/03/10(火) 08:26:34.15 ID:AczjZNiX0.net
同じコマンドでもASOCかそうでないかで微妙に動作が違うことがあるから、呼び出されるフレームワークが違うとかなんかあるかもしれない。
しかし与えるパラメータの形式は同じように思える。

506 :名称未設定:2020/04/15(水) 01:08:18 ID:yKvYwJ1a0.net
do shell script に変数を渡す時にフォルダ名とかにスペースが入っていてもエラーが起きないようにしたくて
do shell script "'" & thescript & "'"としてみたところ一応機能しているようですがこれであってますか? よろしくお願いします

507 :名称未設定:2020/04/15(水) 01:33:47 ID:0T6qKX5D0.net
>>1を読め
いいの出てるから

508 :名称未設定:2020/04/15(水) 05:28:27.26 ID:7PV92REg0.net
それで一応機能してるって、thescriptが引数の無いコマンドだけだとしか思えない
まずはシェルスクリプトの基本を勉強した方がいいんじゃないか?

509 :名称未設定:2020/04/15(水) 11:21:38 ID:PmO4TyiH0.net
動いてるならいいじゃない
でもたぶんPOSIXパスだけをquoted form of ~てするのが一般的

510 :名称未設定:2020/04/15(水) 13:56:08 ID:l4T0qiYI0.net
POSIXパスだけじゃなく AppleScriptの変数の値(文字列)のままで の単位でじゃね

511 :名称未設定:2020/04/15(水) 14:24:53 ID:5P0amQj80.net
フォルダ名とかに、書いてるからパスのことかと思ったんだけど違うの?
例文だと変数名も相まってスクリプトごと括ってるように見えるけど

512 :名称未設定:2020/04/15(水) 15:00:28.26 ID:l4T0qiYI0.net
条件を限定すれば別に>>506でもいいだろけどな
なんの条件かは単なるコマンドへのフルパスそれも主にスペース対策(スペース以外にも有効だが ' には未対応)だけというのだけかな
単にAppleScript変数に収めたコマンドのフルパスだけの話ならだが、本当にそれだけなのか??という

do shell script で渡すのは単なる文字列、それをどう解釈するかはシェル(今は今もbashかな、まだ)
なので、シェルの特性(?)を知ってちゃんと使うべきとこに quoted form を使うべきかな
(ディレクトリ名ファイル名で ' なんて使うことはないつうても、せっかくあるんだしそれで全て(?)解決するんだし)

513 :名称未設定:2020/04/19(日) 15:55:11 ID:AyH16jvv0.net
>>506
その変数の中に'が入っていた場合に問題となるから、quoted forを使った方がいいよ。

514 :名称未設定:2020/04/23(木) 22:25:58 ID:3OHx3yFj0.net
AppleScriptObjC で property で cocoa クラスを宣言する際に、

property ClassName : class "ClassName"

というやり方と、

property ClassName : a reference to current application's ClassName

というやり方の二つを見かけるけど、効果に違いがあるのかな?
どちらがいいとか、あるのかな?

515 :名称未設定:2020/04/23(木) 23:20:35 ID:gA6WI9pm0.net
文、AppleScript実行文中としては、
class "NSObject"

(a reference to) current application's NSObject
は明らかに違う(上はAppleScript(ラッパー)オブジェクト、下はObjectve-Cオブジェクト)が、クラス宣言のそこでは同じじゃね
current application's NSLog("%@", me's |class|()'s superclass())
で見ると同じ結果だから。AppleScript(ラッパー)オブジェクトでなんかやってるかもしれんが

テンプレートもうそうだし、短い class "NSObject" の方でいいんじゃね

516 :名称未設定:2020/04/24(金) 10:11:13 ID:ynQpl+IX0.net
>>515
いまのところ、
property ClassName : class "ClassName"
を、簡便という理由で使っているけど、

Apple のメーリングリストだと、
property ClassName : a refrence to current application's ClassName

という書き方の方がよく見かける。
わざわざ、冗長な書き方が普及しているこということは、こう書くことに何かメリットがあるのではないか?と思いまして。

517 :名称未設定:2020/04/24(金) 10:40:13 ID:r5NsGPcY0.net
単に親クラスを指定するだけだし、superclassを見る限り作りたいObjective-Cのクラスとしては何も変わらないから、気にすんな
単に気持ち悪いというなんか拘りだけだったり、単に純粋AppleScriptでのクラス作る場合でのに合わせた方向でとかかもね

518 :名称未設定:2020/04/24(金) 10:54:50 ID:r5NsGPcY0.net
Script Editor で、current application's をいちいち書くのがめんどくさい場合、
property NSString : a refrence to current application's NSString
とかするようだが、a refrence to が必要、無ければエラーになる
Xcodeでのクラス宣言時の
property parent : current application's NSObject
a refrence to は必要なさげ、無くてもエラーにならないちゃんと実行する
ことから、Script EditorでAppleScriptObjCに慣れた人かな?

519 :名称未設定:2020/04/24(金) 10:57:41 ID:r5NsGPcY0.net
あー、
property ClassName :
って、
property parent :
間違いだろと思ってたが(クラスを宣言って言ってるから)、まさか、めんどくさいからの方??

520 :名称未設定:2020/04/24(金) 15:26:10 ID:eWyPhZfo0.net
クラス宣言中のではなく、単に面倒だから変数に入れるって方みたいだな
parent a reference to current application's でググってもでないとこから
だったら、結論として好きにしろきにすんなw

そのpropertyでの目的は、いちいち current application's ClassName's と書くのが面倒だから、そこまで(それが指すオブジェクト)をクラス名と同名の変数に入れてしまえってだけ(クラスを宣言とはちょっと違うだろう)
current application's ClassName をだから、a reference to current application's ClassNameになるのはまあ自然かな
a reference to は不要だが付けなきゃ許してくれないからだけかな、なんでか。下記にある通り実行文ではいらないよう
(また、俺は property で current application を変数に入れて、S' ClassNames's ...とかしたこともあるが、current applicationまでだったら a reference to はいらない)

current application's ClassName's ...

set theClass to current application's ClassName
theClass's ...
と、同じ。current application's ClassName にするのは普通でしょ?

で、property での、a reference to current application's ClassName の代わりに class "NSObject" は、まあ全く同じだな
use framework "AppKit"

property classClass : class "NSApplication"
property referenceClass : a reference to current application's NSApplication

log (current application's NSString's stringWithFormat_("%p", classClass) as text)
log (current application's NSString's stringWithFormat_("%p", classClass) as text)
log (current application's NSString's stringWithFormat_("%p", current application's NSClassFromString("NSApplication")) as text)
オブジェクトのポインタ(オブジェクトが存在するメモリ)が全く同じ

521 :名称未設定:2020/04/24(金) 15:35:36 ID:eWyPhZfo0.net
current application's ClassName と、class "ClassName" で明確に違うのは、
じゃあ、class "ClassName" も current application's ClassName と同じように、
(class "ClassName")'s ...
と、実行文で一文にできるだろと思ったら、そうはいかない、エラーになる
Script Editorでは、
set theClass to class "ClassName"
theClass's ...
と一度変数に入れなくてはならず(?)、
Xcodeでは、class "ClassName" がまともなオブジェクトを返さない(AppDelegateのメソッド内で行うと、なんであれAppDelegateを返す。上にあるラッパーというのは間違い)

current application's ClassName の代わりなら、 a refrence to current application's ClassName の方が自然
だが、propertyでは指す/返すオブジェクトは全く同じなので、短い方が良かったら class "ClassName" でも問題ないだろう

ということで、好きにしろ気にすんなってとこで

522 :名称未設定:2020/04/24(金) 15:37:43 ID:eWyPhZfo0.net
>>520
間違い
log (current application's NSString's stringWithFormat_("%p", classClass) as text)
log (current application's NSString's stringWithFormat_("%p", classClass) as text)
正しい
log (current application's NSString's stringWithFormat_("%p", classClass) as text)
log (current application's NSString's stringWithFormat_("%p", referenceClass) as text)

523 :名称未設定:2020/04/24(金) 15:58:55 ID:ynQpl+IX0.net
>>522
いろいろコメントありがとう。

でも、
property ClassName : class "ClassName"

property ClassName : a refrence to current application's ClassName
で得られるクラスをポインタで比較するのはあんまり意味ないかなと思う。
前者は Apple のドキュメントにあり、後者は大量のサンプルコードが出回っていおり、
同じものが得られるのはわかっているわけですから。

二つの違う書き方で AppleScript と Cocoa の間の birdge が微妙に違ってくることはありうるのじゃないかしら?
それぞれの場合の副作用とかオーバヘッドとかの情報が得られれば、と思っていました。

それぞれの場合の速度を比較などしてみましたが、有意な差はなさそうでした。

524 :名称未設定:2020/04/24(金) 15:58:59 ID:eWyPhZfo0.net
雑学的な訂正
>>521
(class "ClassName")'s ...
と、実行文で一文にできるだろと思ったら、そうはいかない、エラーになる
Script Editorでは、
set theClass to class "ClassName"
theClass's ...
と一度変数に入れなくてはならず

(get class "ClassName")'s ...
で可能だった。こういう変態的なとこがいいなAppleScriptは(わかった時に嬉しい変態的な意味で)w

525 :名称未設定:2020/04/24(金) 16:08:56 ID:eWyPhZfo0.net
>>523
ちょっと意味がわからんな
ポインタが指すオブジェクトがClassNameクラスそのものではない、何かラッパーなとか?
そのために、最後のを付けたんだけどなあ。AppleScriptが介入する余地がないCore(?)的な。純粋にObjective-Cのオブジェクトだよ、全部

で、アドレスが独特なので、システム関係は変わった位置にマッピングされてObjective-Cプロジェクトでも同じかな?と思った見たら、全く同じだった

ということで、その見解は誤りと言っておこう。全く同じなので変わらないのは当たり前だね

526 :名称未設定:2020/04/24(金) 16:37:58 ID:eWyPhZfo0.net
ああ、最終的になObjective-Cのオブジェクトは同じでも、AppleScript上/中ではなんかラッパーされてるんじゃないの?とかか
せいぜいAppleScriptの変数型が違うとかだろうが、そんなことないよAppleScriptObjC全般で
Objective-Cオブジェクトを包んだ変数、それは共通の一つだろう、あっても。Objevtive-Cオブジェクトが同じだったら、変数の型も同じ内容も全く同じなんだから変わるわけがないわな

527 :名称未設定:2020/04/24(金) 17:32:37 ID:ynQpl+IX0.net
>>526
「AppleScriptObjC全般でObjective-Cオブジェクトを包んだ変数、それは共通の一つだろう」
この推測には、同意します。
しかし、それに辿り着く手続きは複数あるかもしれませんね。
明らかに入口は複数あります。どの入口から入るのが一番の確実かつ近道なのか、興味ないですか?

528 :名称未設定:2020/04/24(金) 23:30:26 ID:yFmvkdtt0.net
辿り着くってイミフ、入り口ってどこのどこへの??
シンプルにObjective-Cオブジェクトを包んだ変数その型だってAppleScriptの
class of での、AppleScript言語の(内部オブジェクトクラス
興味あるのに自分で調べる手立てはなに??

529 :名称未設定:2020/04/28(火) 19:14:15.33 ID:nVdZ/wiz0.net
こんなの、もうAppleScriptじゃないな...

530 :名称未設定:2020/04/28(火) 20:34:21.22 ID:Htc5L4tn0.net
解説本でも出す気なのかもしれんぜ

531 :名称未設定:2020/04/28(火) 21:29:12 ID:D8UlzbWr0.net
Objective-CなCocoa(OSのAPI)を直接使うんだからこんなのになるのは当たり前、
違うアプローチは前からあったが今時話にも上がらなくなってしまったろう、そのAppleScriptらしいのは

AppleScriptらしいアプローチのは、作るのではなく使う側でしかないんだろう
こんなのAppleScriptではないというのはこれも無縁な話だろう、どうせやらないんだから

532 :名称未設定:2020/04/28(火) 22:58:33 ID:FwS0bZUI0.net
https://i.imgur.com/n3L9Q0r.jpg

533 :名称未設定:2020/04/29(水) 00:45:17 ID:0jaqUaGm0.net
property ClassName : class "ClassName"

これだとTerminalからosascriptで実行する(osascript xxx.applescript)際にエラーとなる。
a refrence to...だとエラーにならない。

534 :名称未設定:2020/04/29(水) 12:48:34.76 ID:rStQpknl0.net
>>533
有益な情報をありがとう。
property ClassName : class "ClassName"
でも、osacompile で script ファイルを作ることはできるね。
そして、いちど script ファイルにしてしまえば、osascript で実行できるね。
なぜか、ソースコードをダイレクトに実行する場合だけエラーが起きるね。
不思議だ!

535 :名称未設定:2020/04/29(水) 17:32:25 ID:0jaqUaGm0.net
>>534
osascript xxx.scptだと完走はするもののstderrに
osascript: couldn't save changes to script xxx.scpt: error -1763.
とエラーが出力される。

536 :名称未設定:2020/04/29(水) 20:33:08.58 ID:rStQpknl0.net
>>535
トップレベルで ObjC のオブジェクトを変数に入れているね。
あってる?
もしそうなら、osascript じゃなくても、スクリプトエディタで実行しても同じエラーが起きる。
トップレベルの変数は保存される。そして、ObjC のオブジェクトは保存できない。
だから変更を保存できない、というエラーがおきる。
スクリプトをユーザー定義のハンドラの中に入れてやれば、エラーが起きなくなるよ。

537 :名称未設定:2020/04/29(水) 21:07:53 ID:0jaqUaGm0.net
あってる。なるほど、ユーザー定義のハンドラに入れたら大丈夫だった。ありがとう。

538 :名称未設定:2020/06/15(月) 17:41:53 ID:/Jq7K7r+0.net
初心者です
現在開いているsafariのページのソースを取得→ソース.txtのようなファイルにテキストとして書き出す、ということをやろうとしています。

get source of document 1 でソースの値自体は取得できましたがここからテキスト書き出す方法がわかりません
内容は今のところ↓ですがソースの値?を文字列に変換できないからかエラーが出ます
as string や as «class utf8» などを使ってみたのですが変わらず
上手くいく時もありますがテキストではなくデータとして保存されてしまっているのか日本語が文字化けしていたりします
何かいい方法はないでしょうか?

tell application "Safari"
open location "https://google.com"
delay 2
try
get the source of document 1
on error
beep 2
return
end try
end tell

set theSource to source of document 1

writeString("〜/Desktop/ソース.txt", theSource)

on writeString(theFile, theString)
open for access theFile with write permission
try
set eof theFile to 0
write theString to theFile
end try
close access theFile
end writeString

539 :名称未設定:2020/06/15(月) 19:22:28 ID:62s7vEVu0.net
write theString to theFile

write theString as «class utf8» to theFile
で行けてるぽいけど

540 :名称未設定:2020/06/15(月) 21:23:11 ID:/Jq7K7r+0.net
>>539
ありがとうございます
その部分を変えただけではダメでしたが、変えた上で

set theSource to source of document 1
を削除し
get the source of document 1

set theSource to (source of document 1)
に変えてやればできるようになりました

ただサイトによって、例えば阿部寛のHPは
as «class utf8»でなくas textでやる必要があったり
今度は逆にas textだと文字化けするサイトが出てきたりいろいろと使い分けなくてはならないようですね

いずれにせよ目的は果たせました
ありがとうございました

541 :名称未設定:2020/06/20(土) 11:56:01.98 ID:h6Q8xKx60.net
catalinaのQuickTime Playerなのですが、
GUIでは、録画の赤ぽっちボタンの右の下向き>で、映像と音声の入力ソースを選択しますが、
これをApple Scriptでコントロールする方法をご存知ないでしょうか。

具体的にやりたいことは、QuickTime Player起動後に、新規ムービー収録のウインドウを開いて、
特定の入力ソースを自動で選択するところまで自動でやって欲しいのですが。

542 :名称未設定:2020/06/20(土) 13:51:41 ID:34L9HvGk0.net
current microphone に設定するだけのはずが、screen recording (の場合に返す document で)しか対応してないやんけって話?

tell application "QuickTime Player"
set theDocument to new screen recording
set current microphone of theDocument to (audio recording device "Built-in Line Input")
end tell

543 :名称未設定:2020/06/20(土) 19:14:30.62 ID:h6Q8xKx60.net
レスありがとうございます。
言葉足らずですみません。
Macと同じネットワークにAppleTVがあり、AppleTVの画面を新規ムービー収録のウインドウに表示したいと思い、

tell application "QuickTime Player"
set newMovieRecording to new movie recording
tell application "System Events" to tell process "QuickTime Player"
click button 3 of window 1
click menu item "Apple TV 4G" of menu 1 of button 3 of window 1
end tell
end tell
みたいのを作り始めたのですが、いろいろ問題があって、System Eventsを使うのをやめて
set current camera of newMovieRecording to "Apple TV 4G"
set current microphone of newMovieRecording to "Apple TV 4G"
のようにしてもうまくいかないもので、ソースの指定方法のアドバイスをいただけないかと思いました。

544 :名称未設定:2020/06/20(土) 23:42:42.39 ID:IoUCNbBk0.net
Catalinaじゃないけど、
current camera, current microphone は screen recording でしか対応してない。audio recording なんて current microphone プロパティにアクセスすらエラーになる
Catalina も同じだったら、System Events ででしかできないんじゃね

545 :名称未設定:2020/06/21(日) 04:20:55.63 ID:FnFKZRI70.net
そうしたら、おそらくCatalinaでも対応してなさそうですね。
レスありがとうございます。

546 :名称未設定:2020/06/23(火) 01:52:23.47 ID:52ZesAHA0.net
AppleScriptでは対応してないが、選択されたデバイスは記憶してる=Preferenceに入ってる
defaultsコマンド(NSUserDefaults)を使えば、QuickTIme Playerを起動してても、その変更は反映される(けど、Recordingウィンドウがすでにあるとそこのメニューには反映されないそこまではしてない)
ので、do shell script (もしくはAppleScriptObjC/JXAで NSUserDefaults) で、Preferenceのその値を直接書き換えてしまえば一応できるかな

tell application "QuickTime Player"
do shell script "defaults write com.apple.QuickTimePlayerX MGDeviceRecordingDocumentViewControllerAudioDeviceSelectionUniqueID '設定したいデバイス'"
new movie recording
end tell

設定したいデバイス は設定したいデバイスを選んで、
defaults read com.apple.QuickTimePlayerX MGDeviceRecordingDocumentViewControllerAudioDeviceSelectionUniqueID

547 :名称未設定:2020/06/27(土) 19:48:13 ID:ER4MrTJG0.net
スレチでしたら申し訳ないのですがBashの中でAppleScriptを使ってダイアログ表示させたいです

VAR=太郎
osascript -e "
display \"$VARです\"
"

「太郎です」と表示させるべくこんな感じで書いてみたのですが表示が文字化けしてしまいます
\"$VAR です\" のように$VARとの間に空白を開けると文字化けは起きません
バグなのかやり方が悪いのかどちらでしょうか?
High Sierraで10.13.4です

548 :名称未設定:2020/06/27(土) 20:51:05.02 ID:ER4MrTJG0.net
すいません訂正です
displayではなく
display dialogです

549 :名称未設定:2020/06/27(土) 21:37:46.20 ID:mA5FUaV90.net
そらやり方だろう

仮にバグだとしたって今更直される訳ない
うまいこと回避しないと

550 :名称未設定:2020/06/27(土) 23:10:23.62 ID:p3Uu/mSU0.net
${VAR}
のようにかっこで括ってみては

551 :名称未設定:2020/06/28(日) 06:02:46.10 ID:Lqw/TMAF0.net
>>549
VAR=太郎
echo "$VARです"
で、すでになので、bash(kshも)の方のバグっぽいかな
だったら直される可能性はちょっとはあるかもw
>>550で同じく(まあ当然)問題なくになるけど

552 :名称未設定:2020/06/28(日) 06:30:21.29 ID:Lqw/TMAF0.net
hoge.sh
VAR=太郎
osascript -e "\"$VARです\""

osascript -e "
use framework \"Foundation\"
(((current application's NSString's stringWithString:\"$VARです\")'s dataUsingEncoding:(current application's NSUTF8StringEncoding))'s |description|()) as text
"

$ ksh hoge.sh
§™ÈÉéß„Åô
<c382c2a7 e284a2c3 88c389c3 a9c39fe2 809ec385 c3b4>

kshの化け方がわかりやすい、素直な化け方。UTF-8文字列を1バイト文字列(Latin-1か何か)としてUTF-8に変換という
bashの化け方はちょっとイミフだな

まあ、どっちにしろAppleScript側の問題ではなくシェルの問題だな

553 :名称未設定:2020/06/28(日) 09:19:04.44 ID:E5CKrqll0.net
10.12.6だけど化けなかったわ bash
10.15.5でも化けない bash dash ksh zsh

一応観測報告

554 :名称未設定:2020/06/28(日) 10:19:26.04 ID:XMUPxPbc0.net
547です
シェルの問題なのですね
ですがみなさんのアドバイス通り${VAR}にしたら問題なく表示されました
これでやっていきます
ありがとうございました

555 :名称未設定:2020/07/09(木) 01:08:32.40 ID:Y6CASR9H0.net
放り込んだ"ファイル名.拡張子"と同名のファイルを全ディスクから探して
変更日の新旧問わず放り込んだそれにすべて置換する、
というスクリプトをご存じないでしょうか。。
同一ファイル名の書類を見つけ出してリスト化というのはあるようなのですが。
確認ダイヤログ不要で、とにかく放り込むと置換できたら嬉しいのですが。
よろしくお願いします。

556 :名称未設定:2020/07/09(木) 01:21:58 ID:6ePdx8Rv0.net
そんな怖いスクリプトは作りたくないなあ。

557 :名称未設定:2020/07/09(木) 01:31:00 ID:HqkbsCQZ0.net
知らない

558 :名称未設定:2020/07/09(木) 03:41:14.93 ID:iXt8nw3m0.net
mdfindあたり使えばそんな難しくはなさそう

559 :名称未設定:2020/07/09(木) 09:09:10.45 ID:Ve9GMmcz0.net
>>555
あったとしても全部ASで書いてあったらとてつもなく遅いよ。
rubyでも相当時間がかかる。

560 :名称未設定:2020/07/09(木) 13:34:59.83 ID:3NOhzex20.net
rubyとか言い出すならfindコマンドじゃね
最速は多分>>558、AppleScriptObjC使えばAppleScriptでも最速になるだろう

561 :名称未設定:2020/07/09(木) 16:11:14.56 ID:Y6CASR9H0.net
>>555です。こちらのスクリプトで同名同種類ファイルをリストから選択、最新のもので更新できますが、
1、放り込んだ物に全置換
2、確認不要で全書置換
できませんでしょうか、、

on synchronize by keyFilePath
set savedDelimiters to AppleScript's text item delimiters

set AppleScript's text item delimiters to return
set thePaths to text items of (do shell script "fname=\"$(basename " & quoted form of keyFilePath & ")\";export LANG=ja_JP.UTF-8; mdfind 'kMDItemDisplayName == \"'\"$fname\"'\"' | while read path; do [ -f \"$path\" ] && [ -r \"$path\" ] && [ -w \"$path\" ] && ls -lT \"$path\"; done | awk 'NF<10{next} { date=sprintf( \"%s%02s%02d%s\", $9, $6, $7, $8 ); for(i=1; i<10 ; i++) $i=\"\";sub(\"^ *\",\"\");print date, $0}' | sort -r | cut -d ' ' -f 2-")
set AppleScript's text item delimiters to savedDelimiters
if not ((count of thePaths) > 1) then return

562 :名称未設定:2020/07/09(木) 16:11:48.29 ID:Y6CASR9H0.net
set sourcePath to first item of thePaths
try
set destinationPaths to choose from list items 2 thru -1 of thePaths OK button name "Copy" with title "Update the same name files" with prompt "Copy “" & sourcePath & "” to:" with multiple selections allowed
if (count of destinationPaths) is 0 then return
on error
return
end try
try
set AppleScript's text item delimiters to ASCII character 10 -- 10 was LF
set quotedDestinationPaths to quoted form of (destinationPaths as text)
set AppleScript's text item delimiters to savedDelimiters
set theResult to do shell script "echo " & quotedDestinationPaths & "| while read path; do cp " & quoted form of sourcePath & " \"$path\"; done"
on error
return
end try
end synchronize

on open droppedItems
if (count of droppedItems) is 0 then return
synchronize by POSIX path of item 1 of droppedItems
end open

563 :名称未設定:2020/07/09(木) 16:14:16.46 ID:qaiBURwd0.net
自分でいいように直せよ

564 :名称未設定:2020/07/09(木) 19:16:03.05 ID:nfdPk9kY0.net
>>560

もはやASとは呼べないよ…

565 :名称未設定:2020/07/09(木) 23:48:33.47 ID:3NOhzex20.net
なんで?
シェルスクリプトでいいだろ(by 知ってる俺w)だろけど、何をしたいかわかってないようだな

566 :名称未設定:2020/07/10(金) 21:41:05 ID:SwzS/c2K0.net
>>565
上記のコードのうち、どこを削除または修正すれば、削除確認・手動選択不要で、
検出された同名ファイルを一括置換できるか、教えていただけないでしょうか?

567 :名称未設定:2020/07/11(土) 00:51:59.91 ID:2cTMSLIj0.net
指名指定すんな、あつかましいw
教えてくれでなくて書いてくれだろな

568 :名称未設定:2020/07/11(土) 01:12:41.33 ID:2cTMSLIj0.net
on synchronize by sourcePath
set savedDelimiters to AppleScript's text item delimiters

set AppleScript's text item delimiters to return
set destinationPaths to text items of (do shell script "originPath=" & quoted form of sourcePath & "; mdfind 'kMDItemFSName == \"'\"$(basename \"$originPath\")\"'\"' | while read path; do [ \"$path\" != \"$originPath\" ] && [ -f \"$path\" ] && [ -r \"$path\" ] && [ -w \"$path\" ] && echo \"$path\"; done | sort")
set AppleScript's text item delimiters to savedDelimiters
if (count of destinationPaths) is 0 then return
try
set destinationPaths to choose from list destinationPaths OK button name "Copy" with title "Update the same name files" with prompt "Copy “" & sourcePath & "” to:" default items destinationPaths with multiple selections allowed
if (count of destinationPaths) is 0 then return

569 :名称未設定:2020/07/11(土) 01:12:52.08 ID:2cTMSLIj0.net
on error
return
end try
try
set AppleScript's text item delimiters to ASCII character 10 -- 10 was LF
set quotedDestinationPaths to quoted form of (destinationPaths as text)
set AppleScript's text item delimiters to savedDelimiters
set theResult to do shell script "echo " & quotedDestinationPaths & "| while read path; do cp " & quoted form of sourcePath & " \"$path\"; done"
on error
return
end try
end synchronize

on open droppedItems
if (count of droppedItems) is 0 then return
synchronize by POSIX path of item 1 of droppedItems
end open

570 :名称未設定:2020/07/11(土) 01:16:37 ID:2cTMSLIj0.net
ちょっとテストしたみただけで、よくはテストはしてない
つまらんから確認不要はとりあえず無視。 echo の代わりに cp にすればいいだけだけど=synchronize は do shell script 一行だけになるだけだけど

571 :名称未設定:2020/07/11(土) 01:45:18.77 ID:2cTMSLIj0.net
ああ、
sourcePath & "; mdfind

sourcePath & "; export LANG=ja_JP.UTF-8; mdfind
LANG=ja_JP.UTF-8 は必要なんかな

572 :名称未設定:2020/07/11(土) 06:18:14.68 ID:p3oNz3Ax0.net
質問者も回答者も >>1 をスルー
数年前だったら叩かれる流れだが

573 :名称未設定:2020/07/11(土) 09:58:46.16 ID:6DSpvrrV0.net
>>571
自動でリスト内全選択になっただけでも大変助かりました。流石に確認なしに以下アクションはシステム的に危険なんでしょうか。。本当に感謝です。あなたは神様です。ありがとうざいます。

574 :名称未設定:2020/07/11(土) 10:26:54.84 ID:6DSpvrrV0.net
いただいたスクリプト内の、リスト表示、確認部分を削除すればそのまま置換されました。。本当にお手数おかけしました。。

575 :名称未設定:2020/07/11(土) 16:06:46.88 ID:HMfLglAV0.net
結局、そう言い出すだろうなと、そうしてた
教えてくれなんて自分で勉強するつもりが全くないくせに簡単に教えてくれなんて言うな
気がついただけマシだが、これからちゃんと一から勉強しろよw

576 :名称未設定:2020/07/11(土) 16:19:40 ID:D2eEglfZ0.net
全部書いてもらった奴がいちいちその後調べる訳ねーだろ

577 :名称未設定:2020/07/11(土) 16:35:15.08 ID:HMfLglAV0.net
お前に言ってない
文句つけるだけのは、お前が気にしてる嫌ってるのとそう変わらんな

578 :名称未設定:2020/07/11(土) 18:25:24 ID:+kwq3R/90.net
せいぜい得意がってろ

579 :名称未設定:2020/07/11(土) 18:28:38 ID:Ouwi/Bt70.net
>>578
助言やコードを書いてもねー奴が粋がるなよw

580 :名称未設定:2020/07/12(日) 00:05:51.70 ID:NYpKP6zd0.net
何で荒れるんだよ

581 :名称未設定:2020/08/03(月) 22:59:17.79 ID:WKkr5BIF0.net
AppleScript関係なかったら申し訳ないけど
SystemEventsでショートカットとか使ってGUIアプリを操作するスクリプトがある
これで長時間作業するので、ディスプレイだけオフ、システムだけは起動という風にしたいんだけど上手くいかない

とりあえずホットキーとかで四隅にマウス移動させてディスプレイオフとかいうの使ってみたけどSystemEventsのエラーが出たりそもそも操作が行われなかったりする
ディスプレイが起動してる時は正常に動くからスクリプト自体は問題ないはず

何かいい方法ない?

582 :名称未設定:2020/08/04(火) 02:26:01.82 ID:eqZ8mut20.net
モニターの電源を切る、iMacとか一体型だったら諦めるかできるならそれで

tell application "TextEdit"
activate
end tell

delay 5 -- (この間に ディスプレイをスリープ)

tell application "System Events"
keystroke "acvv" using command down
end tell

動かない。ビープ音が鳴る

583 :名称未設定:2020/08/04(火) 02:26:08.62 ID:eqZ8mut20.net
delay 5 -- (この間に ディスプレイをスリープ)

tell application "System Events" to tell process "TextEdit"
UI elements of front window
end tell

一応取得はできる。じゃあってことで、

tell application "TextEdit"
activate
end tell

delay 5 -- (この間に ディスプレイをスリープ)

tell application "System Events" to tell process "TextEdit"
tell first menu of menu bar item "Edit" of first menu bar
click menu item "Select All"
click menu item "Copy"
click menu item "Paste"
click menu item "Paste"
end tell
end tell

NOP無視っぽい

スリーンセーバー起動でも同じようなもん
スリーンセーバー動作的には対象としたいアプリがアクティベートになってない=keystrokeは当然そのアプリに行かない(ビープ音からはまさしくかな)しGUI Scriptingではアクティブではないから無視という普通の動作(Windowに対しては機能したかな)
ディスプレイスリープもスリーンセーバー起動時と同じようなことか

584 :名称未設定:2020/08/04(火) 02:41:56.62 ID:eqZ8mut20.net
System Events のキーイベント送信はプロセスに対してではなく、OSとして受け取って振り分け
macOSのAPIで特定のプロセスに送ることがそういえば可能だったかなと思ったら、あった
https://stackoverflow.com/questions/21878987/mac-send-key-event-to-background-window

AppleScriptObjCで頑張ればできるかもしれない。もしくはそんなコマンドとかあるかな
(メニューバーってアクティブなアプリななのしかダメなんじゃないかと思ったが、上記のstackoberflowのはまさしくだからイケるのか...?)

585 :名称未設定:2020/08/04(火) 02:44:32.19 ID:eqZ8mut20.net
>上記のstackoberflowのはまさしく
いや違った、Command+Q じゃなく単に Q を送るだけか。失礼

586 :名無し募集中。。。:2020/08/04(火) 04:00:45.65 ID:e7kbVOQe0.net
fast user switchingしても裏で動いてるから
別ユーザー側で画面を消したらいいよ

587 :名称未設定:2020/08/04(火) 04:27:45.67 ID:eqZ8mut20.net
fast user switchingかあ
アクティブ状態は維持されてるのかな?されてるよう。思わぬとこだなあ

588 :名称未設定:2020/08/04(火) 04:54:02.09 ID:6HzZzT0x0.net
もうJavaScriptでよくね?

589 :名称未設定:2020/08/04(火) 07:46:36.33 ID:rl01wFv80.net
>>583
検証ありがとう

>>586
こんな方法があったのかしゅごい
これ使わせてもらうねサンクス

590 :名称未設定:2020/08/04(火) 08:26:19.37 ID:UmQvxL8c0.net
外付けモニタなら、モニタの電源ボタンを押すだけだけどね。

591 :名称未設定:2020/08/04(火) 09:23:17.02 ID:JbnubkiD0.net
天才あらわる

592 :名称未設定:2020/08/04(火) 13:19:02.29 ID:z6f4Eeyp0.net
つよい

593 :名称未設定:2020/08/21(金) 11:28:03 ID:QR52ANsL0.net
OS 10.11です。
JXA(AS)でディスク作成フォルダって作成できますか?
できればPythonからディスク作成フォルダが作成できればベストなのですが。

594 :名称未設定:2020/08/21(金) 11:47:17 ID:tLFxZAx40.net
単に拡張子 fpbf が付いてるだけのフォルダ(ディレクトリ)を作ればいいだけじゃね

595 :名称未設定:2020/08/21(金) 12:00:29 ID:QR52ANsL0.net
本当だw。できました。ありがとうございます。
pythonでも可能かやってみます。

FINDER = Application( "Finder" )
FINDER.includeStandardAdditions = true
container = FINDER.pathTo( "desktop", {from:"user domain"} )
var destinationFolder = FINDER.make({
new: "folder", at: container,
withProperties: { name: "disk.fpbf" }
});

596 :名称未設定:2020/08/21(金) 13:09:22 ID:CSp20R8z0.net
pythonでも普通にできました
import os
theDir = os.path.dirname(__file__)+"/disk.fpbf"
newdir = os.makedirs(theDir)

597 :名称未設定:2020/08/22(土) 22:48:10 ID:465lLDh20.net
なんでAppleScriptで書かないんだ?

598 :名称未設定:2020/09/25(金) 11:54:13.06 ID:iIR7upFs0.net
Xcode12にしてもASアプリはARM化されないみたいですね。

599 :名称未設定:2020/09/25(金) 16:20:30.48 ID:qJrBvDjr0.net
Xcodeでも別にネイティブコードにコンパイルされるわけではないし(本体はあくまでもscpt)、アプリケーションバンドル内(Contents/MacOS)のは単にインタプリタを起動してるだけでしょ
インタプリタを起動っても実行ファイルではなく、OSフレームワーク内のFrameworkとしてあってAPIを呼び出しての
ARM MacではAPI内=インタプリタはARMネイティブだろからほぼ全く影響/違いはないんじゃね

インタプリタを起動してるだけなんだからARMネイティブすりゃいいだろというのはあるが、まあ、上記の通りほぼ全く影響はないからかもしくはまだ視野に入ってないからまだ手付かずなんだろ
もしくは、今回のエミュレータはなんかARMネイティブコードにコンバートもするそうなので、インタプリタを起動してるだけぐらいならそれで済んでしまいそうだな

600 :名称未設定:2020/09/26(土) 04:54:40.07 ID:EmnrkzgY0.net
ああ、
XcodeでAppleScriptアプリでのContents/MacOSの元はプロジェクトにあるやんけっ
ただのちっちゃな main.m
Contents/MacOS内のネイティブ実行ファイルにもフツーにARM分も付くんじゃないの。単にデフォのbuild settingsがそうなってないだけで、簡単にいつも通りに設定変えるだけで

チラっととしか見てないが、
https://developer.apple.com/documentation/xcode/building_a_universal_macos_binary
フツーにいつも通り/今まで通りに「複数のアーキテクチャーで」を選ぶ/設定するだけだな

Xcode 12まだ使えないから思いと違うとこがあるかもしれんが、ARM対応っても今まで通りで変わってなさそ

601 :名称未設定:2020/09/26(土) 04:58:09.70 ID:EmnrkzgY0.net
Xcode12にしても 〜 ARM化されない
ってのは、既存のプロジェクトかな、もしかしたら
それだったら尚更勝手にはならないだろう。Build SettingsをちょちょいっとするだけでARM化されるだろう

602 :名称未設定:2020/09/26(土) 08:51:00.47 ID:HQVjumix0.net
とりあえずまっさらな新規プロジェクトで作成してもダメだった。
既存のプロジェクトにアーキテクチャゴニョゴニョしてもダメだった。
まあ、Appleの説明だといけるはずなので、やり方が悪いのかも。

603 :名称未設定:2020/09/27(日) 17:10:00.73 ID:6zvKztBs0.net
しばらく前は動いてたと思うけど
do shell script "tmutil disable" with administrator privileges
がOS 10.15.7でエラーを返す。

tmutil: disable requires Full Disk Access privileges.
To allow this operation, select Full Disk Access in the Privacy
tab of the Security & Privacy preference pane, and add Terminal
to the list of applications which are allowed Full Disk Access.

ターミナルやスクリプトエディタや保存したアプリにフルディスクアクセスを与えても変わらず。

604 :名称未設定:2020/10/15(木) 18:18:58.59 ID:NQgPzUV+0.net
do shell script "pbpaste" がなんか化けると思ったら ~/.CFUserTextEncoding 削除しちゃってた
まだ使ってんのねこれ

605 :名称未設定:2020/10/15(木) 18:57:59.97 ID:weI/PnQJ0.net
というより、LANGが設定されてないのが主な原因/do shell scriptらしい原因じゃないの
.CFUserTextEncodingがあろうがなかろうが中身が日本語設定じゃなかろうが、
do shell script "LANG=ja_JP.UTF-8 pbpaste"
で化けなさそうだけど

606 :名称未設定:2020/10/15(木) 20:06:59.99 ID:weI/PnQJ0.net
do shell script "osascript -e 'the clipboard'"
では化けない。do shell script で起動されるシェル全体のことではなくて、pbpaste固有のことか
と思ったら、man に書いてあっった。LANGに依存する、無かったら standard C encoding とみなすって。そりゃ化けるわな(Terminal上でも同じく同じように化ける)
.CFUserTextEncodingの記述はないが、まあ、LANGが無くてもの保険のうちか

607 :名称未設定:2020/10/15(木) 20:19:18.21 ID:NQgPzUV+0.net
確かに.CFUserTextEncoding無しでもLANG設定すれば化けませんでした

もしかしてdefaults readが化けるのもこれかな?と思ったけどこっちは別なようでした(ターミナルでも化ける)

608 :名称未設定:2020/10/15(木) 22:08:48.09 ID:AcZwlXt70.net
文字化け じゃなくて エスケープされる じゃないの
defaultsはそういうもんっぽいかな
plutilやPlistBuddy使えば

AppleScript関係ない、いや、do shell script もあまり関係ないコマンド特有の話だな
AppleScriptらしくはAppleScriptObjC使えばかな。あっさりだし文字化けなんて関係ないだろう
(確かAppleScriptにPropery Listのサポートそのものがあったがあれはものすごく使いづらかったような)

609 :名称未設定:2020/10/19(月) 11:09:48.76 ID:kxp2hD9n0.net
Catalinaで、メニューバーに出してるスクリプトメニューが時々消えてることがある

610 :名称未設定:2020/11/03(火) 08:08:05.83 ID:3IpYfRMd0.net
https://i.imgur.com/Pjny10C.jpg

611 :名称未設定:2020/11/23(月) 13:54:16.83 ID:KJHD4iIZ0.net
全然、詳しくないんですけど
起動ディスクを切り替えて再起動するAppleSprictの作成は可能でしょうか?

いま、OSをBig SurにUpdateしようと思ってるんですが
その時に外付のStorageにBig surをインストールして内蔵のStorageからアプリやデータを移しながら稼働確認をしようとしてます
完全にBig surに移行できるまではCatalinaで起動したり、Big surで起動したりの起動ディスクの切り替えが結構頻度で発生するのでone clickでできるようなApplescript は作れないかと思ってます

スクリンセーバーの開始時間を5分⇄OFFで切り替えるスクリプトは書いたことあります。ただ殆どこのスレで教えてもらいましたが

612 :名称未設定:2020/11/23(月) 14:18:30.13 ID:YBfcTY0v0.net
ちょっと古いけどこういうの真似ればできるんちゃう
https://www.macworld.com/article/2867276/how-to-easily-switch-between-startup-volumes.html

613 :名称未設定:2020/11/23(月) 18:07:36.54 ID:KJHD4iIZ0.net
>>612
Thank you!
同じようなこと考えるやつはいるんだな
だけどやってみたら残念ながら上手くいかなかったよ

Catalina環境で試したらCatalina(Macintosh HD)を指定しての実行は上手く再起動したけど
Big surでの再起動は外付のStorageがマウントできないというエラーになってしまったキチンとBig surの入ってる外付Volumeの名前を指定してるつもりなんだけどなー
もちろんシステム環境設定で起動ディスクを変更すればBig surで再起動はできてる
エラーの内容は添付参照して
https://i.imgur.com/KI1AURS.png
https://i.imgur.com/oq0s04j.png

614 :名称未設定:2020/11/24(火) 04:21:41.81 ID:n+9Nxo0V0.net
人が変わったような言葉遣いに吹いた

615 :名称未設定:2020/11/24(火) 13:16:00.08 ID:VB6lUz0y0.net
な。どういう神経なのか不思議

616 :名称未設定:2020/11/25(水) 09:05:37.80 ID:pD+t9Rr+0.net
すごくフレンドリーな人だね
かわいい

617 :名称未設定:2020/11/25(水) 16:35:48.73 ID:8PAHHaeP0.net
キモ
本人かと思わせるぐらいないな。やはり本人かw

618 :名称未設定:2021/01/03(日) 13:26:59.46 ID:UCgs6e4/0.net
OS10.15.7、Safari14.0.2です

AppleScriptでユーザエージェントを切り替えたいのですがうまく動作しません

試しにテストとして
tell application "System Events"
tell process "Safari"
click menu item "新規ウインドウ" of menu "ファイル" of menu bar 1
end tell
end tell
とすると新規ウィンドウが開きます

click menu item "スタイルを無効にする" of menu "開発" of menu bar 1
でスタイルは無効になります
click menu item "このページをメールで送信" of menu "共有" of menu item "共有" of menu "ファイル" of menu bar 1
でサブメニューもうまく機能します
そこで
click menu item "Safari 14.0.2" of menu "ユーザエージェント" of menu item "ユーザエージェント" of menu "開発" of menu bar 1
としてもデフォルトが選択されたまま該当メニューが選択された状態になりません
同じようにサブメニューではない"レスポンシブ・デザイン・モードにする"も機能しません

なにか書き方が悪いか他の動作しない理由などあるでしょうか

619 :名称未設定:2021/01/03(日) 13:51:00.39 ID:DFL3pFAL0.net
set frontmost to true
を前に入れといてやると行けるようだった

620 :名称未設定:2021/01/03(日) 14:50:58.12 ID:UCgs6e4/0.net
>>619
うまくいくメニューもあるのでSafariを前面に持ってくる発想までは至りませんでした
指摘のset frontmost to trueなりあらかじめtell application "Safari" から activateするなりで動作しました
ありがとうございました

621 :名称未設定:2021/02/03(水) 10:19:49.60 ID:KQ/xqyGt0.net
BigSur 11.2
menu itemのclickが動かないので調べたのですが
menu bar itemのclickを入れないといけなくなった
のでしょうか?

今まではメニューバーのプルダウン操作が省けていたのですが、これは書き換える箇所が結構多い...

622 :名称未設定:2021/02/03(水) 15:58:47.32 ID:Ic2O1XWz0.net
そういうのはサブルーチンにしておくと吉。

623 :名称未設定:2021/02/03(水) 17:50:47.54 ID:46Up+eV10.net
まだBig SurにしてないけどCatalinaでも一部そういうとこあったな
clickで表示させないとmenuのevery menu itemが取れなかったり空で返ってくる

624 :名称未設定:2021/03/02(火) 09:21:09.92 ID:wDpi0XMu0.net
SpotifyがMusicほど豊富じゃないけどAppleScript対応しててほぼ同じ記述で操作できて優秀

625 :名称未設定:2021/05/18(火) 08:42:12.19 ID:Ss99saoI0.net
tell application "System Events"
tell application process "ControlCenter"'s menu bar 1's menu bar item "Clock" to click
delay 0.2
try
tell application process "NotificationCenter"'s window "Notification Center"'s scroll area 1's UI element 1's (first button that title ends with "件の通知") to click
end try
end tell

626 :名称未設定:2021/06/22(火) 19:05:24.92 ID:cMqtnmMV0.net
初心者なのですが、画像のようなadobe Illustratorのスクリプトを作りました。
1〜3行目が「プレビュー境界を使用をオン」にするスクリプトで、5行目が「オブジェクトをアウトライン化」するスクリプトです。
この画像のスクリプトを実行すると、1〜3行目の「プレビュー境界を使用をオン」にするスクリプトは正しく実行されるのですが、
5行目の「オブジェクトをアウトライン化」するスクリプトが実行されません。
1〜3行目を実行した後に、5行目を実行して終わるようにするには、どのように記述すれば良いのでしょうか?

5行目のスクリプトを1行目に、1〜3行目のスクリプトを3〜5行目に逆に入れ替えると、
今度は「オブジェクトをアウトライン化」するスクリプトが正しく実行されて、「プレビュー境界を使用をオン」にするスクリプトが実行されません。

https://f.easyuploader.app/20210622185709_52523676.jpg

627 :626:2021/06/22(火) 21:51:56.50 ID:cMqtnmMV0.net
自己解決しました。

app.preferences.setBooleanPreference("includeStrokeInBounds",true);
app.doScript("オブジェクトのアウトライン", "オブジェクトのアウトライン");

でいけました。

628 :名称未設定:2021/06/22(火) 23:15:11.42 ID:X7cS6AcY0.net
やるじゃないか

629 :名称未設定:2021/07/16(金) 06:44:29.52 ID:HGWsaU010.net
AppleScriptというかAdobe ExtendScript?
まあ個人的には歓迎だけど

630 :名称未設定:2021/08/08(日) 22:56:22.99 ID:JHIes/J+0.net
【全ディレクトリ】を範囲とした下記スクリプトから、
放り込んだ単体または複数の「XXX.jpg」で【デスクトップ/その他/写真(サブフォルダ含む)】フォルダ内の「同一ファイル名.jpg」を置換する。
にはどこを書き替えれば良いでしょうか、アドバイスお願いいたします。

on open droppedItem
repeat with obj in droppedItem
tell application "Finder"
set objPOSpath to POSIX path of obj as Unicode text

set savedDelimiters to AppleScript's text item delimiters

set AppleScript's text item delimiters to return
set destinationPaths to text items of (do shell script "originPath=" & quoted form of objPOSpath & "; export LANG=ja_JP.UTF-8; mdfind 'kMDItemFSName == \"'\"$(basename \"$originPath\")\"'\"' | while read path; do [ \"$path\" != \"$originPath\" ] && [ -f \"$path\" ] && [ -r \"$path\" ] && [ -w \"$path\" ] && echo \"$path\"; done | sort")
set AppleScript's text item delimiters to savedDelimiters

try
set AppleScript's text item delimiters to ASCII character 10 -- 10 was LF
set quotedDestinationPaths to quoted form of (destinationPaths as text)
set AppleScript's text item delimiters to savedDelimiters
set theResult to do shell script "echo " & quotedDestinationPaths & "| while read path; do cp " & quoted form of objPOSpath & " \"$path\"; done"
on error
return
end try

end tell
end repeat
end open

631 :名称未設定:2021/08/09(月) 10:39:35.00 ID:0I/Udd1r0.net
現状、何がどううまく動かないのか、どこで何かエラーが出てるのか、はっきり書いた方がいいと思うぞ
単に修正してくれ、ってことなら知らんけど

632 :名称未設定:2021/08/10(火) 18:17:11.63 ID:ukHsgKMs0.net
on open droppedItem
repeat with obj in droppedItem
set aInfo to (info for obj)
if (folder of aInfo) then
open obj
else
openItem(obj, aInfo)
end if
end repeat
end open

on openItem(aItem, aInfo)
if file extension of aInfo is ".jpg" then
tell application "Finder"
set name of aItem to ((name of aInfo) + "-test.jpg")
end tell
end if
end openItem

動作確認していないし、ファイル名をどう変えたいのかわからないが、AppleScriptの伝統的な作法に沿うなら上みたいな感じかな。

633 :630:2021/08/11(水) 01:55:29.24 ID:OQeKQyws0.net
>>631
放り込んだ単体または複数JPEGと同一名.jpgをローカルディレクリ(外付けHDD無視)、もしくは特定のローカルフォルダ(サブフォルダ含む)内で検索し、見つかった場合は「放り込んだファイル」でそれらを置換する、という風にしたいんです。
現状のスクリプトでは外付けHDD含め全てのディレクトリが検索対象となり、「放り込んだJPEGと同一名.jpg」全てを放り込んだファイルで上書きするようになっているので、これをどうにかローカルディレクトリのみ、もしくは外付けHDDを対象から外す、もしくは特定のローカルフォルダ(デスクトップ/"写真"フォルダ)のみ検索対象としたいんです。
>>632
有難うございます!JPEGファイルを放り込むと、extention編集は定義されていません。とエラーが出てしまいます。

634 :名称未設定:2021/08/11(水) 03:35:05.05 ID:9EfFbB4m0.net
>>630 をざっとしか見てないけどmdfindに-onlyin使えばいいんでないの

あと
on run
tell me to open (choose file with multiple selections allowed)
end run
を足せばスクリプトエディタから実行してon openの流れに持っていけるから自分でデバッグしやすいぞ

635 :名称未設定:2021/08/11(水) 03:40:41.96 ID:OGqTSSVM0.net
ふーんと元のスクリプトちょっと見たけど、 mdfind に -onlyin 付けて絞ればいいだけじゃないのと思たわ

636 :名称未設定:2021/08/11(水) 03:40:58.52 ID:OGqTSSVM0.net
かぶったw

637 :名称未設定:2021/08/11(水) 07:44:10.25 ID:4AXkTUL30.net
そんなのAppleScriptじゃない。

638 :名称未設定:2021/08/11(水) 10:41:14.23 ID:hkqgQWrK0.net
ドラドロ使えればいいんだろうし、いっそ本体のshell script部分は別ファイルにしてそれを呼ぶだけにしようぜ
quoted form ofやエスケープが減って目にも優しい

639 :630:2021/08/11(水) 11:19:07.83 ID:OQeKQyws0.net
アドバイスありがとうございます!

do shell script "mdfind -onlyin" & ....と追加しましたが同一名ファイル達は上書きされずHDD直下に放り込んだファイルと白紙のスクリプト名ファイルが保存されてしまいました。検索対象を入れる場所が間違っていますでしょうか?

放り込んだ単体または複数jpgと同一名ファイルをローカルディスク内から探し出し、更新日時の新しい方ではなく、その「放り込んだファイル」でそれら全てを上書きする。
複数ファイルを放り込んだ場合、あるものは該当なし、あるものはいくつかのフォルダから計10枚見つかり全て上書きして閉じる。という感じです。
>>630のままだとバックアップ用の外付けディスクまで探してしまうのでそちらは更新してほしくなくて。。

640 :名称未設定:2021/08/11(水) 12:42:23.41 ID:P+rFa55g0.net
>>630
>>555 に似たような丸投げ質問している人がいるけど…

641 :名称未設定:2021/08/12(木) 07:09:13.94 ID:GSkQIS510.net
>>639
x-man-page://mdfind ←これを右クリック、URLを開いて -onlyin のところを見ろ

642 :名称未設定:2021/08/12(木) 07:14:34.69 ID:GSkQIS510.net
ありゃ、うまく行かないな
エディタ類なら行けるんだけど

643 :名称未設定:2021/08/12(木) 11:42:46.12 ID:sP+PfVx00.net
>>641
ありがとうございます!
mdfind -onlyin ~/desktop/photo 'kMDItemFSName...
とすればフォトフォルダ内のみ置換対象となるという事ですね、トライします!

644 :名称未設定:2021/08/13(金) 00:50:19.75 ID:zpSVx9zJ0.net
おかげさまでmdfind -onlyinからフォルダを指定することができました、そして同一ファイル名.拡張子が見つかった場合は全てをドラドロしたファイルで置換することもできました。
しかし、、主に重複ファイルの有無まとめてドラドロした場合、重複ファイルがあるにも関わらず上書きされない時があるのですが、どこの書き方が悪いでのでしょうか? 検索抽出段階で止まってしまったらという感じなのでしょうか。。

on open droppedItems
repeat with obj in droppedItems
set objPOSpath to POSIX path of obj as Unicode text
set savedDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set destinationPaths to text items of (do shell script "originPath=" & quoted form of objPOSpath & "; export LANG=ja_JP.UTF-8; mdfind -onlyin ~/desktop 'kMDItemFSName == \"'\"$(basename \"$originPath\")\"'\"' | while read path; do [ \"$path\" != \"$originPath\" ] && [ -f \"$path\" ] && [ -r \"$path\" ] && [ -w \"$path\" ] && echo \"$path\"; done | sort")
set AppleScript's text item delimiters to savedDelimiters
if (count of destinationPaths) is 0 then return
try
set AppleScript's text item delimiters to ASCII character 10 -- 10 was LF
set quotedDestinationPaths to quoted form of (destinationPaths as text)
set AppleScript's text item delimiters to savedDelimiters
do shell script "echo " & quotedDestinationPaths & "| while read path; do cp " & quoted form of objPOSpath & " \"$path\"; done"
on error
return
end try
end repeat
end open

645 :名称未設定:2021/08/13(金) 08:53:05.48 ID:EqwPcRuB0.net
実はエラー発生してる可能性
try / on error / return / end try ←これらを全部コメント化 or 削除してやってみたら

646 :名称未設定:2021/08/14(土) 02:38:27.47 ID:ZYo9upXn0.net
コメントアウトさせても同様でした。。
本当に何度も申し訳ありません。
検索・置換するフォルダ指定はできたのですが、重複する(上書き対象があある)同一名ファイルA.jpgと重複しない(上書き対象が存在しない)B.jpgを同時に放り込むと、、それは重複するものがあるかも知れないと一気にドラドロするため、、ハードディスク直下にB.jpgがコピーされてします。そして検出された複数A.jpgへの上書きは行われずに終了します。そしてもう一度それをドラドロすると今度は全て上書きされます。
これはリピート処理がうまく行ってないのでしょうか、例えば上書き対象ファイルがなかったらそこでB.jpgの処理は終了、次はA.jpg。。と命令文をどこかに入れたら解決しますでしょうか?

647 :名称未設定:2021/08/14(土) 02:40:31.20 ID:ZYo9upXn0.net
リピート命令が間違ってる、または、上書き対象がない場合は放り込まれた次のファイルの処理に進む、、を追記すべしでしょうか。。

on open droppedItem
repeat with obj in droppedItem
tell application "Finder"
set objPOSpath to POSIX path of obj as Unicode text
set savedDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set destinationPaths to text items of (do shell script "originPath=" & quoted form of objPOSpath & "; export LANG=ja_JP.UTF-8; mdfind -onlyin ~/desktop 'kMDItemFSName == \"'\"$(basename \"$originPath\")\"'\"' | while read path; do [ \"$path\" != \"$originPath\" ] && [ -f \"$path\" ] && [ -r \"$path\" ] && [ -w \"$path\" ] && echo \"$path\"; done | sort")
set AppleScript's text item delimiters to savedDelimiters
try
set AppleScript's text item delimiters to ASCII character 10 -- 10 was LF
set quotedDestinationPaths to quoted form of (destinationPaths as text)
set AppleScript's text item delimiters to savedDelimiters
do shell script "echo " & quotedDestinationPaths & "| while read path; do cp " & quoted form of objPOSpath & " \"$path\"; done"
on error
return
end try
end tell
end repeat
end open

648 :名称未設定:2021/08/14(土) 03:52:52.80 ID:01kOnNAX0.net
mdfindの結果のチェックをろくにしてない
そらボリューム直下にコピーしちゃうこともありそうだ

...と思ったらこれまで↓削っちゃってるじゃん
if (count of destinationPaths) is 0 then return

649 :名称未設定:2021/08/14(土) 04:13:01.07 ID:VhyPpbNU0.net
>>644
> -onlyin ~/desktop
~/Desktopでは?

>if (count of destinationPaths) is 0 then return
ヒットしない場合、処理終了になっている

650 :名称未設定:2021/08/14(土) 04:24:15.04 ID:VhyPpbNU0.net
あら、ずれたレスだったわ。
repeatにcontinue的なものってないのね。

651 :名称未設定:2021/08/14(土) 06:49:19.77 ID:CwIWCTpN0.net
repeat中の本体を別ハンドラに切り出してpath一つずつ渡した方が良さそう
途中でreturnしても続くし

652 :名称未設定:2021/08/14(土) 12:39:17.92 ID:ZYo9upXn0.net
>>648-650
~/Desktopに直しましたがやはり重複ファイルがない場合は、ボリューム直下にファイルがこぴーされます。それでも定期的に覗いて削除すればいいと思ってますが、やはり二度放り投げないと一度目は処理が取ってしまいます。。
また、
if (count of destinationPaths) is 0 then return
をいれると重複ファイルないものと放り込むと全て処理が止まってしまうので削除したところでした。

単純に、、
「複数ファイルをD&D、同名ファイルがデスクトップ下フォルダ内にあった場合はそれら全てをD&Dしたファイルで上書きする、同名ファイルが他になかった場合は何もしない」をやりたいんですが難しいです。。

>>651
ありがとうございます、調べてトライしてみます。

653 :名称未設定:2021/08/14(土) 22:39:19.37 ID:6WwT44Jx0.net
>>632
が個別のファイルへの処理を別のハンドラに独立させたサンプル。

654 :名称未設定:2021/08/17(火) 09:14:04.61 ID:G0o1vKx30.net
>>646
dropitemsをそのままシェル側に処理させた方が確実で早いから、
dropitemsをシェルに渡すスクリプトと、
シェル側のスクリプト探してきてツギハギしたらいいよ。

655 :名称未設定:2021/08/31(火) 10:45:13.09 ID:RqcjmDf10.net
どなたか教えてください。
複数のキーをAppleScriptで押したいのですが、

tell application "System Events"
key code {63, 111}
end tell

などとやっても反応がありません。
fn+F~を同時に押したい場合はどうかけばいいのでしょうか?

656 :名称未設定:2021/08/31(火) 11:36:51.60 ID:3UX7FjsM0.net
そのキーコンビネーションを処理するアプリプロセスを前面にしてtellしないとダメなんじゃないの

657 :名称未設定:2021/08/31(火) 11:42:32.03 ID:RqcjmDf10.net
>>656
レスありがとう。
System Eventsでは複数のキーを押せないってことですかね?

658 :名称未設定:2021/08/31(火) 11:51:13.79 ID:zSiLgsnc0.net
>key code {63, 111}
は、同時押しではなく、連続打鍵
同時押し可能な modifier key は using {command down, shift down} のようにその後ろに付け加えて書く
fn キーはサポートしてない(アプリもほとんどサポートしてない)ので、やるなら Cocoa API使ってかな

659 :名称未設定:2021/08/31(火) 12:05:51.95 ID:RqcjmDf10.net
>>658
fnキーはサポートされてないんですね。
FN+F12などでボリューム調整したい(調整時にスピーカーマーク?も出るようにしたかった)とおもったんですがAppleScriptでは不可能ですね。
お二方レスをいただいてありがとうございました。

660 :名称未設定:2021/08/31(火) 12:28:56.04 ID:zSiLgsnc0.net
https://eastmanreference.com/complete-list-of-applescript-key-codes
F keys and some of the function keys
fn + Fn はキーコードが変わる。他の modifier key と違って、fn + Fn は元の Fnキー とは別物のキーとなる(仮想キーのような)かな

ボリュームアップキー、ボリュームダウンキー(そういえば元々はそれ専用キーだったな)などのキーコードが分かれば、key code そのキーコード値 だけでよさげかな
だが、上記のとこではわかんないらしい(ので、すでにやってるだろうスピーカーマーク出ない方法でだな)。どこかにあるかもね

661 :名称未設定:2021/08/31(火) 13:02:37.38 ID:RqcjmDf10.net
なぜそんな事をしたいのか?っていうと
CatalinaくらいまではMagic KeyboardのF7~F9キーはiTunesの専用キーみたいな感じだったけど、
いつのまにかミュージックアプリだけを起動してる場合はF7~F9はミュージックアプリに割り当てられてるけど、
Safari等でyoutube等を見てる場合にF7~F9を押すとミュージックアプリではなくyoutubeの再生が止まったり進んだりしてしまう仕様にかわってしまいましたよね。

それが自分的には非常に使いにくいのでファンクションキーを標準のキーとして使う設定にしてその上でF1~F12に個別に割り当てようと思った次第です。

すでにF7~F9はミュージックアプリの専用キーとしてAppleScriptを使って完了しているのですが、ボリュームを操作してもスピーカーアイコンが出る状態で音量変更ができず悩んでいます。

Karabiner-Elementsを使う手を最近考えていますが、先にAppleScriptの方法をやりはじめたのでまずこちらを完了させたいなと思っていました。

662 :名称未設定:2021/08/31(火) 13:36:55.88 ID:po2HlJ8P0.net
いま軽く調べたら140番台に輝度調整はあったからたぶんどっかにあるだろね

663 :名称未設定:2021/08/31(火) 13:55:24.49 ID:TgAkPRdG0.net
>>661
自分の場合はファンクションキーはメディアキーのまま使って、
F8 に tell application "music" to playpause って割り当ててる

普通に F8 を押すと通常動作(メディアキーとして再生停止)、
fn + F8 でミュージック.app 決め打ちの再生停止、みたいな感じ
F8 へのスクリプト割り当ては BTT つこてます

その他のスクリプトはこんなん
tell application "music" to previous track
tell application "Music" to set mute to not mute
tell application "Music" to set sound volume to sound volume - 10

直接の回答じゃなくてごめんね

664 :名称未設定:2021/08/31(火) 14:50:31.10 ID:RqcjmDf10.net
>>663
レスありがとう。
再生停止は私も
tell application "Music"
playpause
end tell
のよう何を使ってるのですが、標準のファンクションキーとして使うをオフオンどちらにしてもミュージックアプリが反応せずyoutubeなどがSafariなどで開いているとそちらが反応してしまいます。
ちなみに私が使ってるのはストアーにあったHotKeyってアプリでAppleScriptをAutomatorのアプリとして登録しています。
BTTならうまくいくんですね。

665 :名称未設定:2021/08/31(火) 18:00:47.59 ID:REaznu+W0.net
>>661
>Catalinaくらいまでは
って書いてるけど、
https://9to5mac.com/2017/11/15/how-to-fix-media-controls-high-sierra/
このことじゃないのかなあ。それっぽいけど
https://github.com/milgra/macmediakeyforwarder
からの
http://beardedspice.github.io/
でどうなんだろ(設定(設定で Media Controllers: を iTunes だけチェックする)

666 :名称未設定:2021/08/31(火) 18:50:31.39 ID:RqcjmDf10.net
>>665
High Sierraからだったんですね。
不便になってからまだ2年程度かと思ってました。

元記事のアプリはサイトごと無くなってますね。
最後に貼っていただいたBeardedSpiceのアプリは残念ながらインテル版なようですね。
こう言う機能って純正でつけて欲しい。

リンクを探してきてくれて大変感謝します。

667 :名称未設定:2021/08/31(火) 20:10:43.07 ID:RqcjmDf10.net
やりたいことができたようなので一応報告を。

Karabiner ElementsでMedia key only control iTunesってのを頂いて中身をiTunes -> Musicにして読み込んだら問題は解決したようです。
最新のVLCで動画やSafariでyoutubeを見ていてF8を押したらミュージックアプリで反応しました。
またボリュームもちゃんとスピーカーの表示も出るようになりました。

みなさんにレスいただいて大変たすかりました。
ありがとうございました。

668 :名称未設定:2021/09/01(水) 02:48:12.55 ID:wJBbbz7D0.net
>>666
>>667で解決、Karabiner Elements使えるなら/使ってるならそちらで解決した方がいいけど、
>元記事のアプリはサイトごと無くなってますね
サイトはなんか無くなってるけど、GitHubにある(名前を変えて)のが、
https://github.com/milgra/macmediakeyforwarder
書かれてる通りディスコンで、オススメされてるのがってとこ。IntelバイナリでもM1ではどっちも動くだろうが、M1バイナリでなきゃってのならフォークしてM1バイナリをもビルドしてくれてる(ビルドしただけらしいけど)、
https://github.com/kalafalas/macmediakeyforwarder
なんてのもある
まあ、スレチでもあるけど、いちおう

669 :名称未設定:2021/09/02(木) 08:53:41.57 ID:45YTd02f0.net
ファンクションキー押下のスクリプトが一応できた
ref. https://stackoverflow.com/questions/10459085/cocoa-simulate-macbook-upper-keys-multimedia-keys

set fkeys to {NX_KEYTYPE_SOUND_UP:0, NX_KEYTYPE_SOUND_DOWN:1, NX_KEYTYPE_BRIGHTNESS_UP:2, NX_KEYTYPE_BRIGHTNESS_DOWN:3, NX_KEYTYPE_MUTE:7, NX_KEYTYPE_PLAY:16, NX_KEYTYPE_NEXT:17, NX_KEYTYPE_PREVIOUS:18, NX_KEYTYPE_ILLUMINATION_UP:21, NX_KEYTYPE_ILLUMINATION_DOWN:22}
set swiftscript to "
let fkey: Int32 = " & NX_KEYTYPE_SOUND_UP of fkeys & "
import AppKit
func fkeydown(_ fkey: Int32, _ down: Bool = true) {
let flags: UInt = down ? 0xa00 : 0xb00
let event = NSEvent.otherEvent(with: .systemDefined, location: NSPoint.zero, modifierFlags: NSEvent.ModifierFlags(rawValue: flags), timestamp: 0, windowNumber: 0, context: nil, subtype: 8, data1: Int((UInt(fkey) << 16) | flags), data2: -1)
event?.cgEvent?.post(tap: .cghidEventTap)
}
fkeydown(fkey)
fkeydown(fkey, false) // fkeyup
"
do shell script "echo " & quoted form of swiftscript & " | swift -"

670 :名称未設定:2021/09/02(木) 11:13:47.97 ID:5WrXhp0J0.net
>>669
すごいスクリプトお疲れ様です。
初歩的なこともわかってないのですが、
これはどのように使えば動くんでしょうか。

671 :名称未設定:2021/09/02(木) 12:04:08.20 ID:45YTd02f0.net
形は一応AppleScriptだからスクリプトエディタにコピペで動くよ(10.15と10.12で試した)
ただ、実質swiftだからXcodeのコマンドラインツール入れてないなら試さない方がいいと思うよ

672 :名称未設定:2021/09/02(木) 12:22:32.67 ID:5WrXhp0J0.net
>>671
教えていだだいてありがとう。
Xcodeはインストールしてないので試さないほうがいいですね。

先日Karabiner Elementsで問題は解決したと上でかいたけど、
スリープが出来ない大問題が発覚してやはりAppleScriptに頼っていますので
音量調整で画面にスピーカーマークが出るようにできないかと情報を集めているので
上のスクリプトは藁をも掴む思いでした。

673 :名称未設定:2021/09/02(木) 19:43:23.37 ID:1P/TjKHA0.net
これはもうアップルスクリプトではないな。

674 :名称未設定:2021/09/03(金) 06:56:32.62 ID:OD40yGhj0.net
書き直してくれてもいいのよ

675 :名称未設定:2021/09/03(金) 12:34:41.20 ID:8bw/FRcK0.net
まあ普通に AppleScriptObjC や JXA で書き直せるわな
元はどうもPythonのをみたいだが、何でSwiftでなんだかというのはある
単なる趣味だろうけど

676 :名称未設定:2021/09/03(金) 13:31:25.54 ID:OD40yGhj0.net
どこまでできるか試したかったってとこは趣味だが、JXAに書き直しても動かなかったからswiftのままなのはしぶしぶだ
10.15だとスクリプトエディタがクラッシュしちゃうんだもん
普通のキーボードイベントで試すと10.12では動くのに、やっぱ10.15だとクラッシュするし

677 :名称未設定:2021/09/08(水) 21:19:29.79 ID:0ZE4zIoy0.net
AppleScriptで、システム環境設定のモニターのカラープロファイルを任意のものに変更ってできないのでしょうか?
出来るなら教えていただけませんか。

678 :名称未設定:2021/09/09(木) 05:32:17.25 ID:noRCRlD+0.net
「変更」はAppleScriptではモロにはサポートしてないよう
GUI Scripting か Cocoa API 使ってで可能だろう

Cocoa API を使ってのは Python で書いてるのがあるからそれを使えば
customdisplayprofiles set /path/to/profile.icc
customdisplayprofiles set --display 2 /path/to/profile.icc
と簡単にできそう

679 :名称未設定:2021/09/22(水) 10:32:20.04 ID:bXvdFaiS0.net
誰か教えていただけませんか。

tell application "Firefox"
activate
tell front window
set bounds to {200, 200, 1000, 1000}
end tell
end tell

これでアプリが起動してウインドウが開いてくれますが、
すでにアプリが起動している場合新規ウインドウを作ってくれません。
その場合DockのFirefoxのアイコンをクリックするとその時にやっと新規ウインドウをつくってくれます。

そうではなく、アプリの起動終了時に関係なく新規ウインドウを作ってくれるようにはできないでしょうか。

680 :名称未設定:2021/09/22(水) 12:34:56.31 ID:9YqPqwoA0.net
アプリただ起動時Dockからアクティベートされた時に新規なのは、
AppleScript関係ない、普通のアプリケーションの挙動
AppleScriptでそうでなくならそう書くそう書けばいいだけ

681 :名称未設定:2021/09/22(水) 12:58:22.37 ID:z6jJoYx20.net
新規Windowを開く命令を書かないと。
その前に、Windowが開かれているかどうかの確認もしてね。

682 :名称未設定:2021/09/22(水) 13:01:02.07 ID:Me0Ba5ZC0.net
楽でいろんな味だしね

683 :名称未設定:2021/09/22(水) 13:03:01.41 ID:2B3UISa90.net
>>679
Dockクリック相当の切り替え命令がないんだよね(俺が知らないだけかもしれんが)
とりあえずこんなんが手軽かな

do shell script "open -a Firefox"
tell application "Firefox"
tell front window
set bounds to {200, 200, 1000, 1000}
end tell
end tell

684 :名称未設定:2021/09/22(水) 13:11:45.76 ID:bXvdFaiS0.net
なかなか難しいですね。
また勉強してきます。

685 :名称未設定:2021/09/22(水) 13:14:01.36 ID:bXvdFaiS0.net
>>683
なるほど。こう書けばいいんですね。
とても参考になります。
Safariだと上ので問題なく開いてたので訳が分からなくて。
レスをいただいた方ありがとうございました。
もっと勉強します。

686 :名称未設定:2021/09/22(水) 13:17:18.56 ID:OLyohgyT0.net
if (count of document) is 0 then make new document 的な話じゃなくて?

687 :名称未設定:2021/09/22(水) 13:26:23.10 ID:9YqPqwoA0.net
>>683
Dockが賢いことして、クリックした時に(アプリケーションをアクティブにするとか関係なく)対象のアプリケーションでドキュメントウィンドウが無いなら New Document AppleEvent を対象アプリケーションに送ってるという例外/Dockというアプリの挙動

アプリケーション起動時に何も無い(プリントもドキュメントを開くも)場合は、New Document AppleEvent を送るというのはOSの仕様
アプリケーション(アクティベート)スイッチでNew Documentを送るというのはOSの仕様にはない

>>679のそのままなら
set needsMakeNewDocument to application id "org.mozilla.firefox" is running
tell application "Firefox"
activate
if needsMakeNewDocument then
tell application "System Events" to keystroke "n" using command down
end if
...
end tell
な感じかなあ。本当は make new document を使いとこだが、document オブジェクトは作れるが、それをどうこう(Windowに結びつける)とかできないのねFireFoxは。ユーザ操作をシミュレート的なのはブツが作られるのに遅延があるから待つかちゃんとチェックが必要になる
open とか アプリケーション実行ファイル直接叩いた方が簡単とかあるよねえ

688 :名称未設定:2021/09/22(水) 13:52:22.13 ID:bXvdFaiS0.net
追加でレスをいただきまして感謝します。
こちらもメモをさせていただき参考にさせていただきます。
ありがとうございます。

689 :名称未設定:2021/09/22(水) 14:01:18.41 ID:5GrL4Kzg0.net
do shell script "open -a Firefox http://about:newtab"

でいけんじゃないの
ちょっと試したところでは

690 :名称未設定:2021/09/22(水) 16:04:24.53 ID:ExR8C57B0.net
Dockが送っているのはreopen命令じゃないのかな。
つまり、
tell app “Firefox” to reopen
で、ウインドウがない場合は新規に開くのでは?

691 :名称未設定:2021/09/23(木) 00:31:56.98 ID:OyEm922H0.net
reopen知らんかったわ
まさにこれだしハンドラも書けんのね

692 :名称未設定:2021/10/03(日) 20:11:30.52 ID:DZtAs1Hd0.net
選択したテキストをスティッキーズに貼り付けてフロートってのをやりたくてAutomatorで作ったんだけど、たまにエラーが出る
delay入れた方がいいのかな
ていうかスティッキーズってスクリプタブルじゃないのね…

on run {input, parameters}
set the clipboard to (input as string)
tell application "Stickies" to activate
tell application "System Events"
tell process "Stickies"
tell window 1
keystroke "n" using command down
keystroke "v" using command down
key down {command, option}
keystroke "f"
key up {command, option}
end tell
end tell
end tell
end run

693 :名称未設定:2021/10/04(月) 08:06:10.72 ID:Jlrrqw800.net
入れた方がいいんじゃない
それと tell window 1 ているの?

694 :名称未設定:2021/10/04(月) 12:07:38.35 ID:pw/ISOAt0.net
キーストロークは安定しないからな…delay入れないとまず失敗する

695 :名称未設定:2021/10/04(月) 14:04:01.00 ID:Y8a8msMW0.net
>>693
なんとなく入れたけど要らないかも
delay気持ち悪いから入れたく無かったんだけど、やっぱ入れた方がいいのね。ありがとう

>>694
やっぱりそうかー
ウインドウフロートできるスクリプタブルなアプリ無いかなあ…

696 :名称未設定:2021/10/04(月) 17:07:00.30 ID:rJKgAjG90.net
delay気持ち悪いのわかるわー
昔の遅いマシンだと全く問題なかったやつが、早いマシンに買い換えたらイラレのドキュメント開く→保存して閉じるに間に合わなくて、スクリプトの書類に対してショートカットキー連発しちゃったりしたからkeystroke ひとつひとつにdelay かける羽目になったことある

697 :名称未設定:2021/10/04(月) 17:45:59.00 ID:JAjLo/A+0.net
サービスに「スティッキーメモを作成」ってのがあるけど

698 :名称未設定:2021/10/04(月) 17:51:21.98 ID:ZbffXIob0.net
>>696
keystrokeとか同期しない、アプリ側での実行の遅延が発生するのはしょうがないな

ちゃんと対象が準備できてるかチェックする待つのがより正しいんだけどな
だけど、最低でも三行かかるし、delayはお手軽にとりあえずいいやなら十分有用
確実性(無駄な待ちを排除するのを含めて)を求めるから、ちゃんとチェックするけど

699 :名称未設定:2021/10/04(月) 17:52:43.68 ID:JAjLo/A+0.net
delayはもう諦めちゃってるわ
自分の環境で動けばいいやと

あとは、メニューバーを直接操作するとdelay不要な場合もある
tell first menu bar's menu bar item "編集"'s menu "編集"'s menu item "ペースト" to click

700 :名称未設定:2021/10/04(月) 22:33:34.45 ID:ZbffXIob0.net
>>692 でなら、どこでエラってるのかはわからんけど、
1) Stickies が(メニューショートカット)キーを受け入れる状態になってない=frontmostにまだなってない
2) 新しいノートウィンドウがまだできてない
の2つかな、ありそうなのは

keystrokeは単に(システム)イベントキューに突っ込むだけ、その後はシステムがfrontmostアプリにイベント振り分けるから基本的に取りこぼしはない
アリそうなのはアプリの準備(ウィンドウの作成とか)がまだとかだが、Command+Nからウィンドウ作ってそのウィンドウの準備が終わるまでが一連の続き仕事にするのは基本的なアプリの形態だから、次のCommand+V(およびCommand+Option+F)は当然その新しいウィンドウに対してのになるはずだと思うけど、Stickiesのような基本的なアプリ形態だろなアプリは

とりあえず、
tell application "Stickies" to activate
tell application "System Events" to tell process "Stickies"
repeat while not frontmost
delay 0.1
end repeat
keystroke "nv" using command down
keystroke "f" using {command down, option down}
end tell
でいいんじゃないのかなあ(うちではfrontmostがfalseにもならないのでどうかだが)

701 :名称未設定:2021/10/14(木) 00:36:21.89 ID:qETglRD80.net
スレチだとは思いつつも書き込みます
DragThingって神ランチャーでしたね
ささっとスクリプト書いて、パッと走らせる、案件ごとにドックを切り替えて上から順番に立ち上げる…
アプリケーションに保存してDOCKから走らせたりしてるんですが、なんかのタイミングで突然「許可されていません」とかごちゃごちゃ言い始めたりしてスクリプト走らせたまま離席して時間無駄にした事がたまーに起こる
スクリプトメニューに登録して解決!だったんだけど、スクリプト使うたび画面右上までカーソール持ってくのが遠い…
案件で分けたら一体どれだけの数のスクリプトがあるのやらって感じでメニューが膨大な量になる
これもう自分好みのランチャー作るためにプログラミング勉強するしかないのか🤪
高卒ジジイには今から勉強するのしんどいよ

702 :名称未設定:2021/10/14(木) 00:42:19.77 ID:KQ4g/0uG0.net
なんか書いて欲しいならそう言っちゃったほうがいいような

703 :名称未設定:2021/10/14(木) 00:43:24.35 ID:qETglRD80.net
ごめん、愚痴です
ついでに聞くならスクリプト大量に回してる人はどんな風に管理してらっしゃるのでしょう

704 :名称未設定:2021/10/14(木) 01:02:31.03 ID:KQ4g/0uG0.net
いやいや、謝るようはことは何もなく…
スクリプトたくさんある人はターミナル使ってると思うので
パスが通ったとこに置いてるだけとか、そんなんじゃないかなって
GUIから起動したいときは、自分ならドックに登録しちゃうかな

705 :名称未設定:2021/10/14(木) 07:15:00.32 ID:kChIEEWW0.net
DragThingの勝手はわからないけど、他の試せばいいじゃん
Keyboard MaestroとかAlfredとかHotKeyとか
HotKeyは無料、App Storeにある

706 :名称未設定:2021/10/14(木) 08:50:21.29 ID:UlOIqcaX0.net
Dragthingは直感的でほんと使いやすかったから仕方ない
キーボードに手を伸ばさずマウスポチだけで済むワークフロー組めたし

707 :名称未設定:2021/10/14(木) 08:59:30.62 ID:e1LncIPT0.net
Dragthing懐かしい
旧MacOSでなんちゃってdockとかやってたなー

708 :名称未設定:2021/10/14(木) 15:18:51.05 ID:UNO1aWZb0.net
>>701
>なんかのタイミングで突然「許可されていません」とか
何かのタイミング は スクリプトに手を加えて保存し最初の起動
許可されていません は アクセス許可を求められる
では?
on run
-- hello
tell application "Finder" to selection
end run
コメントの部分を変えて保存するだけでも直後の最初の起動でFinderへのアクセスの許可を求められる

だったら、バンドル内容を表示 でにある 識別子 をちゃんと設定したら解決する
hogehoge.com とかドメイン持ってるなら com.hogehoge.アプリ名 (アプリ名でなくてもいいけど、そのアプリと識別できるユニークであれば)
ドメイン持ってないなら、local.アプリ名 とか com.example.アプリ名 とかでも問題はまあ無いだろう。バンドル識別子 として そんなの勝手に使う(定義する)のはそのMacを使ってる本人ぐらいだろから
別の要因や許可されていませんという拒否でも効きそうかな

709 :名称未設定:2021/10/14(木) 15:27:04.35 ID:UNO1aWZb0.net
>>708
>だったら、バンドル内容を表示 でにある 識別子 をちゃんと設定したら解決する
以下は無かったことに
これじゃないこれだけじゃない何だったかなあ

710 :名称未設定:2021/10/24(日) 14:18:55.88 ID:L76Lx3uP0.net
メールのルールで、受信したメール本文をcsvに書き出す処理を行いたいのですが、
同じタイミングで複数のメールを受信した時に、処理が1つのメールに対してしか
行われません(A、B、Cのメールを同時に受信した場合、Cに3回処理が行われる)。
以下がソースですが、解決法はあるでしょうか?

using terms from application "Mail"
 on perform mail action with messages messageItem for rule csvRule
  tell application "Mail"
   repeat with messageArr in messageItem
    set contentStr to content of messageArr as string
    set csvStr to do shell script "echo " & quoted form of contentStr & " perl -pe s/\\n/,/"
    do shell script "echo " & quoted form of csvStr & " >> ~/csv.csv"
   end repeat
  end tell
 end perform mail action with messages
end using terms from

711 :名称未設定:2021/10/24(日) 20:42:08.98 ID:9LGvKaBq0.net
IMAP?
POPはググったらあるようにすんなりまともに動くことは無さげ
スクリプトの起動が早すぎ=メールの準備(オブジェクト)が出来上がってない状態で入ってくる感じ
せいぜいトリガー程度で、特別なグループ(メールボックス)に移動させて少し間を置いた後でそのメールボックス内の全てを処理するように別建てかなあ

712 :名称未設定:2021/10/24(日) 21:40:08.21 ID:L76Lx3uP0.net
>>711
IMAPです。
助言していただいたことを参考に、処理済みのメールボックスを用意し、受信をトリガーとして
inboxのlast messageに対してcsv書き出しの処理を実行。その後、処理済みボックスへ移動、
というのをinboxが空になるまでrepeatすることで解決しました。
ありがとうございました。

713 :名称未設定:2021/10/31(日) 05:41:01.18 ID:txbTDThf0.net
Monterey で menubar item 中の window が取れなくなった

tell application "System Events"
tell application process "ControlCenter"
tell menu bar 1
tell menu bar item "Sound"
every UI element
end tell
end tell
end tell
end tell

としても、以前のように output のリストが出なくて {} になる
どう変わったかわかるひといる?

714 :名称未設定:2021/10/31(日) 07:11:36.11 ID:3Qgxxls00.net
まだBigSurだけどwindowってクリックして表示させないと取れなくない?
あとwindowはmenu bar itemじゃなくてprocessが持ってるんじゃないの

tell application "System Events"
tell application process "ControlCenter"
tell menu bar 1's (first menu bar item that name is "サウンド") to click
tell window 1's group 1's scroll area 1's checkbox "外部ヘッドフォン" to click
end tell
end tell

715 :名称未設定:2021/10/31(日) 07:13:06.34 ID:3Qgxxls00.net
3行目はこれで良かったか
tell menu bar 1's menu bar item "サウンド" to click

716 :名称未設定:2021/10/31(日) 17:07:20.08 ID:OQ5GUNEW0.net
>>714
ありがとう、そして雑な例ですまん
書いてくれたものとほぼ同じ

tell application "System Events"
tell application process "ControlCenter"
set btMenu to menu bar item "Sound" of menu bar 1
tell btMenu to click
set btCheckbox to checkbox 1 of scroll area 1 of group 1 of window "Control Center" whose title contains hogehoge
set btCheckboxValue to value of btCheckbox
tell btCheckbox to click
tell btMenu to click
end tell
end tell

ということが BigSur までできていたんだが、今はできなくなった、ということ。

717 :名称未設定:2021/10/31(日) 17:07:38.01 ID:OQ5GUNEW0.net
>>714
ありがとう、そして雑な例ですまん
書いてくれたものとほぼ同じ

tell application "System Events"
tell application process "ControlCenter"
set btMenu to menu bar item "Sound" of menu bar 1
tell btMenu to click
set btCheckbox to checkbox 1 of scroll area 1 of group 1 of window "Control Center" whose title contains hogehoge
set btCheckboxValue to value of btCheckbox
tell btCheckbox to click
tell btMenu to click
end tell
end tell

ということが BigSur までできていたんだが、今はできなくなった、ということ。

718 :名称未設定:2021/10/31(日) 20:41:15.23 ID:3Qgxxls00.net
スクリプトエディタで実行するとエラーメッセージでどこが取れてないか分かるんじゃない
OSバージョン変わるとUI elementの階層とかpropertyが変わってたりすることは良くある

719 :名称未設定:2021/11/02(火) 11:41:49.27 ID:QRbS4Qqj0.net
ズバリ教えてほしいです。
流れはこんな感じ

VLCが起動していて、再生中の場合はVLCを一時停止して(停止ではない) (1)を実行
VLCが起動していて、停止中の場合 (1)を実行
VLCが起動していない場合 (1)を実行

この3つを条件にしたApple Scriptがほしいです。

再生・一時停止は、以下の実行するたびに切り替わります
tell application "VLC"
play
end tell

(1)は以下を使用します
do shell script "pmset displaysleepnow"

どなたか教えていただけませんか。
よろしくお願いします。

720 :名称未設定:2021/11/02(火) 11:59:02.60 ID:pGU9BlJ/0.net
if application "VLC" is running then
-- 起動している
tell application "VLC"
if playing then
-- 再生中
else
-- 再生中でない
end if
end tell
else
-- 起動していない
end if
とか

721 :名称未設定:2021/11/02(火) 11:59:22.94 ID:7syMT4e20.net
要約すると単に(1)を実行すればいいんじゃね

722 :名称未設定:2021/11/02(火) 12:00:41.19 ID:YqqFtmZG0.net
こう?

if application "VLC" is running then
tell application "VLC" to play
end if
do shell script "pmset displaysleepnow"

723 :名称未設定:2021/11/02(火) 12:12:27.25 ID:QRbS4Qqj0.net
みなさん早速ありがとうございます。

>>722
教えていただいたものを実行してみましたが、
再生中の場合は、一時停止してスリープへ移行したのですが、
一時停止中の場合は、再生が開始された状態でスリープへ移行してしまいました。

>>720
教えていただいたものでうまくきそうです。
-- 再生中のところにだけに
tell application "VLC"
play
end tell
でいけそうです。

早々に皆さんにレスをいただきとても感謝です。
ありがとうざいます。

724 :名称未設定:2021/11/03(水) 13:56:42.68 ID:ox4JR8wY0.net
>>723です。
昨日はみなさん貴重なレスをありがとうございました。
教えていただいたものでうまくいっています。

しかし一部に修正したい箇所が出てきました。
現在は
if application "VLC" is running then
-- 起動している
tell application "VLC"
if playing then
-- 再生中
play
else
-- 起動してるが再生中ではない
end if
end tell
else
-- 起動していない
end if
do shell script "pmset displaysleepnow"

を使っていますが、これだとVLCが起動していない時にスクリプトを実行するとVLCが起動していまいます。
たぶんtell application "VLC”のところで起動しているんだと思うのですが、
起動していない時には起動しないようには出来ないですかね。
厚かましいく大変申し訳ないですがどなたかわからないでしょうか。

725 :名称未設定:2021/11/03(水) 15:00:34.27 ID:ox4JR8wY0.net
>>724
解決できたようです。

これまでAutomatorにAppleScriptをアプリケーションにして使っていましたが、
これをクイックアクションに変更して検索対象をVLC.appにすると問題は解決しました。
たくさんスレを消費して申し訳ありませんでした。

教えていただいた方々改めてありがとうございました。

726 :名称未設定:2021/11/03(水) 15:41:13.91 ID:ox4JR8wY0.net
何度もすみません。
問題が解決したと思ったのは私の早とちりでした。

727 :名称未設定:2021/11/03(水) 15:49:32.61 ID:kssODVoN0.net
さっき俺が書こうとしてたトンデモ案

if application "VLC" is running then
-- 起動している
do shell script "echo '
tell application ¥"VLC¥"
if playing then
-- 再生中
play
else
-- 起動してるが再生中ではない
end if
end tell' | osascript"
else
-- 起動していない
end if

728 :名称未設定:2021/11/03(水) 15:52:07.55 ID:kssODVoN0.net
しまった
さっきはSafariで書こうとしてたのにうっかりしてバックスラッシュを化かしてしまった

729 :名称未設定:2021/11/03(水) 16:03:33.54 ID:ox4JR8wY0.net
>>727
なんとレスをいただけるとは思わなかったので嬉しいです。

Autometorでアプリケーションで組み込んでみましたが今のところ思った通りにうごいているようです。
もう少し確認してみますが、早速レスをいただきとても感謝します。
ありがとうございます。

730 :名称未設定:2021/11/03(水) 16:04:14.56 ID:ox4JR8wY0.net
>>728
バックスラッシュは大丈夫です。
お気遣いありがとうございます。

731 :名称未設定:2021/12/17(金) 23:27:06.76 ID:U91KyQsQ0.net
Webページのボタン(など)を押す

on getElementCenter for xpaths by pickerfunc
tell application "Google Chrome" to return execute active tab of front window javascript "
(function (xpaths, pickerfunc) {
const getElementsByXPath = (xpath) => {
const result = []
const xpathResult = document.evaluate(xpath, document)
var item; while((item = xpathResult.iterateNext()) != null)
result.push(item)
return result
}
var elm = null;
for(const xpath of xpaths){
if((elm = getElementsByXPath(xpath).find(pickerfunc)) != null)
break
}
if(elm == null)
return ' '

const rect = elm.getBoundingClientRect()
const zoomRatio = (false)? window.devicePixelRatio : (window.outerWidth / window.innerWidth);
return {x:((rect.left + rect.width / 2) * zoomRatio), y:((rect.top + rect.height / 2) * zoomRatio)}
})(" & xpaths & "," & pickerfunc & ")"
end getElementCenter

732 :名称未設定:2021/12/17(金) 23:27:36.32 ID:U91KyQsQ0.net
on clickElement for xpaths by pickerfunc
repeat 10 times
set elementCenter to getElementCenter for xpaths by pickerfunc
if class of elementCenter is record then exit repeat
delay 0.1
end repeat
if class of elementCenter is not record then error "Can't get element"

set webAreaPosition to missing value
tell application "System Events" to tell process "Google Chrome"
repeat 10 times
try
set webAreaPosition to position of first item of (UI elements of first group of front window whose role is "AXWebArea")
exit repeat
end try
delay 0.1
end repeat
if webAreaPosition is missing value then error "AXWebArea missing"
click at {((first item of webAreaPosition) + (x of elementCenter)), ((second item of webAreaPosition) + (y of elementCenter))}
end tell
end clickElement

733 :名称未設定:2021/12/17(金) 23:35:55.87 ID:U91KyQsQ0.net
Safariでは4箇所変更
2c2
< tell application "Safari" to return do JavaScript "
---
> tell application "Google Chrome" to return execute active tab of front window javascript "
22c22
< })(" & xpaths & "," & pickerfunc & ")" in current tab of front window
---
> })(" & xpaths & "," & pickerfunc & ")"
34c34
< tell application "System Events" to tell process "Safari"
---
> tell application "System Events" to tell process "Google Chrome"
37c37
< set webAreaPosition to position of first item of (UI elements of first scroll area of first group of first group of first tab group of first splitter group of front window whose role is "AXWebArea")
---
> set webAreaPosition to position of first item of (UI elements of first group of front window whose role is "AXWebArea")


「全部」を押す
clickElement for "[ '//a[@class=\"menuitem\"]' ]" by "e => true"
「最新50」を押す
clickElement for "[ '//a[@class=\"menuitem\"]' ]" by "(e, i) => i == 2"


AXWebAreaが現れないのがある。System Event's UI elements中にに存在しない。有るのに)。ウィンドウを前後なぞしたりしたら急に現れるナゾ
でも、まあ、そこそこ確実(+それなりに速い)と思う

734 :名称未設定:2021/12/18(土) 18:15:36.19 ID:36fY0MzD0.net
Google Chrome だと、AXWebArea が System Event's UI elements にねー、
なかなか出てこねー、が顕著なのか

Google Chrome は使ってなくて、Brave Browser を使ってるが、そっちはたまにでWindow前後したりしたら出るんだが
Google Chromeはほそれでは出てこない、Accessibility Inspectorで見る(触る)と出てくるかな、ほぼ確実に
なんだろ。ChromeなのかSystem Eventsなのかどっちが悪いねん。Brave Browser との差異からはChromeぽいけど

どうせ欲しいのはWindow内でのAXWebAreaの位置そしてToolbarなんぞを出したり引っ込めたりしないからだろうから、
position of first group of front window + 定数
でいいか。AXWebAreaがあるんだから使いたいとこだが

検索のちっちゃい検索のためのはWindowのようで、それを考慮すると System Events では、
front window
でなく、
first item of (windows whose subrole is "AXStandardWindow")
がかな。上記のは
position of first group of (first item of (windows whose subrole is "AXStandardWindow")) + 定数

735 :名称未設定:2022/01/15(土) 00:18:15.28 ID:dKjLdNRz0.net
お知恵をお貸しいただけないでしょうか。
スクリプトは見よう見まねで自分用に多少書き替える程度のことはできる、という最低レベルです(基本がわかっていないので応用が効かず……)

Pandocを使ってマークダウン書類をWord書類に変換したく、四苦八苦しています。
ターミナルからのコマンド入力でどうにか成功したものの、毎回入力は面倒です。
Appleスクリプトなら解決できるのではないかとWebをさまよっていたところ、下記スクリプトを見つけました。

https://github.com/nathan-artist/AppleScripts/blob/master/AppleScript%20droplet%20for%20pandoc%20file%20conversion.applescript

早速アプリケーションにしてみました。
成功はしたのですが、ここからがご相談です。

こちら、変換コマンドのオプションが書けるようになっており、オリジナルは
--standaloneなのですが、
--reference-doc=○○.dotx
に変更しました。
マークダウン書類と同一階層に自分で作ったdotx(Wordテンプレート書類)を置いて実行しています。

が、本来Wordのテンプレート格納場所は以下です。

/Library/Group Containers/UBF8T346G9.Office/User Content.localized/Templates.localized/○○.dotx

できればここから引っ張って来たいのです。
が、ファイルパスを書くとエラーが出てしまいます。(ターミナルから入力していたときはパス指定で成功していました)

うまく解決する方法はありますでしょうか。
ちなみに、Wordテンプレートは一種類ではなく、文章の中身によって変えたいです。
よろしくお願いいたします

736 :名称未設定:2022/01/15(土) 00:28:08.80 ID:hOsIgaeq0.net
パスのスペースをエスケープするなり、パス全体をシングルクォーテーションで囲ってはどうか

737 :名称未設定:2022/01/15(土) 03:55:32.83 ID:dKjLdNRz0.net
>>736

スペース含むファイル名のみをシングルクォーテーションで囲ったらなんとかうまくいきました

助かりました、本当にありがとうございました!

738 :名称未設定:2022/01/15(土) 15:17:32.04 ID:hOsIgaeq0.net
よかった

739 :名称未設定:2022/01/21(金) 15:05:48.44 ID:+vjJ+SBs0.net
tell application "Finder"
activate
count item of folder "Macintosh SSD:Users:ユーザーname:downloads"
if the result = 1 then
set Downfile to document files whose name extension is "pdf"
open Downfile
------以下続きます
返された値では
get every document file whose name extension = "pdf"
この様に処理され、デスクトップにあるpdfファイル全てを開く事になってしまいます。

ダウンロードフォルダ内にあるpdfファイルのみを開くにはどのように記述すればよいですか?

740 :名称未設定:2022/01/21(金) 15:53:22.39 ID:IYX9nqAK0.net
開くだけでいいならこれ1行で
do shell script "open ~/Downloads/*.pdf"

741 :名称未設定:2022/01/21(金) 16:05:20.88 ID:+vjJ+SBs0.net
>>740
すごい!!
ありがとうございました。
助かりました。

742 :名称未設定:2022/01/21(金) 18:29:58.94 ID:C9M4mQFu0.net
突き詰めるほどにdo shell scriptが増えてくるのは俺だけ?

743 :名称未設定:2022/01/21(金) 20:14:47.86 ID:gnvHvYbr0.net
楽し過ぎるとバカになる

744 :名称未設定:2022/01/23(日) 10:46:02.79 ID:mSlzWjEh0.net
何度もすみません
ダウンロードフォルダにあるpdfファイルを変数に入れるにはどう書けば良いですか?
set Dfile to document files whose name extension is "pdf" of (path to downloads folder)

エラー
"pdf" of (path to downloads folder)を取り出すことはできません。利用が許されていません。

745 :名称未設定:2022/01/23(日) 11:01:13.58 ID:BkttkSoy0.net
>>744
tell application "Finder"
set Dfile to files of (path to downloads folder) whose name extension is "pdf"
end tell

746 :名称未設定:2022/01/23(日) 11:08:56.30 ID:mSlzWjEh0.net
>>744
なかなか思い通りに動かせなくて困っておりました。
ご親切に教えて頂きましてありがとう御座いました。

747 :名称未設定:2022/02/18(金) 15:22:57.08 ID:69rmkvNs0.net
どなたか教えてください。
特定のフォルダのウインドウサイズと位置をフォルダを開かずにサイズと位置を変更する方法はありませんか?

ウインドウを開く前にウインドウサイズと位置を設定したいです。

748 :名称未設定:2022/02/18(金) 15:49:28.83 ID:6Ai0MkWn0.net
そういうのは.DS_Storeに保存されるんだろうけど、方法ないんじゃないの

749 :名称未設定:2022/02/18(金) 16:19:51.30 ID:YxxZRNHG0.net
>>748
そのファイルはもうお亡くなりになりました…
前にも同様のDS_storeとfinderのwindow位置で書いたわ。

~/Library/Preferences/com.apple.Finder.plist
の消去をするとリセットされるぐらいしか無くて、解決しなかった。
むしろ元に戻ると言う報告もあってお手上げだったよ🤷‍🤷‍♂

750 :名称未設定:2022/02/18(金) 16:42:09.79 ID:69rmkvNs0.net
レスありがとう。
やはり方法はないんですね。

実は、Big Sur以降MontereyでもMacintosh HDのFinderウインドウサイズが再起動するとリセットされてしまい小さなウインドウサイズに変わってしまうバグがあるけど(Time Machineの外付けHDDのウインドウも同じバグが)、
いちいち起動ごとにリサイズするのが面倒なので、今は
Macintosh HDのFinderウインドウを開く -> リサイズ -> 閉じる
ってAppleScriptを作って起動項目にいれてるのですが、
Macの起動時に一瞬ウインドウが見えて消えるのが嫌な感じだな…と思いつつ使っていて何か改善方法はないかと思って質問をしました。

方法がもうないのなら今の方法で対応するしかない感じですね。

751 :名称未設定:2022/02/18(金) 17:36:12.53 ID:dSUuIAx10.net
フォルダアクションで開いた時に修正リサイズするとか

752 :名称未設定:2022/02/18(金) 18:07:24.18 ID:69rmkvNs0.net
>>751
なるほどーその手もあるんですね。
しかしその場合だと開くたびに同じ修正値にリサイズされるので
デフォルトサイズ以外だとリサイズしない設定も加える必要があるでしょうね。
ちょっと頑張ってやってみます。
レスありがとうございます。

753 :名称未設定:2022/02/24(木) 19:50:14.86 ID:k3pqM6dE0.net
質問ばかりで申し訳ありません。
また一つ教えていただきたいのですが、
Macの起動や再起動時に文字入力を英字(A)にしたくて下記のAppleScriptを使っていますがうまく英字にならず日本語になってる事があります。

tell application "Finder"
tell application "System Events"
keystroke ";" using {shift down, control down}
end tell
end tell

tell application "Finder”はあってもなくても動作が思ったようになりません。

どこか手直しすればいいのか、他に何かいい方法(AppleScriptにこだわってはいません)はないでしょうか。

754 :名称未設定:2022/02/24(木) 21:14:12.60 ID:vu02H8Th0.net
tell application "Finder"
は、いらない
フロントアプリ(まあ、Finderなんだろうけど)や、Input Methodの準備が整ってない段階でkeystrokeを発行する時があるんじゃないの
とりあえず delay 60 とか(起動で落ち着くまで)最初に入れてみるとか。それで大丈夫なようだったら、次を考えようw

http://piyocast.com/as/archives/5068
って、Cocoa APIで直接とかあるな。よく読んでないけど、Cocoa APIなら確実性はありそうかな
現在のモードを取得とかもあるんじゃないかな。あるんだったら、準備ができてなくてなら失敗しても待って繰り返すとかできそうかな

755 :名称未設定:2022/02/24(木) 21:24:36.14 ID:vu02H8Th0.net
あ、Cocoa APIじゃなく(Cocoa APIを使った)有志のフレームワーク使ってた
フレームワーク使わずにできるか見てみるわ

756 :名称未設定:2022/02/24(木) 21:39:36.49 ID:k3pqM6dE0.net
>>754
レスありがとうございます。

Finderの部分は必要ないんですね。
最初delayを入れてたけど、効果ないのかなと思って外してたけど
落ち着くまでの適当な秒数入れたほうがいいんですね。

>フレームワーク使わずにできるか見てみるわ
お手数をおかけします。
ありがとうございます。

757 :名称未設定:2022/02/24(木) 21:51:44.65 ID:vu02H8Th0.net
フレームワークで使ってる Core な C API でなく、Objective-C クラスあるやんけ
Objective-C クラスだとなんか問題あるのかな?わからんけどw、書き換えると

set kHiraganaInputSource to "com.apple.inputmethod.Kotoeri.Japanese"
set kEisuuInputSource to "com.apple.inputmethod.Kotoeri.Roman"

set inputContext to current application's NSTextInputContext's currentInputContext
repeat 3 times
set inputContext's selectedKeyboardInputSource to kHiraganaInputSource
delay 1
set inputContext's selectedKeyboardInputSource to kEisuuInputSource
delay 1
end repeat

InputSource名は決め打ちw。まあ変わることは無いだろう
selectedKeyboardInputSource で現在のを取れるし設定できる

758 :名称未設定:2022/02/24(木) 21:54:15.94 ID:L6zf6bwf0.net
似たようなことやりたくて自分はこれ使っちゃった
https://github.com/myshov/xkbswitch-macosx

759 :名称未設定:2022/02/24(木) 22:00:24.99 ID:vu02H8Th0.net
>>757 ということで

use framework "AppKit"

on chaaaaange()
--set kHiraganaInputSource to "com.apple.inputmethod.Kotoeri.Japanese"
set kEisuuInputSource to "com.apple.inputmethod.Kotoeri.Roman"
repeat
set inputContext to current application's NSTextInputContext's currentInputContext
try
set inputContext's selectedKeyboardInputSource to kEisuuInputSource
if inputContext's selectedKeyboardInputSource as text is kEisuuInputSource then return
on error message
return message
end try
delay 1 -- wait for challenge to next time
end repeat
end chaaaaange

chaaaaange()

な感じ?

>>758
そんなのもあるのねえ。実績があるのならそっちかなw

760 :名称未設定:2022/02/24(木) 22:02:16.21 ID:vu02H8Th0.net
>>759
あ、
on error message
return message
は、いらない。あったらリトライせずに終わることもある
なかったら無限になりえるけど、まあ無いだろうし、無限になっても影響は無いだろうw

761 :名称未設定:2022/02/24(木) 22:08:31.20 ID:Tbke4kz20.net
on changeKeyboardLayout(layoutName)
tell application "System Events" to tell process "SystemUIServer"
tell (1st menu bar item of menu bar 1 whose description is "text input") to {click, click (menu 1's menu item layoutName)}
end tell
end changeKeyboardLayout

changeKeyboardLayout("U.S.")

普通にusになるまでインプットソースをロールさせるのがいいんじゃね(拾い物)

762 :名称未設定:2022/02/24(木) 22:16:10.53 ID:vu02H8Th0.net
Objective-C ラスのは、スクリプトエディタ以外で走らせるのは何か準備が必要のようかなあ
とりあえず、オススメはしないw すまん

selectedKeyboardInputSource ってプロパティを見る弄るだけなので俺の好みだけど
以下、どうにか使うようにするのは俺の趣味だな

763 :名称未設定:2022/02/24(木) 22:46:35.58 ID:k3pqM6dE0.net
みなさんこんな時間にも関わらずレスをいただき感謝します。
どれがいいか順番に試してみたいと思います。
しかしみなさん詳しくて頭が下がります。

764 :名称未設定:2022/02/24(木) 22:46:46.77 ID:0nBEATFf0.net
私の環境(BigSur 11.6.4)だとこれで動く
ただ英字のclickに数秒待たされる場合があるのでこまめな切り替え処理には向いてなさそう

tell application id "com.apple.systemevents"
tell application process "TextInputMenuAgent"'s menu bar 2's menu bar item 1
click
--delay 1 --動かない場合があるなら少し遅らせた方が確実かも
tell menu 1's menu item "英字" to click
end tell
end tell

765 :名称未設定:2022/02/24(木) 22:54:34.74 ID:k3pqM6dE0.net
なるほど、どれにしても少し待つ事が重要そうですね。

766 :名称未設定:2022/04/08(金) 12:32:46.92 ID:PPzDmSLN0.net
大量のフォーム入力されたPDFをレーザープリンタにてA4、両面印刷する場面が近々あるのですが、
Appleスクリプトでdo shell scriptで印刷テストしたところ、フォームの内容が全部すっ飛んだ状態でプリントされてしまいました

lpr プリンタ名 -o media=A4 -o landscape-o sides=two-short-edge -o fliplot ファイル

プレビューにてSystem eventでメニューポチ、プリントポチだとdelayが上手くハマらない?場面で失敗してしまい、なかなかうまくいきません

MacOS 10.15.7です
アドバイスお願いします

767 :名称未設定:2022/04/08(金) 12:40:10.43 ID:RbfnIhf60.net
すみません、上のコマンドに-o l入れ忘れてました…
入れてもフォームが全部空っぽになってしまいます

768 :名称未設定:2022/04/08(金) 13:08:18.18 ID:nMu/YqbA0.net
しかもfitplot の綴り間違えてるし
なんか他にも間違えてそう

769 :名称未設定:2022/04/08(金) 19:40:11.61 ID:faKJalEq0.net
>>766
CUI/コマンドでの方がスマートに 見える かもしれないが、macOS/Finderにあるのに使われないw、Print/印刷コマンド使えば
Finder で PDFファイルを選んで、ファイル メニューにあるやつ

> プレビューにてSystem eventでメニューポチ、プリントポチだとdelayが上手くハマらない?場面で失敗してしまい、なかなかうまくいきません
ってやろうとして、コマンドでなのか。だったら、上記のFinderからので良さげのような
なんだったらわざわざAppleScriptでやる必要もないような、その大量の数がわからんけど、そのFinderの使ってのAppleScript書くのはそう難しくはないだろう

770 :名称未設定:2022/04/08(金) 21:08:37.59 ID:faKJalEq0.net
>>769
>Print/印刷コマンド
日本語は 印刷 ではなく プリント だな

Finderのこのコマンドは普通のアプリにあるコマンドと違って、書類ファイルのデフォルトアプリに対して、アプリを起動して ファイルをプリントしろ というの。いつも使ってるダブルクリックなどではそこが ファイルを開け という違いでしかない
それを受け取った大体のアプリは自らの プリント コマンドをデフォで実行して終わったら閉じる という動作

では、Finderで普通のアプリのようにフォルダの中身などを プリント って、変態的なのでしかないのかな?無さげか

771 :名称未設定:2022/04/09(土) 16:44:39.71 ID:7FK1q6ML0.net
Form だけでなく Annotation も事前に Flattening が必要な場合がある感じ

https://github.com/OpenPrinting/cups-filters
filters, backends, cups-browsed, ... - Everything which CUPS needs to be used on non-Mac systems
だが、CUPSはそういうものなんだろう
3) Method of flattening interactive PDF forms and annotations.
って書いてるのが当てはまるのだろう
macOSではなくでこの標準的なフィルターの場合は、
lpr -o pdftopdf-form-flattening=pdftocairo ...
らしいけど、macOSは標準的なのは無いかな。メーカーのドライバにpdftopdfがそれぞれ独自に梱包されてるよう(それも同じではないし、このpdftopdfとも違うかな?)で、lprでプリンタドライバに直接で Form や Annotation を Flattening する/できるのかはプリンタドライバによる感じかな

macOSでPDFファイルを Flattening するのは色々ある。サードパーティの専用的なアプリもあるし、内蔵ではプリントダイアログでの左下のPDF(誰もが使ってるだろうけど)が手動での
自動では、Automatorで イメージから新規PDFを作成 アクションで可能(ドライバがFlatteningしない場合には必要、Finder項目をプリント アクションを使う場合は)、もしくは、Cocoa API / PDFKit を使って少々なコード書くだけで。(他にGhostscript入れてとかあるけど、macOSがPDFベースでわざわざ入れる必要もなんかなとも思わないでもない)
もちろん、FinderでのPrintコマンドでPreviewに印刷させるのが最も簡単だろな

772 :名称未設定:2022/04/09(土) 23:00:30.36 ID:QRdTFCYM0.net
すごく丁寧に詳細に解説ありがとうございます
何言ってるのかさっぱりわかりませんがじっくりゆっくり読み込んで理解できるように努力します

773 :名称未設定:2022/04/09(土) 23:10:56.48 ID:QRdTFCYM0.net
-o l→-o rawに変えると、PDFフォームは出力されるが、両面印刷ができなくなるというところまで辿り着いて、諦めました
プリンタ固有の癖も考慮しなきゃならないと思うと、これ以上悩んでも時間とテストプリントの紙の無駄にもなるので…
今のところプレビューにて、スクリプトでショートカットキーやらせて開く→(プリセットが設定されてる状態で)印刷→閉じるが一番早くて悩まない状態です
プリセットは1枚手でプリントさせれば次からはアクティブの状態がキープできるので、スクリプトの手間もありませんでした
delay 3ぐらいにすればつまづきも少ないようです(ネットワークの遅さがネックになってるおま環問題です
500ファイル強ぐらいなので、走らせて昼飯食ってれば終わると思います
ありがとうございました

774 :名称未設定:2022/04/11(月) 09:48:15.68 ID:ATmLjJRx0.net
XPDFかpopplerでpdfまとめてプレビューで普通に印刷したら?

775 :名称未設定:2022/04/11(月) 13:33:04.25 ID:PaWeGtwE0.net
自分もそう思う

776 :名称未設定:2022/04/11(月) 14:32:23.58 ID:Wcnrw4yS0.net
OS標準機能でPDFを1ファイルにまとめたらフォームの内容が全て同じになってしまったので、この手は使えないと思ってましたが、使い方調べてそれらも検討してみます…ありがとうございます

777 :名称未設定:2022/04/11(月) 17:20:20.81 ID:h3PF/yWa0.net
単に Automator で イメージから新規PDFを作成 アクション だけのアプリを作って、PDFファイル群をまとめて投げれば、Flatteningして(=フォームの内容がそれぞれで固定された=変更不可な)まとまった一つのPDFになるんだけどな

778 :名称未設定:2022/04/11(月) 17:40:08.31 ID:l1IiDpGq0.net
Automatorで出来ることをわざわざ変なレスする奴がいるから

779 :名称未設定:2022/04/17(日) 11:57:32.88 ID:IqiYGdec0.net
macOS Montereyにスクリプトメニューはありますか?
El Capitan 10.11.6から上げようと思うんですが、ないと仕事に支障があるので

780 :名称未設定:2022/04/17(日) 14:17:19.79 ID:qe6SPVxy0.net
BigSurにもあるから多分ある

781 :名称未設定:2022/04/17(日) 17:17:29 ID:IqiYGdec0.net
>>780
そうなんですね、ありがとうございます。
Mac歴は長いんですが、今回五つもOSのバージョンをすっ飛ばすことになるんで、浦島太郎状態です

782 :名称未設定:2022/05/11(水) 03:11:40 ID:PrAv7N8Y0.net
Script Editor\.app、繁体中国語だとこう言う名前なのか。か、かっこいい…。
https://pbs.twimg.com/media/FSW1X7saUAAfeWx.jpg
それと比べると簡体中国語はかなりシンプル。いかにもscript + editorって感じ。
https://pbs.twimg.com/media/FSW4HYIaIAEW83H.jpg

https://twitter.com/1024jp/status/1523823474489573376
 
(deleted an unsolicited ad)

783 :名称未設定:2022/05/25(水) 12:21:20 ID:hDugQYQX0.net
どなたか教えてください

毎回必ず同じAppのウインドウのスクリーンショット(command+shift+4+spaceに該当)を撮ってデスクトップに画像を保存したいのですが

その特定のAppをApp名などで指定してスクショを撮ることは可能でしょうか?
ネットで調べてみてもウインドウ選択のクリックは自分でしないといけないやり方しか見つかりません

784 :名称未設定:2022/05/25(水) 12:48:25 ID:8kZuOFMt0.net
スクショ撮りたい時の状況がよくわかんないけどfrontmostじゃダメなの?

785 :名称未設定:2022/05/25(水) 13:50:36 ID:jmy3uHVm0.net
最近のOSは知らんけど、screencapture コマンドに -l windowid の指定があるから、windowid 調べればいけるぽい
試しにこんなんで(アプリ裏に置いたまま)撮れた、Sierra
on screencapture(appName, winIDList)
repeat with winID in winIDList
do shell script "screencapture -o -l " & winID & " ~/Desktop/" & quoted form of (appName & "-" & winID & ".png")
end repeat
end screencapture
tell application "Terminal"
my screencapture(name, id of every window whose id > 0)
end tell
tell application "BathyScaphe"
my screencapture(name, id of every window whose id > 0)
end tell

786 :名称未設定:2022/05/25(水) 14:10:02 ID:MSYqamd20.net
>>783
例えばSafariの一番上のウインドウを撮る場合はこれでいける

get the id of the front window of application "Safari"
do shell script "screencapture -pl" & space & the result

787 :名称未設定:2022/05/26(木) 15:34:52.37 ID:jERf5BZY0.net
>>785
>>786
ご丁寧にありがとうございます
BlueStacks4といってMacOS上でAndroidを動かすエミュレータのウインドウ内のスクショを撮って
image.pngという名称でデスクトップへ保存したいのですが
その場合は記述はどうなりますか?
WindowIdを調べる方法まで教えていただければ助かります

788 :名称未設定:2022/05/26(木) 18:04:41.28 ID:RfDP2TWo0.net
>>787
スクリプトに対応してればid of front windowで取得できるけど対応してない場合はGetWindowIDを使う方法もある
https://github.com/smokris/GetWindowID

Homebrewでインストールできるけどbrew使えないなら普通にgit cloneでダウンロードしてmakeでインストールすることもできる
やり方分からないなら再度質問して

789 :名称未設定:2022/05/26(木) 18:57:18 ID:OzffMThA0.net
>>788
AppleScript博士、ありがとうございます
一旦いろいろと試してみたいと思います
また分からなかったら質問させてください

790 :名称未設定:2022/06/01(水) 10:13:47 ID:di47BmeQ0.net
>>786
先日はありがとうございました。
いろいろと試しましたがなかなか上手くいかず・・・・

get the id of the front window of application "BlueStacks"
do shell script "screencapture -pl" & space & the result

BlueStacksを起動しているにも関わらず上のコードを実行すると
"Syntax Error" BlueStacks got an error: Can't get id of window1
と出ます。
"Safari" だと仰る通り上手くいきましたが、
スクショの確認プレビューみたいなものが表示され
これをクリックして閉じないとデスクトップへスクショ画像は保存されませんでした。
この確認作業なしで一発でデスクトップへ保存させることは可能ですか?

791 :名称未設定:2022/06/01(水) 10:16:12 ID:di47BmeQ0.net
BlueStacksのidをダイアログで表示してくれるコードも教えていただけると助かります

792 :名称未設定:2022/06/01(水) 10:45:03 ID:di47BmeQ0.net
>>791はplistでデフォルトの設定を変えることで自己解決しました
すみません

793 :名称未設定:2022/06/01(水) 10:46:53 ID:di47BmeQ0.net
get the id of the front window of application "Automator"
do shell script "screencapture -l" & space & the result & " ~/Desktop/test.png"

アプリケーションのところを
AutomatorやSafariにするとうまくいくのですが
BlueStacks(←これの画面キャプを撮りたいです)やFinderとすると
"Syntax Error" BlueStacks got an error: Can't get id of window1
のエラーが出ますね・・・

794 :名称未設定:2022/06/01(水) 10:50:29 ID:di47BmeQ0.net
tell application "BlueStacks" to activate

tell application "System Events" to tell application process "BlueStacks"
try
get the id of the front window of application "BlueStacks"
do shell script "screencapture -l" & space & the result & " ~/Desktop/test.png"
on error errmess
log errmess
-- no window open
end try
end tell


これだとBlueStacksを前面に持ってくるだけでスクショは生成されませんね

795 :名称未設定:2022/06/01(水) 11:01:39 ID:0juhuGfj0.net
>>788の最初に書いてくれてるでしょ。BlueStacksはAppleScriptに対応してない

https://github.com/smokris/GetWindowID
のキモである、CGWindowListCopyWindowInfoはJXAで使える(AppleScriptObjCでは、返り値をAppleScript Objectになんか変換してくれなくて使えない)から、GetWindowIDコマンドを(ビルドして)ではなくでも、AppleScriptだけでもWindow ID手に入れられそうだけど

796 :名称未設定:2022/06/01(水) 11:13:08 ID:di47BmeQ0.net
>>795さん

ありがとうございます。
AppleScriptで一部のアプリは対応できないことってあるんですねorz
なんかAppleScriptだけでは簡単にはできなさそうですね・・・
色々と時間を費やして試しましたが
Githubもよく分かっていない素人なので今回は諦めることにします
ありがとうございました。

797 :名称未設定:2022/06/01(水) 11:45:17 ID:di47BmeQ0.net
なかなか諦めきれず最後の悪あがきです
ユーザーのディレクトリにGetWindowIDのファイル4つをcloneして入れました

tell application "BlueStacks" to activate
do shell script "screencapture -l$(./GetWindowID Simulator 'BlueStacks') test.png"

その上で上記コードをautomatorで試すとBlueStacksは前面に表示されるものの

Syntax Error:
sh: ./GetWindowID: No such file or directory screencapture: no file specified

のエラーが出ます

798 :名称未設定:2022/06/01(水) 11:53:59 ID:0juhuGfj0.net
リストから抽出を手抜き/必要最低限で、
set windowID to run script "(( appName, windowTitle ) => {
ObjC.import('AppKit')
windows = ObjC.deepUnwrap($.CGWindowListCopyWindowInfo($.kCGWindowListExcludeDesktopElements, $.kCGNullWindowID)).filter((window) => window[$.kCGWindowLayer.js] == 0 && window[$.kCGWindowOwnerName.js] == appName && window[$.kCGWindowName.js] == windowTitle )
return (windows.length == 0)? undefined : windows[0][$.kCGWindowNumber.js]
})('BlueStacks', '')" in "Javascript"
if windowID is not "undefined" then do shell script "screencapture -l " & windowID & " -o ~/Desktop/aaa.png"

判断するのにウィンドウタイトルが Empty String なのはヤバいwが、まあ、しょうがないとりあえず問題なさげ

>>797
./GetWindowID
./ に、GetWindowID という実行ファイル/コマンドが無いってだけ(do shell script working directory は / なので 起動ボリューム直下だな)
ちゃんとGetWindowIDへのパス指定する

799 :名称未設定:2022/06/01(水) 12:06:11 ID:di47BmeQ0.net
>>798さん
とりあえずgit cloneしてターミナルで

Mac:GetWindowID admin$ ./GetWindowID BlueStacks ''
と実行すると
1222


どこからでも実行できるようにopen .bash_profileで
設定を開き末尾にexport PATH=$PATH:/Users/admin/GetWindowIDを追加し保存しました

その後ターミナルで
Mac:~ admin$ ./GetWindowID BlueStacks ''
を実行するも
-bash: ./GetWindowID: is a directory
と出てしまいます
パスが上手く通らないですね

800 :名称未設定:2022/06/01(水) 12:14:39 ID:0juhuGfj0.net
run script in "Javascript" で undefined だと、"undefined'が返ってくるんではなくて、返り値はない、そしてそれを収めようとした変数(windowID)も無くなるのか(!?)...
納めないだけなら前に missing value でも入れとけばと思ったのに、変数が消されるのはナゾいw

>>799
do shell script は bash_profile とかそんなの読まない、思いっきり素の実行環境
do shell script "printenv" とかして、確認してみ。フルパスでという意味でのパス指定だったんだが。他にかっこいいのはAppleScriptファイルをパッケージにしてそこに入れてそこのパスを得てとかあるだろうけどw

801 :名称未設定:2022/06/01(水) 12:19:12 ID:0juhuGfj0.net
ああ、「その後[ターミナルで]」なのか
単にPATHの設定が間違ってるだけのようだが、何をやってるのかイマイチわからんな。頑張れ。単にPATHの設定が間違ってるだけだから

802 :名称未設定:2022/06/01(水) 12:22:36 ID:di47BmeQ0.net
>>800

とりあえずパスを通しました
今はターミナルでどのディレクトリにいても
GetWindowID BlueStacks ''
を実行するとWindowIDが返ってくるようになりました

あとは
tell application "BlueStacks" to activate
do shell script "screencapture -l$(GetWindowID BlueStacks \"\") test.png"
をautomatorで走らせると
sh: GetWindowID:command not found
screencapture:vno file specified

とでます

803 :名称未設定:2022/06/01(水) 12:27:52 ID:0juhuGfj0.net
>do shell script は bash_profile とかそんなの読まない、思いっきり素の実行環境
>do shell script "printenv" とかして、確認してみ
なんだよ、とりあえずAppleScriptではとは別にターミナルではでないのかよ
そこはフルパスで書きやがれw

804 :名称未設定:2022/06/01(水) 12:29:00 ID:7JwrMgQ40.net
色々迷走してるみたいだけどとりあえず何も考えないでターミナルでこれ実行してみ

git clone https://github.com/smokris/GetWindowID
cd GetWindowID
make

そしたらホーム>GetWindowIDフォルダの中にGetWindowIDできてるはずだから

~/GetWindowID/GetWindowID BlueStacks 'ウィンドウの名前'

で ID は得られる
ウインドウの名前が分からないんなら

~/GetWindowID/GetWindowID BlueStacks --list

で一覧が出る

スクリーンショット撮りたいんなら無理にAppleScript使うよりターミナルで

screencapture -pl $(~/GetWindowID/GetWindowID BlueStacks 'ウィンドウの名前')

の方が簡単、do shell scriptでも実行できる

805 :名称未設定:2022/06/01(水) 12:32:15 ID:0juhuGfj0.net
コマンドの引数はよく読んでなかったかウィンドウタイトルなのか
なんだw ウィンドウタイトルは Empty String だね、BlueStacksは

806 :名称未設定:2022/06/01(水) 12:40:06 ID:di47BmeQ0.net
>>804
ありがとうございます
あと少しで達成できそうです

私の環境ではどのディレクトリからも
GetWindowID BlueStacks ""
を実行すると上手くいくので下記のようにターミナルで実行しました


Mac:~ admin$ screencapture -pl $(GetWindowID BlueStacks 1221)
すると
files where to save the screen capture, 1 file per screen
のエラーが出ます

807 :名称未設定:2022/06/01(水) 12:41:23 ID:di47BmeQ0.net
ファイル名を指定してもダメですね

Mac:~ admin$ screencapture -pl $(GetWindowID BlueStacks "") test.png

could not create image from window

808 :名称未設定:2022/06/01(水) 12:43:51 ID:di47BmeQ0.net
Mac:~ admin$ screencapture -pl 1221 test.png

というように
$(GetWindowID BlueStacks "") ではなく 1221と指定すると上手くいきます

ただし何故かファイル名はtest.pngになっていません・・・

809 :名称未設定:2022/06/01(水) 12:48:44 ID:zTspiBBe0.net
それ変だな
-p指定すると自動的に「スクリーンショット 2022-06-01 12.xx.xx」みたいなファイル名付いていくらでも撮れるはずなんだけど

810 :名称未設定:2022/06/01(水) 12:48:59 ID:0juhuGfj0.net
on captureWindow(appName, windowTitle)
set windowID to run script "((appName, windowTitle) => {
ObjC.import('AppKit')
windows = ObjC.deepUnwrap($.CGWindowListCopyWindowInfo($.kCGWindowListExcludeDesktopElements, $.kCGNullWindowID)).filter((window) => window[$.kCGWindowLayer.js] == 0 && window[$.kCGWindowOwnerName.js] == appName && window[$.kCGWindowName.js] == windowTitle)
result = (windows.length == 0)? undefined : windows[0][$.kCGWindowNumber.js]
return (result == undefined)? 'undefined' : result
})('" & appName & "', '" & windowTitle & "')" in "Javascript"
if windowID is not "undefined" then do shell script "screencapture -l " & windowID & " -o ~/Desktop/aaa.png"
end captureWindow

captureWindow("BlueStacks", "")

とりあえず自己満終了

811 :名称未設定:2022/06/01(水) 12:52:04 ID:di47BmeQ0.net
>>810
AppleScriptだけで完結しましたね
匠の技です!!
ありがとうございます

812 :名称未設定:2022/06/01(水) 13:38:31 ID:di47BmeQ0.net
>>810

もう1つだけいいですか?
デフォルトだとpngで保存されますが
-t の引数を加えて jpgにしたい場合は
どのように追記すればよいでしょうか?


他の皆様がたも本当にありがとうございました

813 :名称未設定:2022/06/01(水) 14:11:34 ID:1qZ0SDTG0.net
アホの子なのか

814 :名称未設定:2022/06/04(土) 08:36:24.01 ID:pv54IFkW0.net
>>813
微妙に回答者をばかにしてる感もあってちょっとね
業者とかでしょこの人

815 :名称未設定:2022/06/04(土) 15:13:37.27 ID:6dBzCmWk0.net
業者というかパソコンの大先生な感じ

816 :名称未設定:2022/06/09(木) 16:14:10 ID:L1ZPlsBE0.net
5ちゃんなんだから、さっさと教えろこのクズ、ゴミ共!
とか言ってくれないと🤣

817 :名称未設定:2022/06/09(木) 16:16:05 ID:OSIDYA6M0.net
目的は達成できたんだから良かったやん

818 :名称未設定:2022/07/08(金) 22:06:14 ID:ocR58vSg0.net
どなたか教えていただけませんか。
ログイン項目に下記の2つをAutomatorに入れて登録しています。

1)
tell application "System Events"
set volume output volume 40
end tell

2)
tell application "System Events"
keystroke ";" using {shift down, control down}
end tell

どちらも正常に動作するのですが、(2)の方が実行された時にシステム環境設定で設定してある通知音がなってしまいます。(1はなりません)

1と2両方ともSystem Eventsなのになぜ2だけなるのかわかりませんが、
2もならないようにして文字入力を英字に変更したいのですが、何か良い方法があればおしえていただけませんか?

AppleScriptにこだわっているわけではありません。
シェルスクリプトでもならなければかまいません。(スレ違いになってしまいますが)

誰かわかるかたいませんか。
よろしくお願いします。

819 :名称未設定:2022/07/08(金) 22:20:23 ID:5bvQpJxv0.net
> keystroke ";" using {shift down, control down}

これってそもそもなんらからのキー入力を受けるアプリが対象じゃないとダメじゃないの

820 :名称未設定:2022/07/08(金) 22:50:27 ID:ERmVTA230.net
>>818
悩みと関係ないけど1)は tell application "System Events" する必要ないよ

821 :名称未設定:2022/07/09(土) 00:34:19 ID:LAmToGDG0.net
>>818
2)は、Automatorやスクリプトエディタから実行すると鳴らないけど、アプリにして実行すると確かになぜか警告音鳴りますね。

■方法1:実行時にミュートする

set volume with output muted
-- ここで2)をやる
set volume without output muted

■方法2:cliclickでkeystrokeと同じことをやる
cliclickはキーやマウスイベントをコマンドラインで実行できます。→ https://github.com/BlueM/cliclick

cliclick kd:ctrl,shift 't:;' ku:ctrl,shift

ただ私の環境だと「Sorry, cliclick cannot handle your keyboard layout, so emulating typing is not possible.」と失敗する時がありました。

■方法3:メニューを直接操作する
基本は >>764 に書いた方法ですが、かなり待ちが発生してしまう場合があるので上述のcliclickと組み合わせます

set target_mode to "英字"
tell application id "com.apple.systemevents" to tell application process "TextInputMenuAgent"'s menu bar 2's menu bar item 1
if description is target_mode then return --既に選択済み

--click --だと数秒待たされる場合がある
set pos to position
set pos_param to "=" & ((item 1 of pos) + 18) & ",=" & ((item 2 of pos) + 10)
do shell script "/usr/local/bin/cliclick -r m:" & pos_param & " c:+0,+0 p"

tell menu 1's menu item target_mode to click
end tell

822 :名称未設定:2022/07/09(土) 07:37:37 ID:2iTzH2fB0.net
おはようございます。
>>820
必要なのかと思っていましたが消しても動作しました。
シンプルになってうれしいです。ありがとうございます。

>>821
いくつも例をだしていただいてありがとうございます。
しかし今の私にはかなり高度なものなので一つ一つ解析して試してみます。
簡単なのは1なようですが他も試してみたいです。
教えていただきありがとうざいます。

823 :名称未設定:2022/07/10(日) 05:07:18 ID:oxfW9n8l0.net
>>819
ダメではないけど、アプリで入力状態じゃないと警告音は鳴るな、直接キーボード叩いても
なので、AppleScriptで書いてもやっても、鳴っても当然と言えば当然だな、うちでは

volumeの変更はAppleScriptが対応してる、
文字入力を英字に(Input Sourceの変更)は対応してないので、単にキーボードをシミュレートして叩いてるだけ
と全然違う

直接Input Sourceの変更をAppleScriptでやればいいだけでもある。Input Sourceの変更を直接はAppleScriptでは対応してないけど
コマンドがあるよう(https://github.com/minoki/InputSourceSelector とか)なのでビルドして使うとか。試してないけど
AppleScriptObjCで書くとかかな(数行かなあ)

824 :名称未設定:2022/07/10(日) 05:29:06 ID:oxfW9n8l0.net
デジャブ感が芽生えてきて見たら、上にあるじゃん
だったという

825 :名称未設定:2022/07/11(月) 18:43:13.81 ID:xyBDGQLc0.net
on inputSourceSelect(inputSourceID)
run script "//
ObjC.import('Carbon')
inputSourcesProperties = { TISPropertyInputSourceID: '" & inputSourceID & "' }
if(!(inputSources = $.TISCreateInputSourceList(inputSourcesProperties, true)).isNil() && inputSources.count > 0)
$.TISSelectInputSource(inputSources.js[0])
" in "JavaScript"
end inputSourceSelect

inputSourceSelect("com.apple.inputmethod.Kotoeri.Roman")

826 :名称未設定:2022/07/11(月) 21:58:39 ID:xyBDGQLc0.net
on inputSourceSelect(inputSourceName)
run script "//
ObjC.import('Carbon')
propertiesFilter = {}
propertiesFilter[$.kTISPropertyLocalizedName.js] = '" & inputSourceName & "'
if(!(inputSources = $.TISCreateInputSourceList(propertiesFilter, false)).isNil() && inputSources.count > 0)
$.TISSelectInputSource(inputSources.js[0])
" in "JavaScript"
end inputSourceSelect

inputSourceSelect("英字")
inputSourceSelect("ひらがな")
inputSourceSelect("ABC")
inputSourceSelect("日本語")

827 :名称未設定:2022/07/12(火) 12:09:31 ID:VpN2OIYJ0.net
Xcode14(Beta3)で、Applescriptの新規作成タグがなくなったのだが
使えるようにする方法知ってる人いないかな?
(他力本願全力ですまん)

828 :名称未設定:2022/07/12(火) 13:36:46 ID:IAvl/61+0.net
run script "//
ObjC.import('Carbon')
ObjC.bindFunction('TISGetInputSourceProperty', ['id', ['id', 'id']], 'TISGetInputSourceProperty')

enabledOnly = true
resultList = []
propertiesFilter = {}
ii = undefined
propertiesFilter[$.kTISPropertyLocalizedName.js] = 'Romaji'
for(inputSource of $.TISCreateInputSourceList($(), !enabledOnly).js){
properties = {
name: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyLocalizedName).js,
id: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceID).js
/*
,
category: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceCategory).js,
type: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceCategory).js,
'ascii capable': $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsASCIICapable).js,
enabling: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsEnableCapable).js,
selecting: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsSelectCapable).js,
enabled: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsEnabled).js,
selected: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsSelected).js,
'bundle id': $.TISGetInputSourceProperty(inputSource, $.kTISPropertyBundleID).js,
'mode id': $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputModeID).js,
languages: ObjC.deepUnwrap($.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceLanguages)),
icon: (((url = $.TISGetInputSourceProperty(inputSource, $.kTISPropertyIconImageURL)).isNil())? $() : url.path).js
*/

829 :名称未設定:2022/07/12(火) 13:36:56 ID:IAvl/61+0.net
}
for(key in properties){ // convert undefined to null for missing value in AppleScript
if(properties[key] == undefined)
properties[key] = null
}
resultList.push(properties)
}
resultList
" in "JavaScript"

830 :名称未設定:2022/07/12(火) 13:44:49 ID:IAvl/61+0.net
(テストでやっていたゴミが残ってたので再。すまん)
run script "//
ObjC.import('Carbon')
ObjC.bindFunction('TISGetInputSourceProperty', ['id', ['id', 'id']])

enabledOnly = true
resultList = []
for(inputSource of $.TISCreateInputSourceList($(), !enabledOnly).js){
properties = {
name: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyLocalizedName).js,
id: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceID).js
/*
,
category: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceCategory).js,
type: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceCategory).js,
'ascii capable': $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsASCIICapable).js,
enabling: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsEnableCapable).js,
selecting: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsSelectCapable).js,
enabled: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsEnabled).js,
selected: $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceIsSelected).js,
'bundle id': $.TISGetInputSourceProperty(inputSource, $.kTISPropertyBundleID).js,
'mode id': $.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputModeID).js,
languages: ObjC.deepUnwrap($.TISGetInputSourceProperty(inputSource, $.kTISPropertyInputSourceLanguages)),
icon: (((url = $.TISGetInputSourceProperty(inputSource, $.kTISPropertyIconImageURL)).isNil())? $() : url.path).js
*/
}

831 :名称未設定:2022/07/12(火) 13:44:56 ID:IAvl/61+0.net
for(key in properties){ // convert undefined to null for missing value in AppleScript
if(properties[key] == undefined)
properties[key] = null
}
resultList.push(properties)
}
resultList
" in "JavaScript"

832 :名称未設定:2022/07/12(火) 21:19:51 ID:rTP1U/ED0.net
>>827
>新規作成タグがなくなった
タグ??と思ったら、テンプレートのことかな?
https://developer.apple.com/documentation/Xcode-Release-Notes/xcode-14-release-notes
Templates
Resolved in Xcode 14 Beta 3
The Cocoa AppleScript application template has been removed in Xcode 14. (20633478)
これのことでしょ?だったら、前のテンプレートを自分で調整して流用すればいいだけのようでもあるかな

833 :名称未設定:2022/07/12(火) 21:45:08 ID:rTP1U/ED0.net
>>827
Beta だし。まだ間もないし。Cocoa AppleScript applicationなんての使ってるのはほとんどいないだろうし(すまんw)。対応方法をなんてWeb上でどこぞの誰かが書いてくれたのなんてまだ無いだろう
と思ったが、ダメ元でググったら、僅か1件(ググり方が悪いのかもしれないが)あった
https://scriptingosx.com/author/ab/
(からの
https://twitter.com/bynkii/status/1536763346237771778
)
とりあえずコピーだけでいいらしいよ

本当かは試してない。また、Xcode.appに突っ込むのではなく、~/Libraryか/Libraryの下の適切なとこにコピーでいいはずのだったような
(deleted an unsolicited ad)

834 :名称未設定:2022/07/13(水) 08:10:41 ID:hHg40Uc90.net
>>831, 832
ありがとうございます。試してみます。

すまんな、AppleScriptが好きなもんで優先的に使ってる。

835 :名称未設定:2022/07/14(木) 21:05:42 ID:5EVwJpoP0.net
教えてください。
Safariの場合だと

do shell script "open -a Safari"
tell application "Safari"
tell front window
set bounds to {0, 0, 1000, 1000}
end tell
end tell

と書けばウインドウサイズを変更出来ますが、Tweetbotだと
Tweetbotでエラーが起きました: bounds of window 1を{0, 0, 1000, 1000}に設定できません。
と構文エラーになります。
うまくリサイズさせるにはどうさればいいのでしょうか?

836 :名称未設定:2022/07/15(金) 00:58:33 ID:GeWbnRH/0.net
>>835
Tweetbot が AppleScript に対応してないんじゃないの
https://gist.github.com/bewebste/3558576
とかあるけど、対応してないからっぽいけど

AppleScript に対応してないアプリでも System Eventsで可能ではる。いわゆる GUI scripting というので。上記のもそれ。Windowのぐらいだったら GUI scripting というほど変わりはそんなにないけど

Finderをサンプルにすると
・真っ当な(w)AppleScript
tell application "Finder"
set bounds of window 1 to {0, 23, 1000, 1000}
end tell
・GUI scriptingだと
tell application "System Events"
tell process "Finder"
set position of window 1 to {0, 23}
set size of window 1 to {1000, 1000}
end tell
end tell
(見れる触れるwindowオブジェクトの違いとかあるけど。まあ、そのやりたいことでは違いはなさそうだけど)

837 :名称未設定:2022/07/15(金) 01:22:19 ID:GeWbnRH/0.net
https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/AutomatetheUserInterface.html
Automating the User Interface
Unfortunately, not every Mac app has scripting support, and those that do may not always have scripting support for every task you want to automate. You can often work around such limitations, however, by writing a user interface script, commonly called a UI or GUI script. A user interface script simulates user interaction, such as mouse clicks and keystrokes, allowing the script to select menu items, push buttons, enter text into text fields, and more.

ちゃんとドキュメントあった。あったのねえということで

838 :名称未設定:2022/07/15(金) 07:10:32 ID:Xjc3wZxI0.net
>>836
教えていただいたコードの両方でエラーがでてリサイズ前にあぷりの起動もしませんでした。

前者のコードでのエラーは
アクション“AppleScriptを実行”でエラーが起きました: “System Eventsでエラーが起きました: process "Tweetbot"を{0, 23}に設定できません。”

System Eventsでエラーが起きました: process "Tweetbot"を{0, 23}に設定できません。

後者は
アクション“AppleScriptを実行”でエラーが起きました: “Tweetbotでエラーが起きました: bounds of window 1を{0, 23, 1000, 1000}に設定できません。”

Tweetbotでエラーが起きました: bounds of window 1を{0, 23, 1000, 1000}に設定できません。

です。
これはおっしゃる通りTweetbotがApplescriptに対応してないと考えた方がいいのでしょうかね。

839 :名称未設定:2022/07/15(金) 08:32:37.16 ID:IjKKfs6p0.net
AppleScriptの適応はアプリ開発者が取捨選択して作り込むものだから全ての機能が全てのアプリで使えるというわけじゃないからな
用語説明に載ってないコマンドやプロパティはそのアプリでは基本的に使えないと考えて良い

840 :名称未設定:2022/07/15(金) 09:09:29.61 ID:xqmvlrtP0.net
AppleScript 対応アプリとは、アプリを作る人がめっちゃ意識し、対応するコードを書きまくってやっとできる

AppleScript 非対応アプリに対する、System Events での GUI Scripting は、対象アプリが「全く」AppleScript を意識して書かれても(全く関するコード書いてなくても)、GUI Scripting によってアクセス操作できる
AppleScript 非対応アプリでも、applicationオブジェクトに対する基本的な操作、情報取得ができるのは同じような理由から
理由=AppleScript対応での操作対象はアプリコードが管理してるモノ、AppleScript非対応でも可能なのはOSが管理してる管理できるモノ
GUI Scriptingでも操作、情報取得できないのは、GUIパーツなどをCocoa APIを素直に使わず独自で構築してたりする特殊および稀になアプリぐらいでしかない

>>838
前後が逆だと思うが、GUI Scriptingで可能なんじゃないの。単にテストコードが失敗してるだけじゃないの
それか、Tweetbotがよほど特殊な作り方をしてるかだが、そんなことないんじゃないかなあ
GUI Scriptingのさわり(あのコードの意味、他のAppleScript非対応アプリに対して動いたかどうかとか)を理解してる?

841 :名称未設定:2022/07/15(金) 09:34:38 ID:xqmvlrtP0.net
>>840
>対象アプリが「全く」AppleScript を意識して書かれても
対象アプリが「全く」AppleScript を意識してなく書かれても

AppleScript対応してるかどうかは、スクリプトエディタのライブラリに対象アプリを追加してみるといいよ
追加できれば AppleScript 対応、AppleScript 非対応であれば
項目を追加
この項目はスクリプトに対応していないため、追加できません
(とかって)と出るから

繰り返すけど、AppleScript 非対応でも GUI Scripting でアクセス操作可能なのがほとんど。AppleScript対応非対応とは別に、GUI Scripting でもアクセス操作できない変な作りのアプリwかどうかって話になるね

842 :名称未設定:2022/07/15(金) 09:51:52 ID:Xjc3wZxI0.net
お二人さんレスありがとうございます。

理由はわかりませんが GUI scriptingだと の方でリサイズができるようになったようです。
最初やってた時はだめだったのですが。
ちゃんと動いてくれて大変助かります。

詳しいレスをいただきありがとうございました。

843 :名称未設定:2022/07/15(金) 10:14:30 ID:kd6g65vO0.net
全く何も理解しようとしなさげ

844 :名称未設定:2022/07/21(木) 09:28:55 ID:la0xntoz0.net
よく理解できてなくても使える
それがAppleScript

だけどそれじゃ限界あるのよね
修業あるのみ

845 :名称未設定:2022/07/26(火) 18:57:27.86 ID:5rzKifzk0.net
run script "//
ObjC.import('CoreGraphics')
ObjC.bindFunction('_CGSDefaultConnection', ['int', []])
ObjC.bindFunction('CGSCopyManagedDisplaySpaces', ['id', ['int']])
result = (result = ObjC.deepUnwrap( $.CGSCopyManagedDisplaySpaces($._CGSDefaultConnection()))) == undefined ? null : result
" in "JavaScript"

846 :名称未設定:2022/07/26(火) 18:57:54.72 ID:5rzKifzk0.net
run script "//
(() => {
ObjC.import('CoreGraphics')
ObjC.bindFunction('_CGSDefaultConnection', ['int', []])
ObjC.bindFunction('CGSCopyManagedDisplaySpaces', ['id', ['int']])

if((spaces = ObjC.deepUnwrap($.CGSCopyManagedDisplaySpaces($._CGSDefaultConnection()))) == undefined)
return null
const currentSpaceID = spaces[0]['Current Space'].ManagedSpaceID
let numDesktops = 0
let currentSpaceNum = undefined
let simpleSpaces = spaces[0].Spaces.reduce((result, space) => {
let name = null
let appName = null
if(space.type == 0)
name = 'Desktop ' + (++numDesktops)
else if(space.type == 4){
name = space.TileLayoutManager.TileSpaces[0].name
appName = space.TileLayoutManager.TileSpaces[0].appName
}
result.push({ name: name, appName: appName })
if(space.ManagedSpaceID == currentSpaceID)
currentSpaceNum = result.length
return result
}, [])
return {currentNumber: currentSpaceNum, spaces: simpleSpaces}
})()
" in "JavaScript"

847 :名称未設定:2022/07/28(木) 19:04:47 ID:H/GGiQZA0.net
run script "//
ObjC.import('CoreGraphics')
ObjC.bindFunction('SLSMainConnectionID', ['int', []])
ObjC.bindFunction('SLSCopyManagedDisplaySpaces', ['id', ['int']])
result = (result = ObjC.deepUnwrap( $.SLSCopyManagedDisplaySpaces($.SLSMainConnectionID()))) == undefined ? null : result
" in "JavaScript"

848 :名称未設定:2022/08/03(水) 01:44:35 ID:0bp/Cggr0.net
// Mission Control で Current Space の指定移動

ObjC.import('AppKit')
ObjC.bindFunction('SLSMainConnectionID', ['int', []])
ObjC.bindFunction('SLSCopyManagedDisplaySpaces', ['id', ['int']])

function spacesInfo() {
let spaces = ObjC.deepUnwrap($.SLSCopyManagedDisplaySpaces($.SLSMainConnectionID()))
if(spaces == undefined)
return undefined
const currentSpaceID = spaces[0]['Current Space'].ManagedSpaceID
let numDesktops = 0
return spaces[0].Spaces.reduce((result, space) => {
let name = undefined, appName = undefined
if(space.type == 0)
name = "Desktop " + (++numDesktops)
else if(space.type == 4){
const deepInfo = space.TileLayoutManager.TileSpaces[0]
name = deepInfo.name
appName = deepInfo.appName
}
result.spaces.push({ name:name, appName:appName })
if(space.ManagedSpaceID == currentSpaceID)
result.currentNumber = result.spaces.length
return result
}, { currentNumber:undefined, spaces:[] })
}

849 :名称未設定:2022/08/03(水) 01:45:28 ID:0bp/Cggr0.net
function switchSpaceBy(spaceNumberer){
const spaces = spacesInfo()
if(spaces == undefined)
return false
const currentSpaceNum = spaces.currentNumber
if(currentSpaceNum == undefined)
return false
const spaceNum = spaceNumberer(spaces.spaces)
if(spaceNum == 0)
return false
if(spaceNum == currentSpaceNum)
return true

let keyCode, slideSteps
if(spaceNum < currentSpaceNum)
keyCode = 123, numSlides = currentSpaceNum - spaceNum
else
keyCode = 124, numSlides = spaceNum - currentSpaceNum
{ // wait release all modifiers key in real keyboard, for space slide moving keyboard shortcut control+[←→] simulation
const kAllModifiers = $.NSShiftKeyMask | $.NSControlKeyMask | $.NSAlternateKeyMask | $. NSCommandKeyMask
const NSEvent = $.NSEvent
const timeoutTime = Date.now() + 10 * 1000
while(Date.now() <= timeoutTime){
if((NSEvent.modifierFlags & kAllModifiers) == 0)
break
delay(0.05)
}
if(Date.now() > timeoutTime)
return false
}
Application('System Events').keyCode((new Array(numSlides)).fill(keyCode), { using: ['control down'] })

850 :名称未設定:2022/08/03(水) 01:46:07 ID:0bp/Cggr0.net
{ // wait for real changing current space
const timeoutTime = Date.now() + 1.5 * 1000
while(Date.now() <= timeoutTime){
if(spacesInfo().currentNumber != currentSpaceNum)
break
delay(0.05)
}
}
return (spaceNum == spacesInfo().currentNumber)
}

function switchSpaceTo(nameOrNumber, appName){
if(typeof nameOrNumber.regex == 'string')
nameOrNumber = new RegExp(nameOrNumber.regex)
if(nameOrNumber.constructor.name == 'Number'){
if(appName == undefined)
spaceNumberer = (spaces) => nameOrNumber
else{
let remainNumber = nameOrNumber
spaceNumberer = (spaces) => spaces.findIndex((space) => space.appName == appName && --remainNumber == 0) + 1
}
}
else if(nameOrNumber instanceof RegExp)
spaceNumberer = (spaces) => spaces.findIndex((space) => nameOrNumber.test(space.name) && (appName == undefined || space.appName == appName)) + 1
else{
const spaceName = nameOrNumber.toString()
spaceNumberer = (spaces) => spaces.findIndex((space) => space.name == spaceName && (appName == undefined || space.appName == appName)) + 1
}
return switchSpaceBy(spaceNumberer)
}

851 :名称未設定:2022/08/03(水) 02:00:41 ID:0bp/Cggr0.net
switchSpaceTo('Desktop 2')
switchSpaceTo(2)
switchSpaceTo(/^Desk.*2$/)
switchSpaceTo('Apple(日本)')
switchSpaceTo(1, 'Safari')
switchSpaceTo('Apple(日本)', 'Safari')

Spaces.scpt を Script Library に突っ込んで、
Spaces = Library('Spaces')
Spaces.switchSpaceTo('Desktop 2')
Spaces.switchSpaceTo(2)
Spaces.switchSpaceTo(/^Desk.*2$/)
なんだが、Library()越しだとRegExpが変な物に変換されて使えない。代わりに
Spaces.switchSpaceTo({ regex:'^Desk.*2$'})

app = Application.currentApplication()
app.includeStandardAdditions = true
eval(app.doShellScript('osadecompile "$HOME/Library/Script Libraries/Spaces.scpt"'))
switchSpaceTo(/^Desk.*2$/)
なんて方法もあるけど...

852 :名称未設定:2022/08/03(水) 02:09:35 ID:0bp/Cggr0.net
spacesInfo 以外は AppleScript でも書ける。けど、AppleScriptをJXAに書き換えても普通はそれほど変わりは無いが、明らかに今回のようなのはJavascriptに利があるので

AppleScriptでは
set spaceName to "Desktop 2"
run script "//
Spaces = Library('Spaces')
Spaces.switchSpaceTo('" & spaceName & "')
" in "JavaScript"
とかで

Spaceの直接の移動方法のAPIがない/見つからない、しょうがないからスライド移動 control+←→ の連打でなんだが、結構いい感じだったので自慢w発表
(結構いい感じ=ちゃんと目的のSpaceまでの一度の動き=いくら距離が短くても長くてもトランジッション時間が同じ)

853 :名称未設定:2022/08/04(木) 23:00:24 ID:qJcrVAot0.net
defaults read com.apple.spaces で見れるcurrent spaceってなんで現在のデスクトップが反映されないんですかね?
新しいデスクトップを追加したらちゃんと動きます。
defaults read com.apple.spaces | plutil -convert json - -o - | jq '.SpacesDisplayConfiguration'

854 :名称未設定:2022/08/05(金) 00:47:56 ID:8LBdm4iN0.net
それな
まあ、書き込むタイミングが現在のデスクトップが変わるタイミングではないってだけだろう
設定保存しても使われない、Dockが起動した時に保存されたとこから始まるわけでもないし。その項目はなんとなく保存してるだけwだろう

855 :名称未設定:2022/08/05(金) 16:14:18 ID:wF2CiFWb0.net
>>854
これどうにかならないんですか?
com.apple.spaces.plistに書き込みをしたり、CLIでデスクトップの追加&削除ができれば(←これは無理そう)解決できそうなんですけど...

856 :名称未設定:2022/08/05(金) 17:43:43 ID:wF2CiFWb0.net
そもそも、swift以外でplistへの書き込みってできますか?

857 :名称未設定:2022/08/05(金) 17:47:50 ID:xMXhQz5E0.net
アプリ(Dock.appかな)が必要がないからというのだろうから、Appleにそうしてと言うしかないだろ、Bug Reportで
別にPreferences/NSUserDefaultsのは随時じゃなければならないなんて決まりはないよ。アプリ終了時に一度だけというのもあってもおかしくないし、外部からの変更に対して対応するってのも全くもって任意でしかない
そもそも、Spacesのは全くもって未公開/APIもまだアンドキュメントだから「使えそうだから」とAppleに言っても無理だな

858 :名称未設定:2022/08/05(金) 17:51:56 ID:xMXhQz5E0.net
>>856
Preferencesのは、cfprefsdでメモリキャッシュされてるのは知ってるよね
OSのAPIであるNSUserDefaultsはもちろんcfprefsdを介して(そうでないと辻褄が合わんからな)、defaultsコマンドもcfprefsdに対して(というか、NSUserDefaultsか同等のCoreのを使って)
Swiftでなくても、NSUserDefaultsはAppleScriptObjCで使えるよ。JXAでなくても

859 :名称未設定:2022/08/05(金) 18:08:23 ID:wF2CiFWb0.net
>>858
勉強不足でしりませんでした。
Spacemanというmenubar常駐のアプリ(https://github.com/Jaysce/Spaceman/blob/main/Spaceman/Helpers/SpaceObserver.swift)ではリアルタイムにSpaceのナンバーが反映されるんですよね。
このソースを見ると、defaults.set(try? PropertyListEncoder().encode(updatedDict), forKey: "spaceNames")と、delegate?.didUpdateSpaces(spaces: allSpaces)でplistを更新していると思われます。これをAppleScriptまたはJavaScriptで真似したいんですけど、plistの更新するところがよく分かっていません。どうすればいいかヒントくださいませんか

860 :名称未設定:2022/08/05(金) 19:11:34 ID:oWydA2CH0.net
>>859
チラ読みだが、
private let defaults = UserDefaults.standard
しかないようだから、「Spacemanの」設定ファイルに対してじゃないの
その下の init() のところを見ると、システム通知を受けてるなあと、そのまた下を見たら、CGSCopyManagedDisplaySpaces 使ってるやんけっ
勉強してから色々言って欲しいな。今のではただの妄想で言われてもwって感じ

861 :名称未設定:2022/08/05(金) 19:39:15 ID:oWydA2CH0.net
の前の
private let conn = _CGSDefaultConnection()
の段階で、バリバリ非公開Spaces API使うつもり満々と読めたなw

ちなみに、
_CGSDefaultConnection、CGSCopyManagedDisplaySpaces は非公開でも古いらしい。変わって、SLSMainConnectionID、SLSCopyManagedDisplaySpaces が、SkyLight (説頭のSLだな)というかっちょいい名前wのフレームワークに収められてる。動作は同じ
全然AppleScriptと関係ないなw

862 :名称未設定:2022/08/05(金) 20:13:06 ID:wF2CiFWb0.net
>>861
なんも伝わりません

863 :名称未設定:2022/08/05(金) 20:16:45 ID:oWydA2CH0.net
そりゃ、何もわからないんだもんな
勉強する気は全くないようだな、がっかりだよw

864 :名称未設定:2022/08/05(金) 20:18:55 ID:tEGhU8Oz0.net
AppleScript ほぼ関係ないじゃん

865 :名称未設定:2022/08/05(金) 20:21:06 ID:oWydA2CH0.net
全然関係ないよ。「僕が発見した方法」に拘ってるだけ
それは違うよという話でしかない
AppleScript関連はこれっぽちもないw

866 :名称未設定:2022/08/05(金) 20:54:38 ID:wF2CiFWb0.net
なんかよくわからんけど、これでCurrent Spaceがちゃんと反映されるようになりましたw
あざすw
ObjC.bindFunction('SLSMainConnectionID', ['int', []])
ObjC.bindFunction('SLSCopyManagedDisplaySpaces', ['id', ['int']])
let spaces = ObjC.deepUnwrap($.SLSCopyManagedDisplaySpaces($.SLSMainConnectionID()))
const currentSpaceID = spaces[0]['Current Space'].ManagedSpaceID

867 :名称未設定:2022/08/05(金) 20:58:02 ID:wF2CiFWb0.net
>>866
けどスペースを追加した直後だとCurrent Spaceのナンバーが0になっちゃうな
2回め以降はちゃんとできる

868 :名称未設定:2022/08/05(金) 21:16:39 ID:iMqm6i+x0.net
稚拙で拙速

869 :名称未設定:2022/08/05(金) 21:26:16 ID:wF2CiFWb0.net
>>868
あなたならどう書くのですか?

870 :名称未設定:2022/08/05(金) 21:30:11 ID:iMqm6i+x0.net
自ら解決したのは皆無なのにプライドだけは高い
稚拙で拙速になるよねえ

871 :名称未設定:2022/08/07(日) 07:06:37 ID:IuDEutXv0.net
全てのウィンドウを現在のデスクトップに。Dockにしまったのも対象内、フルスクリーン表示 のは対象外
(なんかmacOSの標準オペレーションでできたと思ったんだが)
やってることは「このデスクトップ」にしてから「なし」にしてるだけ

property kOptionsMenuItemName : "Options"
property kAllDesktopsAssignName : "All Desktops"
property kThisDesktopAssignName : "This Desktop"
property kNoneAssignName : "None"

on allWindowsToThisDesktop(appName)
tell application "System Events" to tell process "Dock"
set docItem to a reference to (UI element appName of first list)
if exists docItem then tell docItem
perform action "AXShowMenu"
click menu item kOptionsMenuItemName of first menu
click (menu item kThisDesktopAssignName of menu of menu item kOptionsMenuItemName of first menu)
perform action "AXShowMenu"
click menu item kOptionsMenuItemName of first menu
click (menu item kNoneAssignName of menu of menu item kOptionsMenuItemName of first menu)
end tell
end tell
end allWindowsToThisDesktop

872 :名称未設定:2022/08/07(日) 07:08:39 ID:IuDEutXv0.net
煩くない 版

on allWindowsToThisDesktop(appName)
run script "//
((appName) => {
ObjC.import('CoreGraphics')
ObjC.bindFunction('SLSMainConnectionID', ['int', []])
ObjC.bindFunction('SLSCopyManagedDisplaySpaces', ['id', ['int']])
ObjC.bindFunction('SLSProcessAssignToSpace', ['void', ['int', 'long', 'long']])

try{
const pid = Application('System Events').processes.whose({ _or: [{ name: appName }, { bundleIdentifier: appName }] })()[0].unixId()
const spaceID = $.SLSCopyManagedDisplaySpaces($.SLSMainConnectionID()).objectAtIndex(0).objectForKey('Current Space').objectForKey('id64').js
$.SLSProcessAssignToSpace($.SLSMainConnectionID(), pid, spaceID)
$.SLSProcessAssignToSpace($.SLSMainConnectionID(), pid, 0)
}
catch(e){
return e.toString()
}
return 'success'
})('" & appName & "')
" in "JavaScript"
end allWindowsToThisDesktop

873 :名称未設定:2022/08/07(日) 07:13:10 ID:IuDEutXv0.net
日本語環境だと
property kOptionsMenuItemName : "オプション"
property kAllDesktopsAssignName : "すべてのデスクトップ"
property kThisDesktopAssignName : "このデスクトップ"
property kNoneAssignName : "なし"
だと思う

煩くない 版 は、「なし」にしてるアプリに対して使った方がいいかな。大して問題ではない、単なる気分的な問題wでなんだが

874 :名称未設定:2022/08/07(日) 16:25:05 ID:xxNdxPSn0.net
暇なので作ってみた、DynamicDesktopに対応していない旧MacOS用DynamicDesktopもどき

FileListで与えられたファイル名の付加部分(4文字)と時刻(hhmm)を比較して
その時間を過ぎていたら、そのファイル名のデスクトップ画像に設定する
一番目より前の時刻の場合は最後の画像を採用する

画像フォルダは "~/Pictures" からの相対パス
各時刻で読み込まれるファイルは
"~/Pictures/[画像フォルダ名]/[画像ファイル名の共通部分]-[hhmm].[表示画像の拡張子]"
以下のProperty Listを"~/Pictures/DynamicDesktop.plist"に保存

875 :名称未設定:2022/08/07(日) 16:27:12 ID:xxNdxPSn0.net
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BasePath</key>
<string>[画像フォルダ名]</string>
<key>BaseName</key>
<string>[画像ファイル名の共通部分]</string>
<key>FileList</key>
<array>
<!-- 時刻(hhmm)を昇順で記述 -->
<string>0200</string>
<string>0600</string>
<string>1000</string>
<string>2200</string>
</array>
<!-- 表示画像の拡張子 -->
<key>extension</key>
<string>png</string>
</dict>
</plist>

AppleScriptを実行専用アプリ(DynamicDesktop)で保存してターミナルからcrontab -eで以下の行を追加
(1時間毎に実行の場合)
0 * * * * /Applications/DynamicDesktop.app/Contents/MacOS/applet

876 :名称未設定:2022/08/07(日) 16:29:06 ID:xxNdxPSn0.net
全角/は半角にする(ここに書き込めない)

-- ホームパス
set myPath to (path to home folder) as text
set PosixMyPath to POSIX path of myPath

-- PropertyList Path
set thePropertyListFilePath to PosixMyPath & "/Pictures/DynamicDesktop.plist"

tell application "System Events"
tell property list file thePropertyListFilePath
-- フォルダパス
set BaseDir to value of property list item "BasePath"
-- ファイル名の共通部分
set BaseName to value of property list item "BaseName"
-- 時刻ごとのファイル名付加部分
set TimeList to value of property list item "FileList"
-- 表示画像の拡張子
set extStr to value of property list item "extension"
end tell
end tell
set BaseDir to PosixMyPath & "/Pictures/" & BaseDir & "/"
set extStr to "." & extStr

877 :名称未設定:2022/08/07(日) 16:29:35 ID:xxNdxPSn0.net
-- 現在時刻
set TimeStr to time string of (current date) as text
-- 時刻がzero suppressされている場合
if length of TimeStr < 8 then
set TimeStr to "0" & TimeStr
end if
-- hh:mm:ss -> hhmm
set TimeHour to text 1 thru 2 of TimeStr & text 4 thru 5 of TimeStr

set maxItem to length of TimeList
-- 最後のファイル名を設定する
set DDPath to BaseDir & BaseName & "-" & item maxItem of TimeList & extStr
-- display dialog curPath
repeat with idx from maxItem to 1 by -1
set curItem to item idx of TimeList
set curPath to BaseDir & BaseName & "-" & curItem & extStr
if curItem ≤ TimeHour then
set DDPath to curPath as text
exit repeat
end if
end repeat
-- display dialog DDPath
changeDesktopPicture(DDPath)
-- return DDPath

878 :名称未設定:2022/08/07(日) 16:29:58 ID:xxNdxPSn0.net
-- サブルーチン:
-- デスクトップ画像を所定のファイルに変更する
on changeDesktopPicture(aFilePath)
tell application "Finder"
try
set desktop picture to POSIX file (aFilePath)
on error
"ファイルが見つかりません。" & return & return
display dialog result & aFilePath
end try
end tell
end changeDesktopPicture

879 :名称未設定:[ここ壊れてます] .net
illustratorのJXAでテキストフレームをuuidで指定する方法を
わかる方いらっしゃいましたら教えてください。

880 :879:[ここ壊れてます] .net
すみません。他で聞くことにしました。無視してください。

881 :名称未設定:2022/08/26(金) 14:49:38.86 ID:/TseUAnF0.net
macで現在再生している音楽や動画はどのアプリによるものかを知りたいです。
BetterTouchToolを使えば以下のようなスクリプトでそのアプリ名を取得できるのですが、これを使わないでそのアプリ名を取得する方法はありますか?
これをAppleScriptで実行不可能ならBetterTouchToolはこのような仕組みでこれを取得しているという情報だけでもいただけたら嬉しいです。

tell application "BetterTouchTool"
return get_string_variable "BTTCurrentlyPlayingApp"
--> "com.apple.Music"や"com.apple.Safari"
end tell

882 :名称未設定:[ここ壊れてます] .net
ググったらすぐにあったよ

883 :名称未設定:[ここ壊れてます] .net
>>882
それはID:/TseUAnF0についてのレスでしょうか。
よかったらそのURLを教えてほしいです。

884 :名称未設定:2022/08/27(土) 18:21:23.99 ID:kDJnSK8N0.net
キーワード 入れてググればいいだけ
それすらなら、おとなしくBetterTouchToolを使ってなさい

885 :名称未設定:2022/08/27(土) 18:41:31.61 ID:xsBdjgsX0.net
macのバナー通知の表示時間変えたいけど、catalina以降だと無理?
defaults write com.apple.notificationcenterui bannerTime 1 で変えれてるはずなんだけど反映されない(monterey)

886 :名称未設定:2022/08/27(土) 19:42:45.82 ID:iYShDyTA0.net
>>884
煽りたいならせめてURLでも貼ってください。そうしたら私よりも知識があるということでマウントが取れるはずです。
知ったかぶりなら迷惑なので答えないでもらえますか。
日本語と英語で調べた上でわからなかったからここに質問したまでです。

887 :名称未設定:2022/08/27(土) 19:48:58.69 ID:N8bK0Gp/0.net
初心者スレで聞きますよ〜

888 :名称未設定:2022/08/27(土) 19:55:44.85 ID:6sCQ4cFz0.net
>>886
やっぱり、また お前か のやつだな
教えてください教えてください
しかないくせに背伸び君

BTTCurrentlyPlayingApp でググっただけで、数少ないのが引っかかり、そこに書いてる
どうせ、読めないそこから先に進められないだろけど、>>886なんてやつに誰が親切に教えると思うねん、おバカさん

889 :名称未設定:2022/08/27(土) 19:59:51.65 ID:6sCQ4cFz0.net
>>885
Monterey から効かないってのばっかり、それだけが数多くあるだねえ

しかし、AppleScriptとは直接関係ないのばかりだな。俺は全然いいけどw

890 :名称未設定:2022/08/27(土) 20:21:41.80 ID:gZNobobL0.net
>>885 も同一人物の、Qiita @kentoak じゃないのか

891 :名称未設定:2022/08/27(土) 20:24:43.48 ID:N8bK0Gp/0.net
そんなに気に入らんなら転載禁止貼って答えれば良い。

892 :名称未設定:2022/08/27(土) 20:27:55.39 ID:gZNobobL0.net
俺?別に転載禁止とか思ってないよ。転載ではないだろと思うしw
未熟なくせ(記事の内容も)にとは思うけどw

893 :名称未設定:2022/08/27(土) 20:28:53.56 ID:N8bK0Gp/0.net
>>892
お前が書くんだよ電車男

894 :名称未設定:2022/08/27(土) 20:29:58.54 ID:gZNobobL0.net
>>893
イミフ
何をイキってるのか全くわからん

895 :名称未設定:2022/08/27(土) 20:34:00.26 ID:N8bK0Gp/0.net
そういう訳で、このスレには碌に文字も書けない自称スクリプトさんが居るので悪しからず

896 :名称未設定:2022/08/27(土) 20:35:37.95 ID:gZNobobL0.net
自己紹介?
>>887から人格変わりすぎ。お前に何があったんだかww

897 :名称未設定:2022/08/27(土) 20:37:23.23 ID:N8bK0Gp/0.net
お前が安価したからだろ。
口臭酷い人から離れて何があったも無い

898 :名称未設定:2022/08/27(土) 20:39:06.29 ID:N8bK0Gp/0.net
あ!安価してないなゴメンゴメン♡
口臭キツくてどこに居ても臭いのね(笑)

899 :名称未設定:2022/08/27(土) 20:41:41.99 ID:gZNobobL0.net
お前が俺に絡んだからだろうがw
安価もお前からやん、>>885もお前か?
しかし、そのレスも頭悪そうにしか見えんよ。お怒りで最後のようなの書きたいんだろうけどw

お怒りで間違っちゃったのね。でも悪口wだけは書きたいのね。ご愁傷様です

900 :名称未設定:2022/08/27(土) 20:45:21.16 ID:N8bK0Gp/0.net
弁舌になったね〜
煽りは一級品てか?

でも人を区別できね〜じゃその舌も勿体ないな!

901 :名称未設定:2022/08/27(土) 20:48:12.73 ID:gZNobobL0.net
>人を区別できね
イミフ

よほどお怒りのようで
>>898のようなレスを書けるお前には「煽りは一級品」wwwのように見えるのか??って感じ
ただの口げんかにしかなってないよ、いい加減気付こうな

902 :名称未設定:2022/08/27(土) 20:52:31.71 ID:N8bK0Gp/0.net
反応して書き込んでる時点でお前が問題だよ。
少し考えろ。ググれksで終えられない上に不自由そうな書き込み続けて何が気付けだよ

903 :名称未設定:2022/08/27(土) 20:54:29.67 ID:gZNobobL0.net
>反応して書き込んでる時点でお前が問題だよ
www どんだけ自己中なのよ。すげえなあ
お前が絡んできたお前のレスに俺がレスしてはダメってか?www
お怒りでまともの思考できないのか、もともとなのかどっちなんだろう

904 :名称未設定:2022/08/27(土) 20:57:28.44 ID:N8bK0Gp/0.net
お前が何も書き込まなければ問題起きなかった。
何か言う事ある?

905 :名称未設定:2022/08/27(土) 20:58:56.26 ID:iYShDyTA0.net
ありがとうございました。精進します。

906 :名称未設定:2022/08/27(土) 21:01:16.54 ID:gZNobobL0.net
>>904
www すげー、よくそんなこと書けるな...呆れた
お前に何があったんだ?www

なんか勘ぐって>>891を書くことはしょうがない。>>892にそれは違うとご説明してるんだけど
それで終わりだろうに、>>893から訳のわからないことを言い出してるのは、単にお前だよ
わかった?お怒り/自己中で拒絶するだけだろうけど

907 :名称未設定:[ここ壊れてます] .net
>>905
自分も興味があったので調べてみました。
https://i.imgur.com/xmWKiw5.png

https://community.folivora.ai/t/bttcurrentlyplaying-and-bttcurrentlyplayingapp-not-updating-in-sierra-10-12-6/9027
に「These require the macOS "now playing api", which unfortunately was introduced with 10.13.x」
とあったので "now playing api" ではないかと。
  ↓
【MPNowPlayingInfoCenter】
https://developer.apple.com/documentation/mediaplayer/mpnowplayinginfocenter

908 :名称未設定:[ここ壊れてます] .net
hackintoshスレにめっちゃ吃った書き方していた嵐いたなぁ…
なんだったか、とあるサイトで厄介払いされたとか

909 :名称未設定:[ここ壊れてます] .net
>>881
これ、プライベートフレームワークMediaRemote.frameworkのAPIを使うみたいよ
MRMediaRemoteGetNowPlayingClient / MRMediaRemoteGetNowPlayingInfo してからの、
MRNowPlayingClientGetBundleIdentifier や MRNowPlayingClientGetParentAppBundleIdentifier

BTTも使ってるみたい
githubに実際使ってるアプリのソースがある(Objective-CやSwift)
ただ、MRMediaRemoteGetNowPlaying...の第2引数がblockだから、AppleScriptObjCでは書けないみたい

ちなみに、Safariだと
MRNowPlayingClientGetBundleIdentifier は com.apple.WebKit.GPU
MRNowPlayingClientGetParentAppBundleIdentifier が com.apple.Safari
Firefoxだと
MRNowPlayingClientGetBundleIdentifier が org.mozilla.firefox
になった

910 :名称未設定:[ここ壊れてます] .net
>>909
>引数がblockだから、AppleScriptObjCでは書けないみたい
JXAはblockをサポートしてる。Javascriptで無名関数、アロー関数を普通に書けばblockになる
だが、
bridgesupportで未定義のObjC.bindFunctionでの宣言/定義の仕方がイマイチわからん
block,functionと使える型があるが、普通にid(Objective-Cでもblockはオブジェクト)での方が、ちゃんと呼ばれる
呼ばれるが引数に値が入ってない。単なる実行環境が問題なのか、blockを使うメソッドなどでのbridgesupportでの定義はなんかやってるからそこがキーなのかなあ

911 :名称未設定:2022/09/04(日) 01:49:04.11 ID:rjYqC44k0.net
>blockを使うメソッドなどでのbridgesupportでの定義はなんかやってるからそこがキーなのかなあ
ほぼ、これだったよう
https://talk.automators.fm/t/jxa-learning-resources/9713/4
これ見て、ObjCの中になんかblockってあるんだな からの手探りで
ObjC.block(types, function)
でいいよう。types は ObjC.bindFunction の第2引数と同じ、function は 無名関数/アロー関数どちらでも
件の場合は 第2引数を ObjC.block(['void', ['id']], (client) => { ... }) でとりあえず動くよう

なんでアンドキュメントやねん。なんか問題があるのかもだが

912 :名称未設定:[ここ壊れてます] .net
手探り中に ObjC.block の第2引数を function にしてみたら、帰ってきたのが 関数オブジェクト で、types というプロパティに 第1引数の値が設定されていて、なるほどね ObjC.block(types, function) なのかと思って納得し終わってんだが、
ふと、単に types プロパティを作ってそこに設定するだけじゃねと思ったら、そのまんまだった
function block(types, blockfunc) {
blockfunc.types = types
return blockfunc
}
block(['void', ['id']], (client) => { ... })
で普通に動く
単にマニアックネタ

913 :名称未設定:2022/09/06(火) 20:49:16.98 ID:YIEW1hG80.net
Macを起動するたびにこのチェック外れてるんだけど、みなさんはどうですか?
macOS Monterey 12.5.1

http://i.imgur.com/LzJGsel.png

914 :名称未設定:2022/09/06(火) 20:53:51.36 ID:taYKxhLp0.net
Catalinaでも時々ある
条件不明

915 :名称未設定:2022/09/06(火) 23:10:33.09 ID:v8BoiCuk0.net
そのメニュー本体がどこかにあれば起動項目に入れておくと対策できそうだけど見つからないな
昔は /System/Library/CoreServices/Menu Extras/ にあった気がするけど

916 :名称未設定:2022/09/06(火) 23:12:50.34 ID:v8BoiCuk0.net
あ、これっぽい
/System/Library/CoreServices/Script Menu.app

917 :名称未設定:[ここ壊れてます] .net
>>915,916
ありがとうございます!

918 :名称未設定:[ここ壊れてます] .net
>>909続き
blockを教えて貰って、JXA版がどうやらできました
AppleScriptなら他の例にもあるように、run script "以下をそのまま入れる" in "JavaScript"

(() => {
ObjC.import('dispatch')
let bundle = $.CFBundleCreate($.kCFAllocatorDefault, $.NSURL.fileURLWithPath('/System/Library/PrivateFrameworks/MediaRemote.framework'))
let MRMediaRemoteGetNowPlayingClient = $.CFBundleGetFunctionPointerForName(bundle, $('MRMediaRemoteGetNowPlayingClient'))
ObjC.bindFunction('MRMediaRemoteGetNowPlayingClient', ['void', ['void*', 'id']])
let MRNowPlayingClientGetBundleIdentifier = $.CFBundleGetFunctionPointerForName(bundle, $('MRNowPlayingClientGetBundleIdentifier'))
ObjC.bindFunction('MRNowPlayingClientGetBundleIdentifier', ['id', ['id']])
let MRNowPlayingClientGetParentAppBundleIdentifier = $.CFBundleGetFunctionPointerForName(bundle, $('MRNowPlayingClientGetParentAppBundleIdentifier'))
ObjC.bindFunction('MRNowPlayingClientGetParentAppBundleIdentifier', ['id', ['id']])
let identifier = $()
let parentIdentifier = $()
let done = false
$.MRMediaRemoteGetNowPlayingClient($._dispatch_main_q, ObjC.block(['void', ['id']], (client) => {
identifier = $.MRNowPlayingClientGetBundleIdentifier(client)
if (identifier.isNil())
identifier = $('')
parentIdentifier = $.MRNowPlayingClientGetParentAppBundleIdentifier(client)
if (parentIdentifier.isNil())
parentIdentifier = $('')
done = true
}))
while (!done)
$.NSRunLoop.currentRunLoop.runModeBeforeDate($.NSDefaultRunLoopMode, $.NSDate.distantFuture)
return [ObjC.unwrap(identifier), ObjC.unwrap(parentIdentifier)]
})()

919 :名称未設定:[ここ壊れてます] .net
インデント消えちゃた...

920 :名称未設定:[ここ壊れてます] .net
ちなみに、
MRMediaRemoteGetNowPlayingClient でblockに渡される client はObjective-Cオブジェクトなので、
MRNowPlayingClientGetBundleIdentifier や MRNowPlayingClientGetParentAppBundleIdentifier使わずとも、
client.bundleIdentifier と client.parentApplicationBundleIdentifier で、Javascript的に+無宣言でアクセスできる。Objective-Cオブジェクトにそういうメソッド/プロパティがあるってことね
(他に有用そうなメソッドはclass-dumpしてみるとかで、わかりやすい)

頭スペースやタブは捨てられるのが5chというかhtmlの仕様だからね。タブをスペースの数値文字参照( )に置き換えると、専ブラはそのまま頭スペースにしてくれる(Webブラウザはそれでも頭スペースは捨てるけど)
というのもAppleScriptだと簡単にできるからいいよねぇ

921 :名称未設定:[ここ壊れてます] .net
>>920
>数値文字参照( )
数値文字参照(&#32;)

922 :名称未設定:[ここ壊れてます] .net
display notification "保守"

923 :名称未設定:2022/10/27(木) 18:05:53.00 ID:be20UC2i0.net
illustratorのスクリプトですが、
ASで以下は実行可能なのに
tell application "Adobe Illustrator"
text fonts
end tell

JXAで以下は実行できません。
AI = Application("Adobe Illustrator 2021")
AI.textFonts()

これはそういう仕様になっているのでしょうか?

924 :名称未設定:2022/10/28(金) 07:17:16.03 ID:7o4e9El20.net
単に間違ってるだけだろう
AppleScript対応アプリがJXAに対応するために何かをなんて無いと思って構わない
AppleScriptで動くなら同等のJXAは動く。動かないのは間違ってるだけだろう

925 :名称未設定:2022/10/31(月) 10:16:41.17 ID:V6AlEDNM0.net
AIのCore Suite>Application>ElementsとしてdocumentとtextFontがあり、
documentの方はAI.documents()で取得可能です。

app = Application("Adobe Illustrator 2021")
app.documents()
--> [app.documents.at(0)]
app.textFonts()
--> Error -1708: メッセージを理解できません。

926 :名称未設定:2022/10/31(月) 11:34:07.03 ID:C4wogFlK0.net
https://community.adobe.com/t5/illustratorフォーラム/ct-p/ct-illustrator-jp
で聞いた方がいんちゃう

ていうか
https://community.adobe.com/t5/illustratorフォーラム-discussions/applescriptでフォントとの選択/m-p/11745459
が気になる

927 :名称未設定:2022/11/11(金) 13:01:07.15 ID:RY2MQfym0.net
教えてください。

あるフォルダのウインドウサイズをMacの起動の際に下記のスクリプトをログイン項目に入れて使っていますが、
ウインドウを開いてウインドウサイズを変更し閉じるのではなく、ウインドウを開かず裏で?ウインドウサイズを変更する方法があれば教えて欲しいです。

また、同じウインドウサイズですが2つのフォルダに対応する方法が知りたいです。

tell application "Finder"
open POSIX file "/testfolder1"
tell front window
set bounds to {600, 500, 1500, 1200}
end tell
end tell

tell application "Finder" to close windows

tell application "Finder"
open POSIX file "/testfolder2"
tell front window
set bounds to {600, 500, 1500, 1200}
end tell
end tell

tell application "Finder" to close windows

上記のように2つに分けないとうまくウインドウリサイズができないため分けていますが、1つで済むような方法もしりたいです。
ウインドウサイズと位置は同じです。
よろしくお願いします。

928 :名称未設定:2022/11/11(金) 20:09:40.13 ID:NgST5RNV0.net
デュアルモニタ環境でミッションコントロールを使いやすくしたいと言う要望で、
色々錯誤中

on run {input, parameters}
set MO1 to 18
set MO2 to 20
--デフォルトのショートカット(command + number)を登録しといてください
set CO to 0
set ORIG to do shell script "defaults read com.apple.spaces.plist SpacesDisplayConfiguration"
set KEY1d to "name"
set freqNum to retFrequency(ORIG, KEY1d) of me
if CO > freqNum then
CO = 0
ele
CO = CO + 1
end if
tell application "System Events"
--モントレのミッションコントロールロケーション
do shell script "/System/Applications/Mission\\ Control.app/Contents/MacOS/Mission\\ Control"
delay 0.5
key code MO1 + CO using {control down}
key code MO2 + CO using {control down}
end tell
end run

面倒

929 :名称未設定:2022/11/12(土) 09:28:35.62 ID:7Com+ghL0.net
>>927
1つ目: わからない
2つ目: 単に繋げればいいって話じゃないの?

tell application "Finder"
open POSIX file "/testfolder1"
tell front window
set bounds to {600, 500, 1500, 1200}
end tell
--end tell

--tell application "Finder" to close windows

--tell application "Finder"
open POSIX file "/testfolder2"
tell front window
set bounds to {600, 500, 1500, 1200}
end tell

close windows
end tell

--tell application "Finder" to close windows

930 :名称未設定:2022/11/12(土) 15:06:08.91 ID:3bXgbCDC0.net
>>927
ウインドウを存在させないことにはbounds等を操作出来ないので開かざるを得ないかと。
Finderを隠してから実行すれば…と思ったけど以下のコメントの通りダメでした。

同じような、でも一部だけ異なる処理を繰り返す場合は、異なる部分を変数に入れて処理させるのがコードを書くときの基本テクニックの1つです。

tell application "Finder"
--set visible to false --やってもopenで表示されてしまう
repeat with posixPath in {"/Users/", "/System/"} --パスは適当に書き換えて
open (posixPath as POSIX file)
--set visible to false --やるとwindowもしくはそのpropertiesが取れなくなる
tell front Finder window
set bounds to {600, 500, 1500, 1200}
close
end tell
end repeat
end tell

931 :名称未設定:2022/11/12(土) 15:23:30.36 ID:TchPlUlA0.net
>>929
なるほどそうですね。
連結?してやってみようと思います。

>>930
こちらもとても参考になります。
こういう方法もあるんですね。

>>929さん>>930さん
レスありがとうございました。

932 :名称未設定:2022/11/16(水) 11:45:38.29 ID:GtJRusAX0.net
こんにちは。

一つのAutomatorに複数のAppleScriptを埋め込んだアプリを使っています。
多分最後がいいんだと思って最後にNASを自動でマウントするAppleScriptを入れていますが、5回に1回くらいエラーが出てAutomatorが最後まで完了しません。

エラーは2つでてきて、1つ目が

「サーバ”NAS”への接続で問題が起きました。
サーバが存在しないか、現在利用できません。
サーバの名前またはIPアドレス、およびネットワーク接続を確認してから、やり直してください。」

2つ目
「アクション"AppleScriptを実行”でエラーが起きました:“Finderでエラーが起きました: タイプ-5016のエラーが起きました。」

とでます。
最後のNASをマウントするスクリプトは

tell application "Finder"
mount volume "smb://NAS”
end tell

です。
このスクリプりの前にAutomatorの一時停止で3〜5秒程度待ち時間を与えても、スクリプト中にdelayを数秒入れてもやはり回数はばらばらですが何度かに一度接続に失敗します。

これ、何かいい方法はないでしょうか。
また、待ち時間を与えるならスクリプトの前かスクリプト中かどちらがいいのでしょう。

933 :名称未設定:2022/11/17(木) 23:08:07.73 ID:9TDAZvUf0.net
tryで括ったのを繰り返してマウント出来たらexitってやってみては?

934 :名称未設定:2022/11/18(金) 08:49:01.80 ID:cN4GzrJf0.net
>>933
tryを調べてチャレンジしてみます。
どうもありがとうございます。

935 :名称未設定:2022/11/19(土) 12:30:17.20 ID:dkeXPz4r0.net
AppleScriptで例えば
tell application "System Events"
key code 49
end tell
ってコードをAutomatorに入れて実行を押すとシステムで設定してるアラートがなってしまいますが、ならないようなコードの書き方ってあるのでしょうか?
もしくはなるのは仕方ないのでしょうか?

936 :名称未設定:2022/11/19(土) 13:19:51.94 ID:Ap1v+LFB0.net
邪魔なら
set volume alert volume 0
でも入れとけばいいんじゃないの

937 :名称未設定:2022/11/19(土) 13:29:35.46 ID:dkeXPz4r0.net
>>936
やはりその方法しかないのですね。
わかりました。ありがとうございました。

938 :名称未設定:2022/11/20(日) 01:26:37.42 ID:KLtsQVua0.net
なんのためにkey code 49したいのか分からんけど手前のアプリによって挙動を変えることは出来るよ
ただスペース入力されちゃうとか、そのアプリなりの動きはしちゃうけど

-- Finderを手前にしてやる場合
tell application "System Events" to tell application process "Finder"
set frontmost to true
key code 49 --クイックルックが出る(場合あり)
end tell

-- その時手前のアプリでやりたい場合
tell application "System Events" to tell (first application process that frontmost is true)
key code 49
end tell

939 :名称未設定:2022/12/01(木) 17:39:27.57 ID:zR7q9XOP0.net
tell application "Finder"
mount volume "smb://server”
end tell

これを使ってNASに繋げていますがたびたび

サーバ"server"への接続で問題が起きました。
と出た後に
タイプ-5016のエラーが起きました。
と2つのエラーが出てきます。

2つ目のエラーはtryを使い取り敢えずでなくなりましたが、1つ目のエラーはたまに出ます。
そこで最初にpingを打った後にmountをしてみようと思い

try
do shell script "ping -c 2 -i 0.5 server"
tell application "Finder"
delay 3
mount volume "smb://server/xxx"
end tell

on error

end try

こんな感じでやってみましたが、それでもたまに1つ目のエラーが出ます。
この1つ目のエラーがどこから出されているものかわかりませんが、
1つ目のエラーを出さないようにするにはどうするのがいいのでしょうか。
NASへの接続は出来なくても構いません。
取り敢えずはエラーを出ないようにしたいです。
どなたか知恵を拝借できませんか。

940 :名称未設定:2022/12/02(金) 09:28:20.09 ID:uMnk7rPb0.net
https://apple.stackexchange.com/questions/387841/applescript-how-to-mount-remote-server-without-error-if-unavailable

smbutil status ...で状態チェックした後でやったらどう、って
あと、エラーと関係ないけど、mount volume ...はStandard Additionsのコマンドで、Finderが実行する訳じゃないからtell app "Finder"いらない、って

941 :名称未設定:2022/12/02(金) 11:21:44.60 ID:kVy3baxJ0.net
>>940
レスありがとうございます
tell app "Finder”は必要ないんですね。
必要だと思い込んでいました。

教えていただいたリンク先を読んでみます。

https://discussionsjapan.apple.com/thread/253019596?answerId=255677244122#255677244122
こちらでも私と同じようなことを言ってる人がいて回答がいくつかされていますが、
書かれているコードを私も試しましたがどれもエラーが出て使えませんでした。

シェルでやれば?とのコメントもありますので試しに作ったAutomatorアプリをLaunchで動かしてみようと思います。

942 :名称未設定:2022/12/14(水) 10:52:17.49 ID:IhMsMLAt0.net
この流れ見たおかげで、jxaでネットワークフォルダに接続できた。ありがとう。

systemEventsやらfinder試してたができなくて悩んでたが、下のでできた。
app = Application.currentApplication()
app.mountVolume('smb://hoge/hoge/’)

どおりでsystemEventsもfinderも用語説明にmountVolumeが無いと思った。

943 :名称未設定:2023/01/02(月) 07:27:29.86 ID:qBQZs/ov0.net
ド初心者です
このようなhtmlのセレクトボックスを選択してクリックするには
どうすればいいのでしょうか?
https://ondoku3.com/ja/
ここの言語をEnglish(USA)にしたいです

944 :名称未設定:2023/01/02(月) 10:17:50.89 ID:46djlZai0.net
Safariで開発メニューを表示、開発メニューでAppleEventからのJavaScriptを許可して
tell application "Safari"
do JavaScript "document.getElementById('en-US').selected = true;" in (current tab in front window)
end tell
とかなんとか

945 :名称未設定:2023/01/02(月) 10:45:45.13 ID:qBQZs/ov0.net
このように書いてみましたがダメそうです…

tell application "Safari"
open location "https://ondoku3.com/ja/"
activate
end tell

clickID("en-US")

to clickID(theId)
tell application "Safari"
do JavaScript "document.getElementById('" & theId & "').click();" in document 1
end tell
end clickID

946 :名称未設定:2023/01/02(月) 13:40:12.38 ID:KmQn2xLX0.net
そのJavascript自体で変わらないんじゃないの
ちゃんと変わるJavascriptの話は、まあここじゃないかな
SafariのJavaScript Consoleでちゃんと動くのに、do JavaScript で動かないのはここでだね

947 :名称未設定:2023/01/02(月) 16:10:49.69 ID:KmQn2xLX0.net
let readLanguagePopUp = document.getElementById('read-form').id_language
readLanguagePopUp.selectedIndex = 8
で、変わりはするが、ページ/コンテンツ特有の問題/特性でこれだけでは意味がない
変更を検知してのコンテンツ特有の処理、関数 change_voice_selection もしくは create_voice_selection を呼ぶ必要がある
create_voice_selection を呼ぶ方が簡単なので、
create_voice_selection(readLanguagePopUp.value)
を呼べばいいだけかな。Webブラウザ/Safariの中のコンソールでは良さげ

ここまでは単にJavascriptの

do JavaScript では、create_voice_selection が呼べない/存在しない。外部スクリプトだし do JavaScript はJavascript実行環境が違うスコープ外なのかな
てことで、selectedIndex を変更しても 'change'イベントを飛ばしてくれないなら飛ばせばいいかので、
readLanguagePopUp.dispatchEvent(new Event('change'))
で良さげ

do JavaScript "(() => {
let readLanguagePopUp = document.getElementById('read-form').id_language
readLanguagePopUp.selectedIndex = 8
readLanguagePopUp.dispatchEvent(new Event('change'))
})()" in (current tab in front window)

948 :名称未設定:2023/01/02(月) 22:28:25.23 ID:qBQZs/ov0.net
なるほど皆ありがとう
どうやらド初心者にはハードル高そうですね
エレメントをゲットしないでキーボード操作で
所望の箇所まで移動させてみます

949 :名称未設定:2023/01/14(土) 20:09:08.93 ID:hOXDjmwo0.net
AutomatorでAppleScriptを使ったアプリケーションを作っています。
動画をループさせながら再生するものですが、

tell application "QuickTime Player"
open "/Users/my/Desktop/test.mov"
tell front document
present
set looping to true
play
end tell
end tell

を実行すると、

書類"test.mov”を開けませんでした。
このファイルはQuickTime Player と互換性がありません。

アクション"AppleScriptを実行™でエラーが起きました: “QuickTime
Playerでエラーが起きました:
document1を取り出すことはできません。正しくないインデックスです。”

とエラーが出てきてうまく再生できません。
元の動画ファイルは問題なくQuickTime Playerで再生出来るものです。
動画ファイルを変えてみてもやはり同じエラーが出ます。

どのようにすればループして再生出来るでしょうか。
どなたか教えていただけませんか。

950 :名称未設定:2023/01/14(土) 21:11:32.15 ID:NoIkVHQB0.net
>>949
POSIX化すれば良い。
open "/Users/my/Desktop/test.mov"

set A to open "/Users/my/Desktop/test.mov"

play

play A

951 :名称未設定:2023/01/14(土) 21:12:06.05 ID:NoIkVHQB0.net
ごめん抜けた
set A to open POSIX file

952 :名称未設定:2023/01/14(土) 21:14:42.72 ID:0Ha2vBvH0.net
open POSIX file ということじゃなく?

953 :名称未設定:2023/01/14(土) 21:14:56.29 ID:0Ha2vBvH0.net
あ、ごめんリロードしてなかった

954 :名称未設定:2023/01/14(土) 21:41:07.93 ID:hOXDjmwo0.net
>>950
思い通りの動作をするようになりました。
大変嬉しいです。
ありがとうございました。

955 :名称未設定:2023/01/14(土) 21:47:50.50 ID:IFtoiy9i0.net
自分は全く理解しないでやってるけど、こんな感じではどうでしょう

tell application "QuickTime Player"
activate
open "/Users/my/Desktop/test.mov"
tell document 1
set looping to true
play
end tell
end tell

956 :名称未設定:2023/01/14(土) 21:53:16.81 ID:NoIkVHQB0.net
クイックタイムが起動していない状態であれば問題のコードでも開けるけど、
基本applescriptは旧来のhfs path。

でもアプリケーションはPOSIXに準じるので、アプリケーションが起動している状態だとhfs pathとして受け取ってしまう。
結果として/が名前として受け取り、:が階層として判断してしまうのでファイルが開かない。


そのため、POSIXパスとしての型とすれば問題なく開ける。
ちなみに初回だけ変数の型がhfsパスなのにPOSIX書きで開けるのは、
apple scriptのfile objectがPOSIXなので、hfsパスを押し退けて使える()

957 :sage:2023/01/23(月) 15:17:06.44 ID:8wZ0hG4u0.net
javascriptの質問で申し訳ないですが、QuickTime Playerで
開いた15.mp4を縦横(100, 300)の位置に移動させたいのですが
15.mp4を開くことまでは成功できるのですが、次が
わかりません。ご教示お願いできませんか?

var quickTimePlayer = Application("QuickTime Player");
quickTimePlayer.activate();
quickTimePlayer.open("/Volumes/HD1/15.mp4");
var system = Application('System Events');
var qtWindow = system.processes['QuickTime Player'];
qtWindow.windows[0].position[100, 300];

958 :名称未設定:2023/01/23(月) 16:43:50.74 ID:qAppQcQp0.net
qtWindow.windows[0].position = [100, 300];

959 :sage:2023/01/23(月) 16:56:08.26 ID:8wZ0hG4u0.net
上手くできました、感謝です。
私はAppleScriptは20年以上使っているのですが
10年ほど前にJavaScript形式で書くように
変更したのが、失敗でした。JavaScript形式の
AppleScriptの検索が非常に困難で、このような
質問をして、ご迷惑をお掛けしてしまいます。

960 :名称未設定:2023/01/28(土) 02:26:43.44 ID:f3R26hc10.net
function pseudoESTK(){
const app = Application.currentApplication();
const Cot = Application('CotEditor');
const SysEv = Application('System Events');
app.includeStandardAdditions=true;
if(!Cot.documents.length){app.displayAlert("実行したいスクリプトを開いてから実行してください");return;}
let scr = Cot.documents[0].contents();
let tgt = scr.match(/#target\s+([^\s-]+)/);
let appList = SysEv.applicationProcesses().filter(function(a){if(a.visible()==true && a.name().indexOf("Adobe")!=-1){return a}}).map((a) => a.name());
if(tgt){tgt = tgt[0].split(/\s/)[1].toLowerCase();appList = appList.filter(function(a){if(a.toLowerCase().indexOf(tgt)!=-1){return a}})}
let selApp;
switch(appList.length){
case 0:
app.displayAlert("対象アプリを起動してから実行してください",{givingUpAfter:1});return;break;
case 1: selApp = appList;break;
default:selApp = app.chooseFromList(appList,{withPrompt:"対象アプリを選択してください"});
if(!selApp){return}
break;
}
let scrRet;
let tgtApp = Application(selApp[0]);
let appLow = selApp[0].toLowerCase();
if(appLow.indexOf('indesign')!=-1){scrRet = tgtApp.doScript(scr,{language:'javascript', undoMode:'fast entire script'});
}else if(appLow.indexOf('acrobat')!=-1){scrRet = tgtApp.doScript(scr);
}else{scrRet = tgtApp.doJavascript(scr);}
if(scrRet){Cot.writeToConsole(selApp)};
}

961 :名称未設定:2023/01/28(土) 02:38:27.54 ID:f3R26hc10.net
>>960
every ... whose って楽だったなあと

962 :名称未設定:2023/01/30(月) 09:05:16.02 ID:5649FAEH0.net
whose使えるよ
adobeApps=Application("System Events").applicationProcesses.whose({name:{ _contains: 'Adobe' }}).name()

963 :sage:2023/01/31(火) 09:32:42.92 ID:M2eRX9Lu0.net
>>960, >>961
javascript形式のapplescriptを学習する書籍や
ホームページをご紹介いただけると幸いです。
英語の書籍・ホームページでも大丈夫です。

964 :名称未設定:2023/01/31(火) 12:21:12.08 ID:qR88flPO0.net
俺もJSで書くようにしようかな… と時々思っては思うだけで終わってる

965 :名称未設定:2023/01/31(火) 21:52:30.38 ID:oG0hvaru0.net
>>962
あ、、、Release Notesにしっかり書いてありました

966 :名称未設定:2023/02/06(月) 10:17:18.89 ID:0bjnOdyZ0.net
誰か教えていただけませんか。

set volumeを使ってボリュームのコントロールができますが、
左右のバランスをセンターに設定する方法をどなたか知りませんか?

Audio MIDI設定で0.5に設定すればいいのは知っていますが、
set volume alert volume 0
set volume output volume 50
set volume input volume 50
などとまとめて設定をしたいのです。

967 :名称未設定:2023/02/06(月) 11:09:59.95 ID:NlXXdeKF0.net
> set volume output volume 50

これで一緒にバランス調整されてない?
試したらセンターになったけど、ってここ見て知った https://github.com/jpwenzel/reset-audio-balance

968 :名称未設定:2023/02/06(月) 11:37:39.59 ID:0bjnOdyZ0.net
>>967
set volume output volume 50
何度も試しましたがこれだけでバランスは調整されることはないですね。

969 :名称未設定:2023/02/06(月) 13:07:14.73 ID:YlUscaYB0.net
こういう記事があるので、System Events経由しないと触れないってことじゃないかな。
therapy.under.jp/osx-mavericks-%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A%EF%BC%9A%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%EF%BC%9A%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9-%E3%82%92%E3%82%BB/

970 :名称未設定:2023/02/15(水) 15:56:09.72 ID:qib9yM4Y0.net
AppleScriptではないのですが、Automatorのフォルダアクションがある時から動かなくなる減少が頻繁に起こるのですが、同じ現象の人いませんか?ソースをいじっていないのに急に動かなくなります...

971 :名称未設定:2023/02/15(水) 18:50:08.07 ID:wteAUxtG0.net
Automatorスレでやれや

972 :名称未設定:2023/02/20(月) 10:48:54.33 ID:TuuDDhJs0.net
教えてください。
https://eastmanreference.com/complete-list-of-applescript-key-codes
ここを参考に

tell application "System Events"
key code 49
end tell

これをAutomatorでアプリケーションで作ったAppleScriptで実行すると構文エラーになってしまいます。

なぜなんでしょうか?
アプリケーションとして保存しても

アクション"AppleScriptを実行”でエラーが起きました:“操作を完了できませんでした。
(com.apple. Automator I 5 --212) "

アクション"AppleScriptを実行”でエラーが起きました: “System Events
でエラーが起きました: アプリ名にはキー操作の送信は許可されません。

などのエラーが出ます。
システム設定のプライバシーとセキュリティのアクセシビリティでアプリを追加をしています。

なぜエラーが出て実行できないのでしょうか。
どうすれば改善できるのでしょう。

973 :名称未設定:2023/02/20(月) 11:09:34.12 ID:YANdS4h30.net
System Eventsも追加すりゃいいんじゃないの

974 :名称未設定:2023/02/20(月) 11:10:11.63 ID:YANdS4h30.net
ってもう追加されてんのか流れ的に
すまん

975 :名称未設定:2023/02/20(月) 17:59:43.63 ID:dsaFNpZw0.net
何で Automatorでやってるのかわからんけど
一度実行ボタン押して
カーソルの位置にスペースが入ったとかってオチじゃないよね?

976 :名称未設定:2023/02/20(月) 18:47:50.41 ID:TuuDDhJs0.net
レス頂いててありがとうございます。
しかし私のミスでAutomatorスレと間違って書き込みをしてたようです…
移動させていただきます。
失礼しました。

977 :名称未設定:2023/03/23(木) 10:11:24.47 ID:sMTI/zjW0.net
Venturaでシステム設定に変わって制御するスクリプト書き換えててなんか上手く動かねえなと思ったら「セキュリティとプライバシー」が「プライバシーとセキュリティ」に変わっていた

978 :名称未設定:2023/03/23(木) 17:23:33.29 ID:IR5kOyOp0.net
なんという間違い探し…よく見つけたね
com.apple.preference.securityとかbundle使った方が安全っちゅうこっちゃね

979 :名称未設定:2023/03/23(木) 21:04:53.89 ID:sMTI/zjW0.net
そういや.prefPaneを開くという方法もあったな
ちなみにpaneは用語説明に残ってはいるがエラーにしかならない

980 :名称未設定:2023/03/23(木) 21:14:32.64 ID:IR5kOyOp0.net
こんな?
tell application "System Preferences" to set current pane to pane id "com.apple.preference.security"

981 :名称未設定:2023/03/23(木) 21:23:16.08 ID:OytpOZvV0.net
本当によく見つけたね…
存在してるけど動かない物も多いから最近はターミナルでバンドル組んでるわ…

982 :名称未設定:2023/03/23(木) 22:20:24.22 ID:1lysEDrt0.net
ターミナルでバンドル組むってなに

983 :名称未設定:2023/03/23(木) 23:24:59.63 ID:IR5kOyOp0.net
こんな??知らんけど
open x-apple.systempreferences:com.apple.preference.security

984 :sage:2023/03/24(金) 09:48:22.00 ID:tp6ybqm30.net
次のAppleScript(1)に対応するJavaScriptの書き方をご教示いただけますか?
(1) set test1 to do shell script "
test2=$(/bin/ls /Users/john/*.json)
echo $test2
"
log (test1)

自分で書いたJavaScript(2)ではスクリプトエラー(3)が表示されます。
ただこのエラーの中には*.jsonに一致するファイル名が含まれているので
/bin/ls /Users/john/*.jsonは途中まで成功しているようです。

(2)app = Application.currentApplication();
app.includeStandardAdditions = true;
var exec = `
"
test2=$(/bin/ls /Users/john/*.json)
echo $test2
"
`
var resultX = app.doShellScript(exec)
console.log(resultX);

(3) スクリプトエラー
Error: Error: sh: line 4:
test2=/Users/john/01.json
/Users/john/03.json
echo
: No such file or directory

985 :名称未設定:2023/03/24(金) 10:22:38.24 ID:G8ouTVCw0.net
(2)からダブルクウォーツ取っ払えばいけたぽいけど

986 :sage:2023/03/24(金) 10:43:07.07 ID:tp6ybqm30.net
素早いご助言を感謝です。ダブルクウォーツを削除した結果
エラー表示が消えました。ただ「帰り値を表示する」console.log(resultX);
での結果が、undefinedとなります。
console.log(resultX)を削除して、(4)を実行すると、ScriptEditorの「結果」の欄に
*.jsonファイル名が正しく表示できます。ここで表示されているリストをresultXに
入れる方法がございますでしょうか?

(4) app = Application.currentApplication();
app.includeStandardAdditions = true;
var exec = `
test2=$(ls /Users/john/*.json)
echo $test2
`
resultX = app.doShellScript(exec);

987 :名称未設定:2023/03/24(金) 10:56:15.68 ID:5GAFP4Gj0.net
resultXには代入されているが文字列としてだね
「返された値」を表示すれば出てくるよ

988 :名称未設定:2023/03/24(金) 11:01:18.81 ID:G8ouTVCw0.net
結果は入ってるじゃん

989 :名称未設定:2023/03/24(金) 11:06:51.34 ID:5GAFP4Gj0.net
ゴメンよく読んでなかった。すでに表示してるんだね。
undefinedはresultXへの代入結果でしょ
最後にresultX入れとけば表示されるよ

990 :sage:2023/03/24(金) 11:38:00.15 ID:tp6ybqm30.net
>>989
>最後にresultX入れとけば表示されるよ
ありがとうございます。うまくいきました。
デバッグ作業で変数などの値を確認するために、console.log(変数)で確認して
きましたが、
console.log(resultX)だとundefinedになるのは、何か特別な「仕様」なのでしょうか?

991 :名称未設定:2023/03/24(金) 12:26:23.67 ID:5GAFP4Gj0.net
>>989
>undefinedはあくまで最後の式の実行結果でしょ。
結果を返さないからundefined
console.logの表示内容は「返された値」に表示されている。

992 :名称未設定:2023/03/24(金) 12:26:44.94 ID:5GAFP4Gj0.net
アンカ間違えて>990ね

993 :sage:2023/03/24(金) 15:56:27.67 ID:tp6ybqm30.net
>>991
>console.logの表示内容は「返された値」に表示されている。
丁寧なご説明を本当にありまとうございます。
 「結果」の欄と「メッセージ」の欄を混乱してました。
「最後にresultX入れとけば表示される」のは「結果」の
欄で、それとほぼ同じ内容がconsole.log(resultX)とすると
「メッセージ」の欄に表示されるため、作業している
途中で頭が混乱してしまいました。

994 :名称未設定:2023/03/25(土) 02:05:22.65 ID:eef2YPir0.net
>>984
ChatGPT さんにその質問を投げてみた
ワイにはちんぷんだがこれ合ってんの?



次のJavaScriptコードは、AppleScriptで提供されたコードと同じ機能を提供します。

const { execSync } = require('child_process');

const test2 = execSync('/bin/ls /Users/john/*.json').toString().trim();
console.log(test2);

このJavaScriptコードは、Node.jsの標準ライブラリであるchild_processを使用して、ターミナルからコマンドを実行しています。execSync()メソッドは、指定されたコマンドを同期的に実行し、その出力を返します。これにより、test2変数に/Users/johnディレクトリにある.jsonファイルのリストが格納されます。

そして、console.log()メソッドを使用してtest2変数の値をログに出力しています。注意してください、JavaScriptの場合、 console.log()のみログに出力することができ、変数を直接ログに出力することはできません。

995 :名称未設定:2023/03/25(土) 06:44:11.86 ID:9wC9X/Dv0.net
AppleScript アップルスクリプト 質問、発表 8
https://egg.5ch.net/test/read.cgi/mac/1679693883/

996 :名称未設定:2023/03/25(土) 08:54:40.59 ID:zyuo/Yd90.net
>>994
それもうAppleScriptもJXAも関係ないだろ
なんでも持ち込むな

997 :名称未設定:2023/03/25(土) 13:35:07.93 ID:jgAiznrY0.net
うめ

998 :名称未設定:2023/03/25(土) 13:37:33.81 ID:jgAiznrY0.net
こぶ

999 :名称未設定:2023/03/25(土) 13:38:53.62 ID:pO8wJ1xu0.net
とり

1000 :名称未設定:2023/03/25(土) 13:40:40.88 ID:jgAiznrY0.net
Fin

1001 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1001
395 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★