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

このエントリーをはてなブックマークに追加
932名称未設定:2012/01/30(月) 11:09:55.99 ID:Yn23qSyC0
>>930
本当だ。その方法だとフィルタリングできるんですね。勉強になりました。

ただ、今回はその色そのものが書類上に存在しているかわからない場合の
チェック兼修正用として使いたいんですが、そんな場合にはどうしたら良いでしょう?

具体的にはCADからイラレに変換したデータなんですが、
自分でやった物でもたまに色変換し忘れた物とかが混じっていたりするので。
よく見ると画面上でもK100の色とは異なるんですが気付かない場合もあるので。
933930:2012/01/30(月) 20:24:56.80 ID:FwSM7NKd0
>>932
こんなのどう?
set theFCs to {}
set theSCs to {}
tell application "Adobe Illustrator"
tell document 1
set pItemsCount to count of page items
repeat with i from 1 to pItemsCount
try
set theFC to fill color of page item i
set theSC to stroke color of page item i
if {theFC} is not in theFCs then set the end of theFCs to theFC
if {theSC} is not in theSCs then set the end of theSCs to theSC
end try
end repeat
make new layer
set theGB to geometric bounds
set x to item 1 of page origin
set Y to height + (item 2 of page origin)
repeat with i from 1 to count of theFCs
set theRH to height / (count of theFCs)
make new rectangle with properties {bounds:{x, Y - theRH * (i - 1), x + 10, Y - theRH * i}, fill color:item i of theFCs, stroke color:{class:no color info}}
end repeat
repeat with i from 1 to count of theSCs
set theRH to height / (count of theSCs)
make new path item at beginning with properties {entire path:{{x + 10, Y - theRH * (i - 1)}, {x + 20, Y - theRH * i}}, filled:false, stroke color:item i of theSCs}
end repeat
end tell
end tell
新しいレイヤーに使っている色の一覧が作られるので(グラデは除外)
Illustrator上で自動選択ツールの設定を許容値を0にして一覧の色を選択
934名称未設定:2012/01/31(火) 09:08:11.90 ID:jx873SW70
>>933
なるほど。それならK100じゃない黒があるかどうかもすぐわかりますね。
頭が固くて気付きませんでした。
ありがとうございます。またまた勉強になりました。
935930:2012/01/31(火) 12:29:59.70 ID:Vve0d6YR0
>>934
あ、
set theGB to geometric bounds
は無視して。
同じことするならJavascriptの方が早い気がする。
936名称未設定:2012/01/31(火) 12:50:58.18 ID:jx873SW70
>>935
度々ありがとうございます。
試しに今度JSで作ってみます。
937名称未設定:2012/01/31(火) 13:47:10.20 ID:Vve0d6YR0
需要あるかな?Safariを利用したプログレスバー
--Safariを利用したプログレスバー
global BL
set BL to 300
tell application "Finder" to set selected to selection as list
set work to "Finderで選択されたアイテム名"
my makeprogresswindow(work)
set deno to count of selected
repeat with i from 1 to deno
my progressbar(name of item i of selected & "を処理中", i, deno, work)
delay 0.2 --ここに処理を入れる
end repeat
my breakprogresswindow(work)
on makeprogresswindow(W)
tell application "Safari"
activate
make new document with properties {URL:"about:blank"}
set bounds of window 1 to {30, 30, 50 + BL, 200}
do JavaScript "document.write ('<title>" & W & "</title><body><div id=¥"bar¥" style=¥"background:#eeeeee;width:" & BL & ";height:10;margin: 0 auto;font-size:12px¥"></div></body>');" in document 1
end tell
end makeprogresswindow
on progressbar(WN, NU, DE, W)
tell application "Safari"
set PBL to round NU / DE * BL
do JavaScript "document.getElementById(¥"bar¥").innerHTML='<div style=¥"background:#999999;width:" & PBL & ";height:100%;margin: 0¥"></div>" & WN & "';" in document W
end tell
end progressbar
on breakprogresswindow(W)
tell application "Safari" to close document W
end breakprogresswindow
938937:2012/01/31(火) 14:02:09.88 ID:Vve0d6YR0
とりあえずFinderで選択されたファイル/フォルダの名前を表示するだけ。
入れ子状態とかも作ったけど改行制限オーバーだったのでギリギリまで詰め詰め
repeat回数が多くて処理に時間がかかるときに終わりの目安がなんとなく分かるのでたまに使ってます。
スクリプト起動中にリアルタイムで表示内容を変更することができるので
デバッグやスクリプトのスピードアップを検討するときなどにも使えるかも。
939名称未設定:2012/02/01(水) 12:07:36.49 ID:wzkEfhkC0
>>937
なぜにCocoa 呼ばんの?とは思ったが動かしたらめちゃ楽しい。
ちと書き方が昔風だけど、書き方なんて自由な訳で。
ありがとう、これはぜひ使ってみたい。いじりがいもありそう。
940名称未設定:2012/02/07(火) 18:18:23.58 ID:LX4ul6tR0
Drag & Dropでファイルのサイズをクリップボードにコピーするスクリプトです。複数のファイルを
同時にD&Dするといくつかのファイルのサイズが得られない事があります。
自分なりに調べてみると、Finderの"情報を見る"の詳細情報に入手先が記載されているファイルの
サイズだけが得られません。しかし、ファイルが一つか、このようなファイルだけの時は動きます。
入手先の記載のないファイルと記載のあるファイルが混ざっていると入手先の記載のあるファイルのサイズ
だけが得られません。まるっきり的外れなような気もするのですが、他に原因が見つけられません。
Leopardの時は問題なく動いていたと思うのですが、Lion(10.7.2)にしたことと関係があるのでしょうか。
アドバイスを頂けないでしょうか。

