X



AppleScript アップルスクリプト 質問、発表 7 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001名称未設定
垢版 |
2017/04/01(土) 12:42:51.78ID:F8/5NUFI0
質問、発表どっちでもスレ。

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

■参考
AppleScript Language Guide
https://developer.apple.com/library/mac/documentation/AppleScript/Conceptual/AppleScriptLangGuide/
TN2065: do shell script
https://developer.apple.com/library/mac/technotes/tn2065/
AppleScript: The Language of Automation
http://www.macosxautomation.com/applescript/
MacWiki - AppleScript
http://macwiki.osdn.jp/wiki/index.php/AppleScript
鳶嶋工房 / AppleScript
http://tonbi.jp/AppleScript/
AS Hole(AppleScriptの穴)
http://piyocast.com/as/
■過去スレ直近5つ
6 http://potato.2ch.net/test/read.cgi/mac/1387630245/
5 http://anago.2ch.net/test/read.cgi/mac/1330350325/
4 http://anago.2ch.net/test/read.cgi/mac/1256127156/
3 http://pc11.2ch.net/test/read.cgi/mac/1223026902/
2 http://pc11.2ch.net/test/read.cgi/mac/1197443062/
0670名称未設定
垢版 |
2021/09/02(木) 11:13:47.97ID:5WrXhp0J0
>>669
すごいスクリプトお疲れ様です。
初歩的なこともわかってないのですが、
これはどのように使えば動くんでしょうか。
0671名称未設定
垢版 |
2021/09/02(木) 12:04:08.20ID:45YTd02f0
形は一応AppleScriptだからスクリプトエディタにコピペで動くよ(10.15と10.12で試した)
ただ、実質swiftだからXcodeのコマンドラインツール入れてないなら試さない方がいいと思うよ
0672名称未設定
垢版 |
2021/09/02(木) 12:22:32.67ID:5WrXhp0J0
>>671
教えていだだいてありがとう。
Xcodeはインストールしてないので試さないほうがいいですね。

先日Karabiner Elementsで問題は解決したと上でかいたけど、
スリープが出来ない大問題が発覚してやはりAppleScriptに頼っていますので
音量調整で画面にスピーカーマークが出るようにできないかと情報を集めているので
上のスクリプトは藁をも掴む思いでした。
0673名称未設定
垢版 |
2021/09/02(木) 19:43:23.37ID:1P/TjKHA0
これはもうアップルスクリプトではないな。
0674名称未設定
垢版 |
2021/09/03(金) 06:56:32.62ID:OD40yGhj0
書き直してくれてもいいのよ
0675名称未設定
垢版 |
2021/09/03(金) 12:34:41.20ID:8bw/FRcK0
まあ普通に AppleScriptObjC や JXA で書き直せるわな
元はどうもPythonのをみたいだが、何でSwiftでなんだかというのはある
単なる趣味だろうけど
0676名称未設定
垢版 |
2021/09/03(金) 13:31:25.54ID:OD40yGhj0
どこまでできるか試したかったってとこは趣味だが、JXAに書き直しても動かなかったからswiftのままなのはしぶしぶだ
10.15だとスクリプトエディタがクラッシュしちゃうんだもん
普通のキーボードイベントで試すと10.12では動くのに、やっぱ10.15だとクラッシュするし
0677名称未設定
垢版 |
2021/09/08(水) 21:19:29.79ID:0ZE4zIoy0
AppleScriptで、システム環境設定のモニターのカラープロファイルを任意のものに変更ってできないのでしょうか?
出来るなら教えていただけませんか。
0678名称未設定
垢版 |
2021/09/09(木) 05:32:17.25ID:noRCRlD+0
「変更」はAppleScriptではモロにはサポートしてないよう
GUI Scripting か Cocoa API 使ってで可能だろう

Cocoa API を使ってのは Python で書いてるのがあるからそれを使えば
customdisplayprofiles set /path/to/profile.icc
customdisplayprofiles set --display 2 /path/to/profile.icc
と簡単にできそう
0679名称未設定
垢版 |
2021/09/22(水) 10:32:20.04ID:bXvdFaiS0
誰か教えていただけませんか。

tell application "Firefox"
activate
tell front window
set bounds to {200, 200, 1000, 1000}
end tell
end tell

