AppleScript アップルスクリプト 質問、発表 4at MAC
AppleScript アップルスクリプト 質問、発表 4 - 暇つぶし2ch947:名称未設定
12/02/08 22:49:32.84 qOBgEaho0
しかし
I am very new for apple scripts
には笑った。どこの国も一緒だなw

948:名称未設定
12/02/09 19:36:22.62 ea+OTQBO0
USBメモリを使い終わった後、USBメモリmyusbをアンマウントするappを、USBメモリの「中に」作ってみたんですが、

do shell script "diskutil unmount /Volumes/myusb"

実行すると
Volume myusb on disk2s1 failed to unmout
というエラーメッセージが出てアンマウントできませんでした。
実行したプログラムそのものが存在するドライブをアンマウントするのでエラーは当たり前なのかもしれないですが、それを回避してアンマウントするappを「USBメモリ内に」作る方法はないでしょうか?

949:名称未設定
12/02/09 20:32:55.69 fRKirlsS0
もうAppleScriptの範疇じゃないだろ~

950:名称未設定
12/02/09 20:55:03.35 4iWTAki/0
>>948
アンマウントを実行するappをリソースに内包して、
アンマウントを実行するappを/tmp または Temporary Items にコピってからコピったappを起動するとともに素早く終了するとか
アンマウントを実行するappはアンマウントを実行する前に、起動元のUSBメモリ中のappが終了するのを待つとより完璧かな

951:名称未設定
12/02/09 22:02:45.49 4iWTAki/0
>>950,948
shell script をコピって実行(後自爆)バージョン

tell application "System Events" to set myPID to the unix id of process the (name of the current application)
do shell script "echo 'while kill -0 " & myPID & " 2> /dev/null; do sleep 1; done; diskutil unmount /Volumes/myusb; rm -f /tmp/realUnmountUSBVol.sh' > /tmp/realUnmountUSBVol.sh"
do shell script "sh /tmp/realUnmountUSBVol.sh > /dev/null 2>&1 &"

do shell script は & だけじゃバックグラウンドプロセスを起動してすぐ帰るってしてくれなくて、> /dev/null 2>&1 を付ければOK。ってことでこのスレらしくない?w >>949

952:名称未設定
12/02/09 22:38:11.79 fRKirlsS0
参ったw

953:948
12/02/09 23:04:43.00 v+H2Ee4R0
>>950-951
おお、ありがとうございます!
やっぱ結構アクロバチックな事が必要なんですね・・・
ちょっと勉強しながらやってみます。

954:名称未設定
12/02/09 23:38:11.74 4iWTAki/0
>>953
ごめんなさい >>951 はダメっぽい
バックグラウンドプロセスの実行環境として、起動元の applet.rsrc が開かれた状態で継承されてアンマウントできません。いらんのに、全くいらんのに

app コピるより shell script はただのファイルだし、考えたら shell script をコピる必要さえないじゃんなのにい、applet.rsrc が邪魔
なーんかないか考えてみよう

955:名称未設定
12/02/10 02:17:34.43 XdmK1XLf0
>>954,953
csh だと親プロセスが開いているファイルなんて継承してないてことで(bash で開いているファイルを継承させないオプションがあるのかどうかわからない)

tell application "System Events" to set myPID to the unix id of process the (name of the current application)
set cshScript to "while( 1 )
/bin/kill -0 " & myPID & " >& /dev/null
if( $? ) break
sleep 1
end
diskutil unmount /Volumes/myusb"

set savedDelimiters to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set cshScript to text items of cshScript
set AppleScript's text item delimiters to ASCII character 10
set cshScript to cshScript as string
set AppleScript's text item delimiters to savedDelimiters

do shell script "echo '" & cshScript & "' | /bin/csh -s > /dev/null 2>&1 &"


csh よくわからんなあ
スクリプトを1行にできないのかなあ/どうもできなさそうってことで、なんか長くなった。AppleScript's text item delimiters は AppleScript の改行(return/CR) を shell の改行(LF) に変換してるのです


956:名称未設定
12/02/10 02:57:09.05 XdmK1XLf0
あ、csh 間にかますだけでいいんじゃねっ... てことで

tell application "System Events" to set myPID to the unix id of process the (name of the current application)
do shell script "/bin/csh -c " & quote & "/bin/bash -c 'while kill -0 " & myPID & " 2> /dev/null; do sleep 1; done; diskutil unmount /Volumes/Untitled'" & quote & " > /dev/null 2>&1 &"

寝よ...w

957:名称未設定
12/02/10 07:43:37.93 T5Sv7sCh0
ちょっと教えてください。AcrobatProfessionalについているPDFをチェックする
プリフライト機能、というのがあるんですが、これがメニューからドロップレット
が作れます。中を開くとAppleScriptなので、これ幸いと自分のスクリプトに
組み込めないかと苦闘したのですが、実現できません。
on process_item(this_item)ハンドラを他のスクリプトに内蔵することってできない
でしょうか。

on open these_items
try
process_item(these_items)
end try
end open

-- process the file
on process_item(this_item)
try
tell application "Finder"
set myPath to path to me
end tell
with timeout of 1 second
tell application "Adobe Acrobat Professional"
activate
delay 1
≪event PRFLPRFL≫ this_item given ≪class PATH≫:myPath
end tell
end timeout
end try
end process_item