on open drop_item_list
tell application "Finder"
set the clipboard to ""
repeat with obj in drop_item_list
set file_size to size of obj
set the clipboard to (the clipboard) & file_size & return
end repeat
end tell
end open
941名称未設定:2012/02/08(水) 21:58:46.08 ID:qOBgEaho0
ようやくXcodeインストールしてスクリプトにインターフェイスつけようと思ってるんですが、
どなたかヒントをください。

よくある市販のアプリケーションにある「環境設定パネル」的なものってどうやって
作るんでしょう?
後からデータを保存する場所などを設定したいんですが、自分ならスクリプトのproperty
などを書き換えればすむんですが、どうやら他人にはハードルが高いらしく、
そういうものをセッティングして、アプリを再起動してもその値を覚えているようなものに
したいんですが、、、、、、、。ググってみましたが、どうも参考になる情報がないもので、、、、。

しかしXcode楽しいですね。Applescriptだけだと素人感満載ですが、インターフェイス
がつくと、ちょっとくらい処理が遅くても許してもらえそうな感じw
942名称未設定:2012/02/08(水) 22:05:14.24 ID:eAw9iCyS0
943名称未設定:2012/02/08(水) 22:14:02.76 ID:qOBgEaho0
>>942
あうううううううう(涙)
がんばって読んでみます。ありがとうございますorz
944名称未設定:2012/02/08(水) 22:23:01.40 ID:eAw9iCyS0
>>943
あ、ごめん
環境設定パネルそのものをつくりたいわけじゃなくて
設定の読みだし書き込みをしたいのか

一般論はこっち
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaBindings/Concepts/NSUserDefaultsController.html

AppleScriptでやるには
http://macscripter.net/viewtopic.php?id=20152
http://macscripter.net/viewtopic.php?id=31353
http://www.macosxautomation.com/applescript/features/propertylists.html
あたりが参考になるかなぁ

AppleScriptのみで作るには
アプリ起動時にplist読み込み
変更用UIを作り、変更したらpilstに保存 - その場で再読み込みしてそれにとまない挙動変更
終了
とか?