これでアプリが起動してウインドウが開いてくれますが、
すでにアプリが起動している場合新規ウインドウを作ってくれません。
その場合DockのFirefoxのアイコンをクリックするとその時にやっと新規ウインドウをつくってくれます。

そうではなく、アプリの起動終了時に関係なく新規ウインドウを作ってくれるようにはできないでしょうか。
0680名称未設定
垢版 |
2021/09/22(水) 12:34:56.31ID:9YqPqwoA0
アプリただ起動時Dockからアクティベートされた時に新規なのは、
AppleScript関係ない、普通のアプリケーションの挙動
AppleScriptでそうでなくならそう書くそう書けばいいだけ
0681名称未設定
垢版 |
2021/09/22(水) 12:58:22.37ID:z6jJoYx20
新規Windowを開く命令を書かないと。
その前に、Windowが開かれているかどうかの確認もしてね。
0682名称未設定
垢版 |
2021/09/22(水) 13:01:02.07ID:Me0Ba5ZC0
楽でいろんな味だしね
0683名称未設定
垢版 |
2021/09/22(水) 13:03:01.41ID:2B3UISa90
>>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
0684名称未設定
垢版 |
2021/09/22(水) 13:11:45.76ID:bXvdFaiS0
なかなか難しいですね。
また勉強してきます。
0685名称未設定
垢版 |
2021/09/22(水) 13:14:01.36ID:bXvdFaiS0
>>683
なるほど。こう書けばいいんですね。
とても参考になります。
Safariだと上ので問題なく開いてたので訳が分からなくて。
レスをいただいた方ありがとうございました。
もっと勉強します。
0686名称未設定
垢版 |
2021/09/22(水) 13:17:18.56ID:OLyohgyT0
if (count of document) is 0 then make new document 的な話じゃなくて?
0687名称未設定
垢版 |
2021/09/22(水) 13:26:23.10ID:9YqPqwoA0
>>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 とか アプリケーション実行ファイル直接叩いた方が簡単とかあるよねえ
0688名称未設定
垢版 |
2021/09/22(水) 13:52:22.13ID:bXvdFaiS0
追加でレスをいただきまして感謝します。
こちらもメモをさせていただき参考にさせていただきます。
ありがとうございます。
0690名称未設定
垢版 |
2021/09/22(水) 16:04:24.53ID:ExR8C57B0
Dockが送っているのはreopen命令じゃないのかな。
つまり、
tell app “Firefox” to reopen
で、ウインドウがない場合は新規に開くのでは?
0691名称未設定
垢版 |
2021/09/23(木) 00:31:56.98ID:OyEm922H0
reopen知らんかったわ
まさにこれだしハンドラも書けんのね
0692名称未設定
垢版 |
2021/10/03(日) 20:11:30.52ID:DZtAs1Hd0
選択したテキストをスティッキーズに貼り付けてフロートってのをやりたくて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
0693名称未設定
垢版 |
2021/10/04(月) 08:06:10.72ID:Jlrrqw800
入れた方がいいんじゃない
それと tell window 1 ているの?
0694名称未設定
垢版 |
2021/10/04(月) 12:07:38.35ID:pw/ISOAt0
キーストロークは安定しないからな…delay入れないとまず失敗する
0695名称未設定
垢版 |
2021/10/04(月) 14:04:01.00ID:Y8a8msMW0
>>693
なんとなく入れたけど要らないかも
delay気持ち悪いから入れたく無かったんだけど、やっぱ入れた方がいいのね。ありがとう

>>694
やっぱりそうかー
ウインドウフロートできるスクリプタブルなアプリ無いかなあ…
0696名称未設定
垢版 |
2021/10/04(月) 17:07:00.30ID:rJKgAjG90
delay気持ち悪いのわかるわー
昔の遅いマシンだと全く問題なかったやつが、早いマシンに買い換えたらイラレのドキュメント開く→保存して閉じるに間に合わなくて、スクリプトの書類に対してショートカットキー連発しちゃったりしたからkeystroke ひとつひとつにdelay かける羽目になったことある
0697名称未設定
垢版 |
2021/10/04(月) 17:45:59.00ID:JAjLo/A+0
サービスに「スティッキーメモを作成」ってのがあるけど
0698名称未設定
垢版 |
2021/10/04(月) 17:51:21.98ID:ZbffXIob0
>>696
keystrokeとか同期しない、アプリ側での実行の遅延が発生するのはしょうがないな

