Venturaで
システム設定.app>一般>ストレージ>すべてのボリューム
を開くスクリプトって可能でしょうか
>>107
tell application "System Events" to get every disk ありがとうございます
>>108さんのアドバイスで解決しました
頑張る、なんてコマンド、リファレンスのどこにも書かれていない...(´・ω・`)
on run {input, parameters}
tell application "System Settings"
activate
reveal pane id "com.apple.systempreferences.GeneralSettings" -- works as expected
delay 1
tell application "System Events"
tell process "System Settings"
click button 3 of group 1 of scroll area 1 of group 1 of group 2 of splitter group 1 of group 1 of window "一般"
delay 4 --接続している外部機器がスリープしている場合、すべてのストレージ機器がウェィ苦するまでに要する時間にする
click button 1 of group 1 of scroll area 1 of group 1 of group 1 of group 2 of splitter group 1 of group 1 of window "ストレージ"
end tell
end tell
end tell
end run
ショートカット化して「cmd-F19」で起動可能にして便利になたよ(`・ω・´) JavaScript(JXA)をAutomatorで効率的に実行する方法についての
質問です。現在は同じ内容のJavaScript(JXA)を
「ライブラリー==>JavaScriptを実行」で複数回
次のようにAutomatorに書き込んでいます。
function run(input, parameters) {
[50行の同一のJXA]
return input;
}
この[50行の同一のJXA]を外部ファイルに書き出して,それをAutomator
から実行する(呼び出す)方法はございますか?
なお「同じ内容のJavaScript(JXA)」の前後には,Automatorで
JXA以外のコマンドを実行しております。
ご教示ありがとうございます。(1)フォルダーを作成し:
mkdir ~/Library/Script Libraries/
(2)そこにQuickTimeを制御するplayQt.scpt起き
function playMov() {
quickTimePlayer = Application("QuickTime Player");
quickTimePlayer.activate();
途中省略
}
(3)Automatorの方には次のようなJXAを書き込み
function run(input, parameters) {
toolbox = Library('playQt');
toolbox.playMov();
return input;
}
Automatorを実行すると,「Automatorが予期しない理由で終了しました」となりエラーが発生しました。
試しに(2)のスクリプトを次のように実質空にしても
function playMov() {
;
}
同じエラーメッセージが発生するので,(3)に問題があるようです。
(3)の中の2行は、Automatorでなしに、スクリプトエディタ上では動くの?
toolbox = Library('playQt');
toolbox.playMov();
>>115
>スクリプトエディタ上では動くの?
スクリプトエディタ上で(3)を実行すると
「スクリプトエディタが予期しない理由で終了しました。」と
エラーメッセージが表示され,クラッシュします。
2行目のtoolbox.playMov();を削除して
toolbox = Library('playQt');だけを実行すると
クラッシュはせず,エラーメッセージも表示されませんが
(予想通り)何も起こりません。 >>113
ここに紹介されているtoolbox.scptをコピペして
スクリプトエディタから,同じく紹介されている:
toolbox = Library('toolbox')
toolbox.log('Hello world')
を実行しても,「スクリプトエディタが予期しない理由で終了しました。」
と表示されて,クラッシュします。
どこかで致命的なミス・思い違いをしているかもしれません。 JXAの実行環境がぶっ壊れてるのかも
作りかけのJXAスクリプトであっけなくクラッシュしてしまうことは時々あるけど、今回のスクリプトは間違ってるわけでなし、うちでは動く
ご報告
別OSで試してみたらクラッシュしたw
どちらも古いけど
High Sierraでは動く
Catalinaではクラッシュ
>>120
ありがとうございます。家に帰り次第,試してみます! >>122
「実効専用」の「scptd (Script Bundle)で保存」して
見事,動きました!!! Ventura13.4.1では
「実効専用」のチェックボックスを
チェクしないと,動かないようです。 (2)のJXAで,動画ファイル/Users/taro/13.mp4を開こうとすると,
(1)「書類“13.mp4”を開けませんでした。
このファイルはQuickTime Playerと互換性がありません。」
というエラーが表示されます。
(2) quickTimePlayer = Application("QuickTime Player");
quickTimePlayer.activate();
result1 = quickTimePlayer.open("/Users/taro/13.mp4");
しかし(2)を実行する直前に:
(3) この動画ファイル13.mp4をQuickTime Player.appで開き
次にQuickTime Player.appを終了(Quit)する
作業を行い,その後に(2)を実行すると,(1)のエラーは表示されずに
正常に動画13.mp4が再生されます。
ご教示いただきたいのは,(3)の作業を行わずに,直接(2)の
ようなJXAだけで正常に動画13.mp4を再生する方法です。
よろしくお願いします。
>>124
>quickTimePlayer.open("/Users/taro/13.mp4");
quickTimePlayer.open(Path("/Users/taro/13.mp4"));
JXAでファイルパスは単なる文字列表現で済ますのではなく、Pathで明示した方がいいだろう 変数が 0 なら 1 を代入するスマートな方法ある?
try
A * 1
on error
set A to 1
end try
---
item ((A / A) + 1) of {1, A}
set A to result
結局ベタが一番な気が
if x is 0 then set x to 1
x = x === 0 ? 1 : x;
Dockから特定のアプリを削除
Dockに特定のアプリを登録
これわかんねー
DockもAppleScript対応して欲しいもんだ
SonomaでNight-shiftをapplescriptで実行する方法ご存知ありませんか?
https://github.com/ravicious/toggle-night-shift
これは試してみましたがダメでした。
本当は「カラーを反転」の状態でNight-Shiftをやりたいのですが
デフォルトではNight-Shiftで自動的にカラー反転が戻ってしまいます。
そこでカラープロファイルを2つ用意してトグルするともう一度反転が起こって
Night-Shiftとカラー反転を両立できるところまで分かっているのですが、
それをスクリプトで実行したくて質問したものです。 GUI scriptingでコントロールセンターを操作するとか
ご返事ありがとうございます。
Python は無知ですのでハードルが高そうですけど試してみます。
そこのグレースケールを操作するところの話、JXAで
var bundle = $.CFBundleCreate($.kCFAllocatorDefault, $.NSURL.fileURLWithPath('/System/Library/PrivateFrameworks/UniversalAccess.framework'));
var UAGrayscaleSetEnabled = $.CFBundleGetFunctionPointerForName(bundle, $('UAGrayscaleSetEnabled'));
ObjC.bindFunction('UAGrayscaleSetEnabled', ['void', ['bool']]);
$.UAGrayscaleSetEnabled(true);
Night Shiftの設定、JXAで
ObjC.import('CoreBrightness') が使えなかったんでこんな風にしてみた
合ってんだか合ってないんだか
ObjC.import('objc');
$.NSBundle.bundleWithPath('/System/Library/PrivateFrameworks/CoreBrightness.framework').load;
$.CBBlueLightClient = $.objc_getClass('CBBlueLightClient');
var client = $.CBBlueLightClient.alloc.init;
client.setEnabled(true);
システム環境設定を開かずに優先する言語を逆順に入れ替えるJXA一行
$.NSLocale.setPreferredLanguages($.NSLocale.preferredLanguages.reverseObjectEnumerator.allObjects)
普段は英語を優先してて日本語にすることもあるものの、毎度システム環境設定を開いて入れ替えるのが面倒になった
なお10.13 High Sierraではメニューバーの時計の表示は(システム環境設定を開いて変更したときのように)連動して変わってくれないのが難点
>>134
>SonomaでNight-shift
画面の明るさの話題が出たので関連質問です。
スクリプトエディター.appの真っ白な背景色を
変更する方法などはございますでしょうか?
システム設定>アクセシビリティ>カラーを反転
だと,スクリプトエディターはダークになりますが
他のダークモード対応のアプリ・画面が白く輝き
目が疲れてしまいます。 Script Debugger 8 試したら
8でDark Mode対応
試用期限20日後は"lite"モードになって使える
> 試用期限20日後は"lite"モードになって使える
Dark Mode対応がどうなるかは不明
ターミナルで
printf 'あ' | pbcopy -pboard find
ってやると検索文字に入るのにdo shell scriptだと入らないのなんなん
自決
これで逝けました
do shell script "export LANG='ja_JP.UTF-8'; printf 'あ' | pbcopy -pboard find"
JXAで、ObjC.import('signal')すると、定数宣言されてるsys_signame(やsys_siglist)が見えそうなんだけど、$.sys_signameでクラッシュしてしまって(Segmentation fault: 11)何もできない
どうにか中の文字列を読めないか悩んでたのがとりあえず解決したので記録(元々これ使って何がしたかったって訳でもなく、import関係なくなっちゃったけど)
結論としては、dlsym()の戻り値を本来の'void*'から'void**'に変えてみるとポインタが指す先の文字列を読めた('void*'のままだとポインタそのものは見えるけど、その先はどうにもできなかった)
なお、このimportで参照されるのは/System/Library/PrivateFrameworks/JavaScriptAppleEvents.framework配下、BridgeSupportCache下signal.plistで、sys_signame(やsys_siglist)のtypeは[32*]
元となるsignal.hでの宣言は
extern __const char *__const sys_signame[NSIG]; 等、内容は https://opensource.apple.com/source/Libc/Libc-1244.50.9/gen/FreeBSD/siglist.c.auto.html のように
const char *const sys_signame[NSIG] = {
"Signal 0",
"hup", /* SIGHUP */
"int", /* SIGINT */ 等、これは/usr/lib/system/libsystem_c.dylib内にある 続き
読み出し例:
ObjC.bindFunction('dlopen', ['void*', ['char*', 'int']])
ObjC.bindFunction('dlsym', ['void**' /* 本来は 'void*' */, ['void*', 'char*']])
libref = $.dlopen('/usr/lib/libc.dylib', 2 /* RTLD_NOW */)
ptrref = $.dlsym(libref, 'sys_signame' /* または 'sys_siglist' */)
strs = []
for (i = 0; i < 32; i++) {
str = ''
for (j = 0; ; j++) {
if (ptrref[i][j] == 0) {
strs.push(str)
break
}
str += String.fromCharCode(ptrref[i][j])
}
}
strs.forEach((str, i) => console.log(i, str))
結果:
/* 0 Signal 0 */
/* 1 hup */
/* 2 int */ 等
他にも似たようなのあるけど、import用の.plistって、.hから機械的に変換、生成してるだけで、簡単に使えないのも混ざってるぽい
今更ながら前スレ https://egg.5ch.net/test/read.cgi/mac/1491018171/669 のJXA版
ObjC.import('AppKit')
ObjC.import('IOKit') // NX_KEYTYPE_SOUND_UP, etc.
ObjC.import('objc')
var fkey = $.NX_KEYTYPE_SOUND_UP
function fkeydown(fkey, down = true) {
var nil = $()
var flags = down ? 0xa00 : 0xb00
var event = $.NSEvent.otherEventWithTypeLocationModifierFlagsTimestampWindowNumberContextSubtypeData1Data2($.NSSystemDefined, $.NSZeroPoint, flags, 0, 0, nil, 8, ((fkey << 16) | flags), -1)
// $.CGEventPost($.kCGHIDEventTap, event.CGEvent)では動かない。無視される(システムログにエラー'Invalid event'が出る)か、クラッシュする
$.CGEventPost($.kCGHIDEventTap, event.performSelector($.sel_registerName('CGEvent')))
}
fkeydown(fkey)
fkeydown(fkey, false) // fkeyup
時々思い出しては解決できずにもやもやしてたけど、これでどうにか気が晴れた MBPが壊れて買い換えて大幅に環境が変わったらAppletが動かなくなってた。色々影響あるのかな? すいません独り言の愚痴でした
再保存、Script Editorで開いて保存しなければ動かないってあったな
iTermで現在のフォルダ名を記述するスクリプトを作りたいのですが
https://daeudaeu.com/finder-terminal/
を参考に下記を実行してみましたが
動作してくれません。
どなたか解決方法ご存知ありませんか?
iTermがデフォルトのTerminalでなくても実行できるようにしたいのですが。
on run {input, parameters}
tell application "Finder"
set hfsCurrentFolder to insertion location as Unicode text
set currentFolder to get POSIX path of hfsCurrentFolder
end tell
set command to "cd " & currentFolder
tell application "iTerm"
do script command
activate
end tell
end run 見たところcreate tabかcreate windowにcommand "command"あるけど、それを実行してもsession終わって閉じちゃうようだし、write text "text"の方かな
create window with default profile
tell current session of current window
write text "cd ~/Desktop"
end tell
とか
ご教示ありがとうございます。
下記を試してみましたが上手く行きませんでした。
mycommandをテキスト化できていないと思うのですが。
----------------------------------------
on run {input, parameters}
tell application "Finder"
set hfsCurrentFolder to insertion location as Unicode text
set currentFolder to get POSIX path of hfsCurrentFolder
end tell
set mycmd to "cd " & currentFolder
tell application "iTerm"
create window with default profile
tell current session of current window
write text mycmd
end tell
end run
tell と end が対になってないじゃん
それに、動作してくれません、上手くいきませんじゃなくて、エラーメッセージちゃんと書かないと
それと、いきなり組み込むんじゃなくて、あの程度なら、外から渡す変数もないようだし、スクリプトエディタで確認した方がいい
すまん、文句しか出ないw
ありがとうございます!
end tell を追記したら上手く行きました。