945名称未設定:2012/02/08(水) 22:24:45.67 ID:eAw9iCyS0
面倒くさい時は
実行用アプリケーションと
設定用アプリケーションを別個に作ると楽です
エラー処理とか入れなくていいから
設定変える時はこっちを使って下さいって渡せばいい
946名称未設定:2012/02/08(水) 22:48:14.06 ID:qOBgEaho0
ああだめだ。英語気持ち悪くなってきたorz

よくわかりませんが、なにやらいろいろ構成して、plistに書き込む
つーことですな。
もうちょっとサンプルスクリプトとかいろいろ眺めてから挑戦します。

それはそうと、今、10.5用のXcodeってダウンロードできるのか?
ぜんぜん見当たらないんだけど。つーかXcode4はAppleScript用の
サンプルスクリプトってごそっと抜けてるし。サンプルスクリプトは
別にダウンロードするのかな? AppleIDで登録しろだのなんだの
意外と面倒っすね。でも面白いからいいやw

>>945
ああなるほど。AppleScriptのときにはrunしたら環境設定的なこと、
ファイルをドラッグアンドドロップしたら処理みたいなことしてたけど、
それを別々のアプリにするみたいなかんじでしょうかね?
いろいろ参考になります。
947名称未設定:2012/02/08(水) 22:49:32.84 ID:qOBgEaho0
しかし
I am very new for apple scripts
には笑った。どこの国も一緒だなw
948名称未設定:2012/02/09(木) 19:36:22.62 ID:ea+OTQBO0
USBメモリを使い終わった後、USBメモリmyusbをアンマウントするappを、USBメモリの「中に」作ってみたんですが、

do shell script "diskutil unmount /Volumes/myusb"

実行すると
Volume myusb on disk2s1 failed to unmout
というエラーメッセージが出てアンマウントできませんでした。
実行したプログラムそのものが存在するドライブをアンマウントするのでエラーは当たり前なのかもしれないですが、それを回避してアンマウントするappを「USBメモリ内に」作る方法はないでしょうか?
949名称未設定:2012/02/09(木) 20:32:55.69 ID:fRKirlsS0
もうAppleScriptの範疇じゃないだろ〜
950名称未設定:2012/02/09(木) 20:55:03.35 ID:4iWTAki/0
>>948
アンマウントを実行するappをリソースに内包して、
アンマウントを実行するappを/tmp または Temporary Items にコピってからコピったappを起動するとともに素早く終了するとか
アンマウントを実行するappはアンマウントを実行する前に、起動元のUSBメモリ中のappが終了するのを待つとより完璧かな
951名称未設定:2012/02/09(木) 22:02:45.49 ID: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名称未設定:2012/02/09(木) 22:38:11.79 ID:fRKirlsS0
参ったw
953948:2012/02/09(木) 23:04:43.00 ID:v+H2Ee4R0
>>950-951
おお、ありがとうございます!
やっぱ結構アクロバチックな事が必要なんですね・・・
ちょっと勉強しながらやってみます。
954名称未設定:2012/02/09(木) 23:38:11.74 ID:4iWTAki/0
>>953
ごめんなさい >>951 はダメっぽい
バックグラウンドプロセスの実行環境として、起動元の applet.rsrc が開かれた状態で継承されてアンマウントできません。いらんのに、全くいらんのに

app コピるより shell script はただのファイルだし、考えたら shell script をコピる必要さえないじゃんなのにい、applet.rsrc が邪魔
なーんかないか考えてみよう
955名称未設定:2012/02/10(金) 02:17:34.43 ID: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名称未設定:2012/02/10(金) 02:57:09.05 ID: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名称未設定:2012/02/10(金) 07:43:37.93 ID: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名称未設定:2012/02/10(金) 07:51:05.35 ID:T5Sv7sCh0
続きです。やったこと

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

いつも思うのですが、なんでAcrobatのこのあたりの機能はJavascriptでもapplescriptでも機能提供されない
んでしょうかね。pitstop関連の特許がらみもあるのかも、とも思いますが。
959名称未設定:2012/02/10(金) 18:08:20.22 ID:w9o5mLpj0
Acrobatをサーバー的に使うにはいろいろライセンスを取得する必要があったような気がしないでもない
960名称未設定:2012/02/10(金) 22:52:36.25 ID:T5Sv7sCh0
>>959
ありますよね。なんかめんどくさいのが。でも、上の話はそれとは別の話ですよ。
961名称未設定:2012/02/10(金) 23:04:44.65 ID:T5Sv7sCh0

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

がよく分からないんです。用語辞書にも載ってないし、検索してもだめだし。
どう考えても、this_itemをそのドロップレットのパスに従ってプリフライトせよ、
ってことだと思うけど、ドロップレット自体はどこに置いておいても動くし、
そもそもプリフライトに使用する設定はどこから読み込むのかと。謎が多すぎて
手も足も出ません。なんなんですか? これ。
962名称未設定:2012/02/15(水) 23:45:22.87 ID:5kjeEa2v0
どうしても分からんorz
applescript studioのイベントハンドラで
on key down theObjectと
on key up theObject
があるかと思うけど、ウインドウにボタンを配置しておき、
シフトかオプション、コマンド、コントロールなどキーは問わないが、
キーを押した時点でボタンの表示がたとえば「印刷」から「用紙を指定して印刷」
とか代わって、そのままクリックするとそれぞれ別のスクリプトが動くようにしたい
のだけど、どうすればいいんでしょうか。on key down の例を探したけど、
見つからなかった。applescript studio のイベントハンドラ 一覧とその例とか
どっかにないかな……。
963937:2012/02/16(木) 00:49:51.43 ID: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名称未設定:2012/02/16(木) 02:16:15.36 ID:/kShfPCb0
>>962
Xcode入れてドキュメントも入れてんだろうから見れば良いじゃない
AppleScript Studio Terminology Reference
965名称未設定:2012/02/16(木) 09:29:59.37 ID: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名称未設定:2012/02/16(木) 16:01:58.34 ID: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名称未設定:2012/02/16(木) 18:59:50.03 ID:zejo708S0
>>965
>AppleScriptでは用意されていないよう
って、Cocoa-AppleScriptもかなと勝手に思って書いたが、普通に安易にNSWindowのサブクラス作れて、普通にflagsChangedが呼ばれて、ストレスあんまり無くキーの押下状態を得られた

Cocoa-AppleScript侮れないw
まあCocoa-AppleScriptするならCocoaドキュメント読まねばならず、だったらObjective-Cで書いた方がAppleScriptの文法/制約で悩まないで済むっていう...
968名称未設定:2012/02/23(木) 22:09:40.09 ID:2VZh/UL+0
lionにXcode入れたんだけど、
Xcode4.2.1 applescript全滅
Xcode3.2.6 ゴニョってインストール、コマンドラインでゴニョれば古いソースはビルドできる
Xcode3.1.4 同上で、carbonがないとしかられる。
ぜんぜんうまくいかないんだけどorz
lionで新規プロジェクトでapplescriptでアプリ作れる人いたらどうすればいいか教えてください。
969名称未設定:2012/02/23(木) 23:32:08.29 ID:QdRnNph40
>>968
普通にできているよ。フレームワークが変わっていて、言語仕様が、少し変わっているので、ダメなんじゃないの。リファレンスマニュアル読めばわかると思うよ。
970名称未設定:2012/02/24(金) 07:54:52.64 ID:qTOlXcGs0
>>968
applesriptってAppleScript Studio?
Xcode 3.2.6 で 既存のプロジェクトはビルドできるはできるけど、新規プロジェクトはテンプレートが無いから作成できないってことだよね

Xcode 3.1.4 のインストーラからテンプレートを盗んでくればいいよ
/Volumes/Xcode Tools/Packages/DeveloperTools.pkg
に入っている

pkgutil --expand /Volumes/Xcode¥ Tools/Packages/DeveloperTools.pkg ~/DeveloperTools
ってすれば、デスクトップに DeveloperTools ってフォルダができている
その中に Payload があるから Finder でダブルクリックすると解凍が始まる
Payload ってフォルダができるので、その中に Library/Xcode/Project Templates/Application/AppleScript Application がある
AppleScript Application を ~/Library/Application Support/Developer/Shared/Xcode/Project Templates/AppleScript Studio に(そういうパスが無かったら作って)入れる。最後の AppleScript Studio は好きな名前でいいよ
Xcode 3.2.6 を起動して新規プロジェクト選ぶと、出ているはずだよ。
971名称未設定:2012/02/24(金) 08:33:19.18 ID:1EsaeqC20
>>969-970
ありがとー。昨日いろいろいじっていて
・3.1.4でプロジェクトを作る。
・そのプロジェクトをゴニョった3.2.6で開いて編集
でいまのところうまくいってます、と報告しようと思ったら、それってつまり
>>970と同じことですよね。ああ、これでlionでapplescript studioがいじれます。
感謝感謝です。
972名称未設定:2012/02/24(金) 08:55:52.68 ID:qTOlXcGs0
>>971
ああ、なる。だったら、
/Developer/Library/Xcode/Project Templates/Application/AppleScript Application

$HOME/Library/Application Support/Developer/Shared/Xcode/Project Templates/AppleScript Studio
にコピれば、3.1.4 起動する必要無いくらかな。お好きに :)
973名称未設定:2012/02/24(金) 08:56:46.33 ID:qTOlXcGs0
あ、
/Developer
は、3.1.4 の Developer ね
974名称未設定:2012/02/24(金) 15:07:49.29 ID:CJGFbzwl0
ついでに新規ファイル追加用のテンプレートはこの辺にあるので、ついでに移植しておくとよいね
/Developer/Library/Xcode/File Templates/AppleScript

あとInterface BuilderのAppleScript Inspectorタブが消えているので、Terminalで以下を実行して復帰させる
defaults write com.apple.InterfaceBuilder3 IBEnableAppleScriptStudioSupport -bool yes

これで概ね3.1.4以前と同じ感覚で使えるかと
975名称未設定:2012/02/25(土) 16:55:35.61 ID:RuiGBx4u0
>>974
それら一式まとめて、アプ希望
976名称未設定:2012/02/25(土) 17:16:30.37 ID:hAfl5ygD0
自分で作れ
977名称未設定:2012/02/26(日) 17:00:12.73 ID:cEyk/5Xo0
プロジェクトテンプレとInterface Builderのセットになったやつは3.2.2ぐらいの時にあったよ
ググれば出んでしょ
978名称未設定:2012/02/26(日) 18:06:28.09 ID:SX1S2Szy0
あーもう誰か教えて。
applescript studioで例えばデスクトップからアプリのウインドウにドラッグ&ドロップすると
そのファイルなりフォルダなりの処理を始めるようにするにはどうすればいいんだ?
たとえばウインドウのあるエリアにファイルをドラッグ&ドロップすると所定のフォルダに
コピーしてファイル名を変更するみたいなことがしたいんだけど、、、、、、、

・ハンドラーは on drop theObject drag info dragInfoを使って
・types of pasteboard of dragInfo で処理するに値するかどうか判定して

、、、、とか書いてたらちょっと分かってきたw スマンw
(とかいいつつ、また来ると思うw)
979名称未設定:2012/02/26(日) 18:54:16.65 ID:0yqTcLgI0
せっかく書いた文でも捨てる勇気
980名称未設定:2012/02/26(日) 20:16:21.41 ID:SX1S2Szy0
だ、だめなのか、、、、?
間違ってるのか、、、、、orz
981名称未設定
意訳:ここはおまえの日記帳じゃない