ちゃんと対象が準備できてるかチェックする待つのがより正しいんだけどな
だけど、最低でも三行かかるし、delayはお手軽にとりあえずいいやなら十分有用
確実性(無駄な待ちを排除するのを含めて)を求めるから、ちゃんとチェックするけど
0699名称未設定
垢版 |
2021/10/04(月) 17:52:43.68ID:JAjLo/A+0
delayはもう諦めちゃってるわ
自分の環境で動けばいいやと

あとは、メニューバーを直接操作するとdelay不要な場合もある
tell first menu bar's menu bar item "編集"'s menu "編集"'s menu item "ペースト" to click
0700名称未設定
垢版 |
2021/10/04(月) 22:33:34.45ID:ZbffXIob0
>>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にもならないのでどうかだが)
0701名称未設定
垢版 |
2021/10/14(木) 00:36:21.89ID:qETglRD80
スレチだとは思いつつも書き込みます
DragThingって神ランチャーでしたね
ささっとスクリプト書いて、パッと走らせる、案件ごとにドックを切り替えて上から順番に立ち上げる…
アプリケーションに保存してDOCKから走らせたりしてるんですが、なんかのタイミングで突然「許可されていません」とかごちゃごちゃ言い始めたりしてスクリプト走らせたまま離席して時間無駄にした事がたまーに起こる
スクリプトメニューに登録して解決!だったんだけど、スクリプト使うたび画面右上までカーソール持ってくのが遠い…
案件で分けたら一体どれだけの数のスクリプトがあるのやらって感じでメニューが膨大な量になる
これもう自分好みのランチャー作るためにプログラミング勉強するしかないのか🤪
高卒ジジイには今から勉強するのしんどいよ
0702名称未設定
垢版 |
2021/10/14(木) 00:42:19.77ID:KQ4g/0uG0
なんか書いて欲しいならそう言っちゃったほうがいいような
0703名称未設定
垢版 |
2021/10/14(木) 00:43:24.35ID:qETglRD80
ごめん、愚痴です
ついでに聞くならスクリプト大量に回してる人はどんな風に管理してらっしゃるのでしょう
0704名称未設定
垢版 |
2021/10/14(木) 01:02:31.03ID:KQ4g/0uG0
いやいや、謝るようはことは何もなく…
スクリプトたくさんある人はターミナル使ってると思うので
パスが通ったとこに置いてるだけとか、そんなんじゃないかなって
GUIから起動したいときは、自分ならドックに登録しちゃうかな
0705名称未設定
垢版 |
2021/10/14(木) 07:15:00.32ID:kChIEEWW0
DragThingの勝手はわからないけど、他の試せばいいじゃん
Keyboard MaestroとかAlfredとかHotKeyとか
HotKeyは無料、App Storeにある
0706名称未設定
垢版 |
2021/10/14(木) 08:50:21.29ID:UlOIqcaX0
Dragthingは直感的でほんと使いやすかったから仕方ない
キーボードに手を伸ばさずマウスポチだけで済むワークフロー組めたし
0707名称未設定
垢版 |
2021/10/14(木) 08:59:30.62ID:e1LncIPT0
Dragthing懐かしい
旧MacOSでなんちゃってdockとかやってたなー
0708名称未設定
垢版 |
2021/10/14(木) 15:18:51.05ID:UNO1aWZb0
>>701
>なんかのタイミングで突然「許可されていません」とか
何かのタイミング は スクリプトに手を加えて保存し最初の起動
許可されていません は アクセス許可を求められる
では?
on run
-- hello
tell application "Finder" to selection
end run
コメントの部分を変えて保存するだけでも直後の最初の起動でFinderへのアクセスの許可を求められる