958:名称未設定
12/02/10 07:51:05.35 T5Sv7sCh0
続きです。やったこと

・そのままon process_item(this_item)ハンドラをスクリプトに埋め込む→AEHandlerが云々で×
・逆にドロップレットに自分のスクリプトを埋め込んで再保存→該当部分で同様のエラー
・ドロップレットになっているフォルダの中身を見てみる→重要な情報などはplistの中などにも発見できず。
・海外のサイトを見る
→みんな同じこと考えてて「Acrobatは糞」と質問者が罵るか「そのまま使えアホ」と煽られるかのどちらか。

いつも思うのですが、なんでAcrobatのこのあたりの機能はJavascriptでもapplescriptでも機能提供されない
んでしょうかね。pitstop関連の特許がらみもあるのかも、とも思いますが。

959:名称未設定
12/02/10 18:08:20.22 w9o5mLpj0
Acrobatをサーバー的に使うにはいろいろライセンスを取得する必要があったような気がしないでもない

960:名称未設定
12/02/10 22:52:36.25 T5Sv7sCh0
>>959
ありますよね。なんかめんどくさいのが。でも、上の話はそれとは別の話ですよ。

961:名称未設定
12/02/10 23:04:44.65 T5Sv7sCh0

>≪event PRFLPRFL≫ this_item given ≪class PATH≫:myPath

がよく分からないんです。用語辞書にも載ってないし、検索してもだめだし。
どう考えても、this_itemをそのドロップレットのパスに従ってプリフライトせよ、
ってことだと思うけど、ドロップレット自体はどこに置いておいても動くし、
そもそもプリフライトに使用する設定はどこから読み込むのかと。謎が多すぎて
手も足も出ません。なんなんですか? これ。

962:名称未設定
12/02/15 23:45:22.87 5kjeEa2v0
どうしても分からんorz
applescript studioのイベントハンドラで
on key down theObjectと
on key up theObject
があるかと思うけど、ウインドウにボタンを配置しておき、
シフトかオプション、コマンド、コントロールなどキーは問わないが、
キーを押した時点でボタンの表示がたとえば「印刷」から「用紙を指定して印刷」
とか代わって、そのままクリックするとそれぞれ別のスクリプトが動くようにしたい
のだけど、どうすればいいんでしょうか。on key down の例を探したけど、
見つからなかった。applescript studio のイベントハンドラ 一覧とその例とか
どっかにないかな……。

963:937
12/02/16 00:49:51.43 Rnhe+Zuj0
>>948
GUIスクリプティングでキーボードショートカット使うとか

tell application "Finder"
activate
set theVolume to disk of (path to me)
select theVolume
tell application "System Events"
key code (14) using command down
end tell
end tell

964:名称未設定
12/02/16 02:16:15.36 /kShfPCb0
>>962
Xcode入れてドキュメントも入れてんだろうから見れば良いじゃない
AppleScript Studio Terminology Reference

965:名称未設定
12/02/16 09:29:59.37 zejo708S0
>>962
書いてみた

property NSAlphaShiftKeyMask : {shift:65536}
property NSShiftKeyMask : {shift:131072}
property NSControlKeyMask : {shift:262144}
property NSAlternateKeyMask : {shift:524288}
property NSCommandKeyMask : {shift:1048576}
property NSNumericPadKeyMask : {shift:2097152}
property NSHelpKeyMask : {shift:4194304}
property NSFunctionKeyMask : {shift:8388608}

on IsDown(theKeys, theKeyMask)
return ((theKeys / (shift of theKeyMask)) mod 2) as integer is 1
end IsDown

on idle
set theModifiersKey to call method "modifierFlags" of class "NSEvent"
if not IsDown(theModifiersKey, NSAlternateKeyMask) then
set theButtonTitle to "Print"
else
set theButtonTitle to "Print..."
end if
set title of button "Print" of window "main" to theButtonTitle
return 0.5
end idle


モディファイアキーの押下状態の変更をダイレクトに伝えてくれるのはAppleScriptでは用意されていないようなので、idleで定期的にチェックという無駄と反応が鈍い
ボタンのアクションの変更を変えるのはどうすんだろうね。とりあえずボタンのタイトルで振り分けるとか

966:名称未設定
12/02/16 16:01:58.34 3tECEIY10
> applescript studioのイベントハンドラで
> on key down theObjectと
> on key up theObject

こんなのあったっけ?
on keyboard down theObject event theEvent とon keyboard up theObject event theEvent ならわかる

ただこれもアプリ全体のイベントには設定できないし、
修飾キー単体では反応しないっぽいので、>>962の目的には合わないが

967:名称未設定
12/02/16 18:59:50.03 zejo708S0
>>965
>AppleScriptでは用意されていないよう
って、Cocoa-AppleScriptもかなと勝手に思って書いたが、普通に安易にNSWindowのサブクラス作れて、普通にflagsChangedが呼ばれて、ストレスあんまり無くキーの押下状態を得られた

Cocoa-AppleScript侮れないw
まあCocoa-AppleScriptするならCocoaドキュメント読まねばならず、だったらObjective-Cで書いた方がAppleScriptの文法/制約で悩まないで済むっていう...


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch