■ このスレッドは過去ログ倉庫に格納されています
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
>数値文字参照( )
数値文字参照( )
- 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 ★