だったら、バンドル内容を表示 でにある 識別子 をちゃんと設定したら解決する
hogehoge.com とかドメイン持ってるなら com.hogehoge.アプリ名 (アプリ名でなくてもいいけど、そのアプリと識別できるユニークであれば)
ドメイン持ってないなら、local.アプリ名 とか com.example.アプリ名 とかでも問題はまあ無いだろう。バンドル識別子 として そんなの勝手に使う(定義する)のはそのMacを使ってる本人ぐらいだろから
別の要因や許可されていませんという拒否でも効きそうかな
0709名称未設定
垢版 |
2021/10/14(木) 15:27:04.35ID:UNO1aWZb0
>>708
>だったら、バンドル内容を表示 でにある 識別子 をちゃんと設定したら解決する
以下は無かったことに
これじゃないこれだけじゃない何だったかなあ
0710名称未設定
垢版 |
2021/10/24(日) 14:18:55.88ID:L76Lx3uP0
メールのルールで、受信したメール本文を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
0711名称未設定
垢版 |
2021/10/24(日) 20:42:08.98ID:9LGvKaBq0
IMAP?
POPはググったらあるようにすんなりまともに動くことは無さげ
スクリプトの起動が早すぎ=メールの準備(オブジェクト)が出来上がってない状態で入ってくる感じ
せいぜいトリガー程度で、特別なグループ(メールボックス)に移動させて少し間を置いた後でそのメールボックス内の全てを処理するように別建てかなあ
0712名称未設定
垢版 |
2021/10/24(日) 21:40:08.21ID:L76Lx3uP0
>>711
IMAPです。
助言していただいたことを参考に、処理済みのメールボックスを用意し、受信をトリガーとして
inboxのlast messageに対してcsv書き出しの処理を実行。その後、処理済みボックスへ移動、
というのをinboxが空になるまでrepeatすることで解決しました。
ありがとうございました。
0713名称未設定
垢版 |
2021/10/31(日) 05:41:01.18ID:txbTDThf0
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 のリストが出なくて {} になる
どう変わったかわかるひといる?
0714名称未設定
垢版 |
2021/10/31(日) 07:11:36.11ID:3Qgxxls00
まだ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
0715名称未設定
垢版 |
2021/10/31(日) 07:13:06.34ID:3Qgxxls00
3行目はこれで良かったか
tell menu bar 1's menu bar item "サウンド" to click
0716名称未設定
垢版 |
2021/10/31(日) 17:07:20.08ID:OQ5GUNEW0
>>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 までできていたんだが、今はできなくなった、ということ。
0717名称未設定
垢版 |
2021/10/31(日) 17:07:38.01ID:OQ5GUNEW0
>>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 までできていたんだが、今はできなくなった、ということ。
0718名称未設定
垢版 |
2021/10/31(日) 20:41:15.23ID:3Qgxxls00
スクリプトエディタで実行するとエラーメッセージでどこが取れてないか分かるんじゃない
OSバージョン変わるとUI elementの階層とかpropertyが変わってたりすることは良くある
0719名称未設定
垢版 |
2021/11/02(火) 11:41:49.27ID:QRbS4Qqj0
ズバリ教えてほしいです。
流れはこんな感じ

VLCが起動していて、再生中の場合はVLCを一時停止して(停止ではない) (1)を実行
VLCが起動していて、停止中の場合 (1)を実行
VLCが起動していない場合 (1)を実行

この3つを条件にしたApple Scriptがほしいです。

再生・一時停止は、以下の実行するたびに切り替わります
tell application "VLC"
play
end tell

(1)は以下を使用します
do shell script "pmset displaysleepnow"

どなたか教えていただけませんか。
よろしくお願いします。
0720名称未設定
垢版 |
2021/11/02(火) 11:59:02.60ID:pGU9BlJ/0
if application "VLC" is running then
-- 起動している
tell application "VLC"
if playing then
-- 再生中
else
-- 再生中でない
end if
end tell
else
-- 起動していない
end if
とか
0721名称未設定
垢版 |
2021/11/02(火) 11:59:22.94ID:7syMT4e20
要約すると単に(1)を実行すればいいんじゃね
0722名称未設定
垢版 |
2021/11/02(火) 12:00:41.19ID:YqqFtmZG0
こう?

if application "VLC" is running then
tell application "VLC" to play
end if
do shell script "pmset displaysleepnow"
0723名称未設定
垢版 |
2021/11/02(火) 12:12:27.25ID:QRbS4Qqj0
みなさん早速ありがとうございます。

>>722
教えていただいたものを実行してみましたが、
再生中の場合は、一時停止してスリープへ移行したのですが、
一時停止中の場合は、再生が開始された状態でスリープへ移行してしまいました。

>>720
教えていただいたものでうまくきそうです。
-- 再生中のところにだけに
tell application "VLC"
play
end tell
でいけそうです。

早々に皆さんにレスをいただきとても感謝です。
ありがとうざいます。
0724名称未設定
垢版 |
2021/11/03(水) 13:56:42.68ID:ox4JR8wY0
>>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”のところで起動しているんだと思うのですが、
起動していない時には起動しないようには出来ないですかね。
厚かましいく大変申し訳ないですがどなたかわからないでしょうか。
0725名称未設定
垢版 |
2021/11/03(水) 15:00:34.27ID:ox4JR8wY0
>>724
解決できたようです。

これまでAutomatorにAppleScriptをアプリケーションにして使っていましたが、
これをクイックアクションに変更して検索対象をVLC.appにすると問題は解決しました。
たくさんスレを消費して申し訳ありませんでした。

教えていただいた方々改めてありがとうございました。
0726名称未設定
垢版 |
2021/11/03(水) 15:41:13.91ID:ox4JR8wY0
何度もすみません。
問題が解決したと思ったのは私の早とちりでした。
0727名称未設定
垢版 |
2021/11/03(水) 15:49:32.61ID:kssODVoN0
さっき俺が書こうとしてたトンデモ案

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
0728名称未設定
垢版 |
2021/11/03(水) 15:52:07.55ID:kssODVoN0
しまった
さっきはSafariで書こうとしてたのにうっかりしてバックスラッシュを化かしてしまった
0729名称未設定
垢版 |
2021/11/03(水) 16:03:33.54ID:ox4JR8wY0
>>727
なんとレスをいただけるとは思わなかったので嬉しいです。

Autometorでアプリケーションで組み込んでみましたが今のところ思った通りにうごいているようです。
もう少し確認してみますが、早速レスをいただきとても感謝します。
ありがとうございます。
0730名称未設定
垢版 |
2021/11/03(水) 16:04:14.56ID:ox4JR8wY0
>>728
バックスラッシュは大丈夫です。
お気遣いありがとうございます。
0731名称未設定
垢版 |
2021/12/17(金) 23:27:06.76ID:U91KyQsQ0
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
0732名称未設定
垢版 |
2021/12/17(金) 23:27:36.32ID:U91KyQsQ0
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
0733名称未設定
垢版 |
2021/12/17(金) 23:35:55.87ID:U91KyQsQ0
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中にに存在しない。有るのに)。ウィンドウを前後なぞしたりしたら急に現れるナゾ
でも、まあ、そこそこ確実(+それなりに速い)と思う
0734名称未設定
垢版 |
2021/12/18(土) 18:15:36.19ID:36fY0MzD0
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")) + 定数
0735名称未設定
垢版 |
2022/01/15(土) 00:18:15.28ID:dKjLdNRz0
お知恵をお貸しいただけないでしょうか。
スクリプトは見よう見まねで自分用に多少書き替える程度のことはできる、という最低レベルです(基本がわかっていないので応用が効かず……)

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テンプレートは一種類ではなく、文章の中身によって変えたいです。
よろしくお願いいたします
0736名称未設定
垢版 |
2022/01/15(土) 00:28:08.80ID:hOsIgaeq0
パスのスペースをエスケープするなり、パス全体をシングルクォーテーションで囲ってはどうか
0737名称未設定
垢版 |
2022/01/15(土) 03:55:32.83ID:dKjLdNRz0
>>736

スペース含むファイル名のみをシングルクォーテーションで囲ったらなんとかうまくいきました

助かりました、本当にありがとうございました!
0739名称未設定
垢版 |
2022/01/21(金) 15:05:48.44ID:+vjJ+SBs0
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ファイルのみを開くにはどのように記述すればよいですか?
0740名称未設定
垢版 |
2022/01/21(金) 15:53:22.39ID:IYX9nqAK0
開くだけでいいならこれ1行で
do shell script "open ~/Downloads/*.pdf"
0741名称未設定
垢版 |
2022/01/21(金) 16:05:20.88ID:+vjJ+SBs0
>>740
すごい!!
ありがとうございました。
助かりました。
0742名称未設定
垢版 |
2022/01/21(金) 18:29:58.94ID:C9M4mQFu0
突き詰めるほどにdo shell scriptが増えてくるのは俺だけ?
0743名称未設定
垢版 |
2022/01/21(金) 20:14:47.86ID:gnvHvYbr0
楽し過ぎるとバカになる
0744名称未設定
垢版 |
2022/01/23(日) 10:46:02.79ID:mSlzWjEh0
何度もすみません
ダウンロードフォルダにあるpdfファイルを変数に入れるにはどう書けば良いですか?
set Dfile to document files whose name extension is "pdf" of (path to downloads folder)

エラー
"pdf" of (path to downloads folder)を取り出すことはできません。利用が許されていません。
0745名称未設定
垢版 |
2022/01/23(日) 11:01:13.58ID:BkttkSoy0
>>744
tell application "Finder"
set Dfile to files of (path to downloads folder) whose name extension is "pdf"
end tell
0746名称未設定
垢版 |
2022/01/23(日) 11:08:56.30ID:mSlzWjEh0
>>744
なかなか思い通りに動かせなくて困っておりました。
ご親切に教えて頂きましてありがとう御座いました。
0747名称未設定
垢版 |
2022/02/18(金) 15:22:57.08ID:69rmkvNs0
どなたか教えてください。
特定のフォルダのウインドウサイズと位置をフォルダを開かずにサイズと位置を変更する方法はありませんか?

ウインドウを開く前にウインドウサイズと位置を設定したいです。
0748名称未設定
垢版 |
2022/02/18(金) 15:49:28.83ID:6Ai0MkWn0
そういうのは.DS_Storeに保存されるんだろうけど、方法ないんじゃないの
0749名称未設定
垢版 |
2022/02/18(金) 16:19:51.30ID:YxxZRNHG0
>>748
そのファイルはもうお亡くなりになりました…
前にも同様のDS_storeとfinderのwindow位置で書いたわ。

~/Library/Preferences/com.apple.Finder.plist
の消去をするとリセットされるぐらいしか無くて、解決しなかった。
むしろ元に戻ると言う報告もあってお手上げだったよ🤷‍🤷‍♂
0750名称未設定
垢版 |
2022/02/18(金) 16:42:09.79ID:69rmkvNs0
レスありがとう。
やはり方法はないんですね。

実は、Big Sur以降MontereyでもMacintosh HDのFinderウインドウサイズが再起動するとリセットされてしまい小さなウインドウサイズに変わってしまうバグがあるけど(Time Machineの外付けHDDのウインドウも同じバグが)、
いちいち起動ごとにリサイズするのが面倒なので、今は
Macintosh HDのFinderウインドウを開く -> リサイズ -> 閉じる
ってAppleScriptを作って起動項目にいれてるのですが、
Macの起動時に一瞬ウインドウが見えて消えるのが嫌な感じだな…と思いつつ使っていて何か改善方法はないかと思って質問をしました。

方法がもうないのなら今の方法で対応するしかない感じですね。
0751名称未設定
垢版 |
2022/02/18(金) 17:36:12.53ID:dSUuIAx10
フォルダアクションで開いた時に修正リサイズするとか
0752名称未設定
垢版 |
2022/02/18(金) 18:07:24.18ID:69rmkvNs0
>>751
なるほどーその手もあるんですね。
しかしその場合だと開くたびに同じ修正値にリサイズされるので
デフォルトサイズ以外だとリサイズしない設定も加える必要があるでしょうね。
ちょっと頑張ってやってみます。
レスありがとうございます。
0753名称未設定
垢版 |
2022/02/24(木) 19:50:14.86ID:k3pqM6dE0
質問ばかりで申し訳ありません。
また一つ教えていただきたいのですが、
Macの起動や再起動時に文字入力を英字(A)にしたくて下記のAppleScriptを使っていますがうまく英字にならず日本語になってる事があります。

tell application "Finder"
tell application "System Events"
keystroke ";" using {shift down, control down}
end tell
end tell

tell application "Finder”はあってもなくても動作が思ったようになりません。

どこか手直しすればいいのか、他に何かいい方法(AppleScriptにこだわってはいません)はないでしょうか。
0754名称未設定
垢版 |
2022/02/24(木) 21:14:12.60ID:vu02H8Th0
tell application "Finder"
は、いらない
フロントアプリ(まあ、Finderなんだろうけど)や、Input Methodの準備が整ってない段階でkeystrokeを発行する時があるんじゃないの
とりあえず delay 60 とか(起動で落ち着くまで)最初に入れてみるとか。それで大丈夫なようだったら、次を考えようw

http://piyocast.com/as/archives/5068
って、Cocoa APIで直接とかあるな。よく読んでないけど、Cocoa APIなら確実性はありそうかな
現在のモードを取得とかもあるんじゃないかな。あるんだったら、準備ができてなくてなら失敗しても待って繰り返すとかできそうかな
0755名称未設定
垢版 |
2022/02/24(木) 21:24:36.14ID:vu02H8Th0
あ、Cocoa APIじゃなく(Cocoa APIを使った)有志のフレームワーク使ってた
フレームワーク使わずにできるか見てみるわ
0756名称未設定
垢版 |
2022/02/24(木) 21:39:36.49ID:k3pqM6dE0
>>754
レスありがとうございます。

Finderの部分は必要ないんですね。
最初delayを入れてたけど、効果ないのかなと思って外してたけど
落ち着くまでの適当な秒数入れたほうがいいんですね。

>フレームワーク使わずにできるか見てみるわ
お手数をおかけします。
ありがとうございます。
0757名称未設定
垢版 |
2022/02/24(木) 21:51:44.65ID:vu02H8Th0
フレームワークで使ってる 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 で現在のを取れるし設定できる
0759名称未設定
垢版 |
2022/02/24(木) 22:00:24.99ID:vu02H8Th0
>>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
0760名称未設定
垢版 |
2022/02/24(木) 22:02:16.21ID:vu02H8Th0
>>759
あ、
on error message
return message
は、いらない。あったらリトライせずに終わることもある
なかったら無限になりえるけど、まあ無いだろうし、無限になっても影響は無いだろうw
0761名称未設定
垢版 |
2022/02/24(木) 22:08:31.20ID:Tbke4kz20
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になるまでインプットソースをロールさせるのがいいんじゃね(拾い物)
0762名称未設定
垢版 |
2022/02/24(木) 22:16:10.53ID:vu02H8Th0
Objective-C ラスのは、スクリプトエディタ以外で走らせるのは何か準備が必要のようかなあ
とりあえず、オススメはしないw すまん

selectedKeyboardInputSource ってプロパティを見る弄るだけなので俺の好みだけど
以下、どうにか使うようにするのは俺の趣味だな
0763名称未設定
垢版 |
2022/02/24(木) 22:46:35.58ID:k3pqM6dE0
みなさんこんな時間にも関わらずレスをいただき感謝します。
どれがいいか順番に試してみたいと思います。
しかしみなさん詳しくて頭が下がります。
0764名称未設定
垢版 |
2022/02/24(木) 22:46:46.77ID:0nBEATFf0
私の環境(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
0765名称未設定
垢版 |
2022/02/24(木) 22:54:34.74ID:k3pqM6dE0
なるほど、どれにしても少し待つ事が重要そうですね。
0766名称未設定
垢版 |
2022/04/08(金) 12:32:46.92ID:PPzDmSLN0
大量のフォーム入力された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です
アドバイスお願いします
0767名称未設定
垢版 |
2022/04/08(金) 12:40:10.43ID:RbfnIhf60
すみません、上のコマンドに-o l入れ忘れてました…
入れてもフォームが全部空っぽになってしまいます
0768名称未設定
垢版 |
2022/04/08(金) 13:08:18.18ID:nMu/YqbA0
しかもfitplot の綴り間違えてるし
なんか他にも間違えてそう
0769名称未設定
垢版 |
2022/04/08(金) 19:40:11.61ID:faKJalEq0
>>766
CUI/コマンドでの方がスマートに 見える かもしれないが、macOS/Finderにあるのに使われないw、Print/印刷コマンド使えば
Finder で PDFファイルを選んで、ファイル メニューにあるやつ

> プレビューにてSystem eventでメニューポチ、プリントポチだとdelayが上手くハマらない?場面で失敗してしまい、なかなかうまくいきません
ってやろうとして、コマンドでなのか。だったら、上記のFinderからので良さげのような
なんだったらわざわざAppleScriptでやる必要もないような、その大量の数がわからんけど、そのFinderの使ってのAppleScript書くのはそう難しくはないだろう
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況