AppleScript アップルスクリプト 質問、発表 3at MAC
AppleScript アップルスクリプト 質問、発表 3 - 暇つぶし2ch1:名称未設定
08/10/03 18:41:42 Abs+u1Ko0
質問、発表どっちでもスレ。

【注意】
安直なスクリプト作成依頼、丸投げはやっちゃダメ! わからない点、エラーが解決できない点について、スクリプト片を添えて質問しよう。

・前スレ、関連旧スレ
AppleScript アップルスクリプト 質問、発表 2
スレリンク(mac板)
AppleScript アップルスクリプト 質問、発表
スレリンク(mac板)
【標準装備】スクリプトエディタ
スレリンク(mac板)
おもろい、めずらしいアップルスクリプト発表会 6
スレリンク(mac板)

・参考リンク
AppleScript ヘルプ
help:///Library/Documentation/Help/AppleScript.help
発表まとめ
URLリンク(members.at.infoseek.co.jp)
MacWiki - AppleScript
URLリンク(macwiki.sourceforge.jp)
AppleScript PARK
URLリンク(www.tonbi.jp)
TN2065: do shell script
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)

2:名称未設定
08/10/04 00:31:28 t3kkMEtL0
こういうの作ってください!は無しで

3:名称未設定
08/10/05 17:59:06 jL0aulsu0
前スレ落ちた

4:名称未設定
08/10/05 18:02:53 N1ohX2350
こっちを立てるのが早すぎたな。

5:名称未設定
08/10/06 03:06:39 L5eEHjv20
980超えたら落ちるのは仕様です

6:名称未設定
08/10/07 02:14:48 lCUqUn5J0
2chのレスを自動更新してgrowlというappで表示していくAppleScript
を実況用にgrowlスレ
スレリンク(mac板:298番)
で作っていただいたのですが、PowerPC用のようで
自分の環境ではレスの取得などはうまくいっているようなのですが
その表示がうまくいかないようです。
テスト用のscriptを作っていただき試したところ、AppleScriptからgrowlへの動作は問題なく、growl自身の問題でもないようです。
レスを表示させる動作に問題があるようです。
環境はGrowl 1.1.4 OSX10.4.11/Intelです。

Applescriptはこちらのものです。
URLリンク(memogaki.soudesune.net)

これをIntelMacでも使いたいのですがどのようにしたら良いのでしょうか。
このような動作をするものはIntelでは無理なのでしょうか。
作った方もなぜ動作しないか分からないそうなので
IntelでのAppleScriptについて詳しい方いらっしゃいましたら教えてください。
よろしくお願いいたします。

7:名称未設定
08/10/07 03:42:29 Y47w/it70
自分の環境では動いている。
このスレを選択したら通知もGrowlで表示された。
なぜかPowerPCバイナリだけど。

でLeopard+Intelな環境で色々試して分かったこと。

・配布されたものをそのまま起動→動作、PowerPCバイナリ
・動作終了後に配布アプリのEdit→Edit Scriptでスクリプトファイルを開いて
・アプリケーションとして保存したもの→URL選択画面以降動作せず、PowerPCバイナリ
 ・アプリケーションバンドルとして保存したもの→URL選択画面以降動作せず、Universalバイナリ
・Automatorを使ってアプリケーションとして保存したもの→URL選択画面以降動作せず、Intelバイナリ
・そのまま実行→URL選択画面以降動作せず
・debugModeをtrueにして実行→動作
・debugModeをtrueにしてアプリケーションバンドルとして保存したもの→動作、Universalバイナリ
ということは配布されているバイナリからスクリプトを取ってきてdebugModeをtrueに変更して独自に作り直せばいい。

作者さんが転載、改造、再配布を許可しているのでそれに甘えて完成品はこちらから。
URLリンク(dl.getdropbox.com)
propertyのheaderFileNameをtest2にして本家とも共存できるようにしました(少なくとも自分の環境では)。

本家との違い(というか一部不具合)
・メニューUIが日本語
・実行プロセス名が2chResView.appではなく2chResView
・Universalバイナリ
・メニューからもDockからも終了できずActivitiy Monitorから強制終了する必要がある

8:名称未設定
08/10/07 03:46:09 Y47w/it70
前半の2つ目より後の箇条書きは2つ目の下にぶら下げたつもりだったのだが投稿してみたらそうなってなかった orz

9:名称未設定
08/10/07 03:55:53 Y47w/it70
追記になりますが結局メニューもDockも使い物にならないなら(スクリプトの編集はアプリケーションバンドルをこじ開ければ出来ます)そんなものいらないという場合は
バンドルの中のContents/Info.plistを以下のファイルで置き換えてください。
URLリンク(dl.getdropbox.com)
ただしその場合はメニューもDockのアイコンも出なくなるので起動後別のソフトを前面に出してしまうと2chResViewに戻る方法が無くなって終了する以外の選択肢が無くなります。
挙動を元に戻したい場合はバンドル内のInfo.plistをSmultronのようなテキストエディタで開いて
<key>NSUIElement</key>
<string>1</string>
の2行を削除してください。

10:名称未設定
08/10/07 04:32:52 lCUqUn5J0
>>7-9
検証、改造ありがとうございます
今試してみたのですが、Growlの最初の通知はうまくいくのですが
実況刷れなどでの自動更新されたのレスはやはりGrowlでの表示はできないようです。
イベントログではレスの内容を取得できているようなのですが・・・
取得したレスのGrowlでの表示がうまくいかないようです。

レス取得もそちらの環境では可能でしょうか?

11:名称未設定
08/10/07 04:47:48 lCUqUn5J0
追記
動作としてはurl入力後
~レススキップしました
という通知がきた後、何の通知もなくなってしまいます。
イベントログではレスの取得はされているのですが、それがGrowlに通知されない状態です。
板のアドレスを入力した後もレス表示するまではうまくいっている様子です。(スレを選んだりは問題ない。)

12:名称未設定
08/10/07 07:25:52 Y47w/it70
>>11
自分の環境では~レスをスキップしましたという表示の後そのより後のレスの通知が表示されます。
さっきまでもう少し実況板に適した仕様にしようと色々いじっていたのですが
やはり他人の書いたスクリプトを編集するというのは難しいので現状では中途半端な状況ですが一応上げておきます(本家や先ほどのものとは共存可能です)。
URLリンク(dl.getdropbox.com)

オリジナルからの変更点
・headerFileNameをtest3に設定して本家と共存可能にした
・Universalバイナリとして動作(オリジナルはPowerPCバイナリ)
・実況板用にチェック間隔(checkInterval)を5秒に設定した
・同じくレス表示間隔(showResInterval)を1秒に設定した
・maxShowResNumbyReadOnceを1001に設定し全てのレスが通知されるようにした
・本家との区別をつけるためにプロセス名を2chResView Liveに変更した

現状での問題点
・オリジナルと違ってメニューやDockからの終了が出来ないのでActivity Monitorから強制終了する必要がある
・解決策とはとうてい言えないがInfo.plistでNSUIElementを1に設定し実質役立たずなメニューとDockアイコンを無効にした(スクリプトの編集はバンドルを開くことにより可能です。)
・そのため起動後別アプリを前面に出してしまうと終了以外出来なくなる仕様
・基本的には最初に更新確認元のURLを指定したらその後は放置を推奨します
・新着レスが無いとまた最初からレスを表示するが2周目以降において
n周目のレス番号表示=本来のレス番号+1周目での板のレス最大値+2周目でのレス最大値+.............+(n-1)周目でのレス最大値
のような状況になってしまっていたのでレス番号をGrowlに通知しないという荒技(というかその場しのぎ)により対応。
(本当はここは本来のレス番号が表示されるようにしたかったのですが自分の技量不足で出来ませんでした。また後日時間があるときにトライします。)
(一応オリジナルのレス番号も表示されるほうもコメントアウトして残してあります。)


13:名称未設定
08/10/07 08:11:16 lCUqUn5J0
>>12
そうでしたか。。新版でもやはり変わらずレスは表示されない・・・
うーん、何がいけないんだろう。

>・解決策とはとうてい言えないがInfo.plistでNSUIElementを1に設定し実質役立たずなメニューとDockアイコンを無効にした
拡張子を.scptに変更してscriptediterから実行し、editerはDockに収納というのがスマートかなーと思ってました。それなら終了できるので。


いろいろと朝早くに面倒を見ていただきありがとうございます。

14:名称未設定
08/10/07 19:12:05 v8Kp0RHoP
>>13
Growlの通知のスタイルをBubblesにしても駄目ですか?
CSS形式だと連続表示した時に駄目なときがあるのでそれの可能性もちょっとあるかも

15:名称未設定
08/10/07 20:10:43 lCUqUn5J0
>>14
Growlはいろいろなパターンで(通知スタイル、出てくる場所)試してみましたがやはりでてきません。
新規アカウント作って試しましたがやはりダメでした。


実行中アクティビティモニタを見ているとcurlというプロセスが着いたり消えたりします。
2chResview Liveを最前面にしているとカーソルが白黒の風車が着いたり消えたりします。

CPU使用率もメモリも十分に余裕があります。
ちなみに2GHzCore2Duo メモリ1GBです。

なにか自分の環境が悪いのでしょうか??

16:名称未設定
08/10/07 21:09:31 v8Kp0RHoP
>>15
もう一個思い当たるのがas Unicode textをGrowlHelperAppで
通知するテキストに対して行うってのがあります。
昔DragThingなどでうまく動かない時にas Unicode textを適当に付けたら
動くようになった記憶があります。
URLリンク(memogaki.soudesune.net)
にそうしたのを置いておきました。

>>7さんの報告によると自分と同じ10.5でも動かないようなので違う可能性は高いです。
でもAppleScriptにPPCとintelの違いなんてあるんでしょうか?

17:名称未設定
08/10/07 21:23:10 kwz1vCP70
>>15
URLリンク(mtlab.ecn.fpu.ac.jp)

とりあえず2chでログとか関係なしに
AppleScriptからGrowlに通知を送るだけのスクリプトでも作ってみたら?

18:名称未設定
08/10/07 21:48:43 lCUqUn5J0
>>16
作者の方でしたか。ありがとうございます。
試してみたのですが、やはり表示されませんでした。。

>>17
作者様に作っていただいた
URLリンク(memogaki.soudesune.net)
URLリンク(memogaki.soudesune.net)
でAppleScriptからGrowlに通知を送るテストはしたのですが、それはおkでした。>>6にkwsk書かず申し訳ない。助言ありがとうございます。

19:名称未設定
08/10/07 22:00:13 kwz1vCP70
>>18
じゃぁ今度はログとるところを分解してテストしてみりゃいんじゃない
なんでも人任せにすんな

20:名称未設定
08/10/07 22:06:35 lCUqUn5J0
>>19
かしこまりました。
お邪魔なようなのでもう書き込みはしません。
いろいろとしていただいたお二人ありがとうございました。

21:名称未設定
08/10/07 22:29:25 KlERJHmd0
「なんでも人任せにすんな」への返答が「お邪魔なようなのでもう~」

こういう奴見るとほんと腹立つわ

22:名称未設定
08/10/07 22:36:57 kwz1vCP70
俺としてはsmalltestを行えってまじめにアドバイスしてんだけどな

23:12
08/10/07 22:52:07 Y47w/it70
いまさらだけど自分としてはそう不愉快に感じなかったな。
寧ろイベントログとかもう少し詳しく書いてくれれば力になれたかもしれないのにという感じ。

というか中途半端に動作するものをアップした自分が悪い?

24:名称未設定
08/10/07 22:55:18 yqsxH7SN0
前スレラストのお客さんもこの手合いだったからな。
流石にちょっと、という感はある。

25:名称未設定
08/10/07 23:10:09 AJUayXJ10
またしばらく寂れそうだw

26:名称未設定
08/10/09 14:41:14 EnaYP1mJ0
Script Debugger4で自作テンプレをクリッピングメニューから呼び出したいのですが,
登録方法がよくわからず困っています.もしわかる方いたら教えていただけませんか.

27:名称未設定
08/10/09 18:18:36 EnaYP1mJ0
>>26 の件ですが,Clippingsフォルダに入れるだけでした.おさわがせしました.

これだけじゃなんなので,Script Debugger4の話題を一つ.

うちのintel Leopard環境では特定のスクリプトでApple Event logを表示させたり,
sourceボタンを押すと強制終了したり操作不能になる不具合が出てます.もしこれから
買おうと思っている人は,動作確認をしっかりやった方がいいかもしれません.

28:名称未設定
08/10/11 00:58:27 YGVRabN70
Security Update 2008-007当てると、Script Editorで辞書開いた時にできる一時sdefファイルの作成場所が
/tmpから/var/tmp/folders.uid/TemporaryItemsに変わる。
なもんでログインし直すとゴミ箱にRecovered filesが出来ちゃう。ちょっと邪魔臭い。

29:名称未設定
08/10/12 23:12:57 UYsjvl6V0
前スレのSnapz Pro Xの小物に続き,今回もまた小物発表します.
YouTube動画を高解像度版で表示させるアプレット.フリーウェア.

YouTube HRV with Firefox β
www.gcug.net/test/ythrvfb.zip
YouTube HRV with Safari β
www.gcug.net/test/ythrvsb.zip

今開いているYouTube動画の高解像度版を新しいウインドウで開いて表示させます.
ただし,全ての動画が高解像度版で観られるわけではありません.特に公開時期が古い
動画は高解像度では観られないようです.予めご了承下さい.

比較画像
www.gcug.net/test/ythrv.png

30:名称未設定
08/10/12 23:39:29 Rk15pzzC0
Firefoxスレで見て、Safariスレでも見て、ここでも見るのか orz

31:名称未設定
08/10/12 23:42:57 UYsjvl6V0
ごめんね.

32:名称未設定
08/10/13 01:17:47 4W8DvxVS0
>>29
踏む気にもならんが、&fmt=18足してるだけじゃないんか?
せめて開いてるページの高解像のソースをmp4で別名保存するってのとか位したら?
って、書くなよ。それくらいもうみんな書いてるから。

33:名称未設定
08/10/13 01:26:14 JL5lkbOm0
>>29
はい,ただ足してるだけです.別名保存もしてません.皆さんが書いてる通りです.
予想どおり,ほとんど踏まれてません.でも,なんだかわかんないけど,楽しい.

34:名称未設定
08/10/13 01:26:57 JL5lkbOm0
失礼しました,>>29ではなく>>32へのレスです.

35:名称未設定
08/10/13 01:32:01 8CRBv2qs0
>>29
10.4.11/Safari3.1.2で動かなかったです

36:名称未設定
08/10/13 01:48:58 JL5lkbOm0
>>35
10.4.11では動かなかったですか.すみませんです.
10.5の環境しかもってないので,原因突き止めるのは時間かかりそうです.
いずれにしてもこの話題長くひっぱるのはあれなので,なんかわかったら
サイトの方に書いておきます.どうもでした.

37:名称未設定
08/10/13 02:31:47 YwtPc7by0
>>29
http://抜きなのは何か意図はあるのでしょうか?

38:名称未設定
08/10/13 02:36:00 dBXY5jcQ0
実は、以前から同じ用途のスクリプトつくって自分で使ってた。
単純にurlに&fmt=18付けるだけだから、俺みたいなスクリプト初心者でも出来るよ。

39:名称未設定
08/10/13 03:45:44 4W8DvxVS0
>>29 楽しむなバカ!!!
しね、しんでお詫びしろ真面目に勉強してAS書いてるやつに。
ASからsafari開かんでもシェルスクでcurlってのもあるぞ。
べ、べつにお前に教えてるわけじゃないんだからな!!勘違いするなよな!!


40:名称未設定
08/10/13 09:55:40 8JYSbZ9o0
俺ならbookmarkletでやるかな。

41:名称未設定
08/10/13 09:55:58 YwtPc7by0
&fmt=18足すだけで編集不可で「フリーウエア」とかわざわざ謳ってなんかあれな人っぽいな。
過去スレで質問しまくって「できましたー」って編集不可で公開した人に似ててなんか変。

編集不可のスクリプトの発表はスレ違いとテンプレに追加してほしい。

42:名称未設定
08/10/13 10:07:55 S2bmhJwE0
俺の所も動かないから中を見ようとしたら編集不可だって。
馬鹿にしてるのか。

43:名称未設定
08/10/13 10:36:11 dU9oInNnP
よほどの遅い回線でなければ、わざわざ&fmt=18付けて再読み込みさせなくても
動画の再生画質
URLリンク(jp.youtube.com)
で設定しておけば高画質で再生されますよ。

44:名称未設定
08/10/13 12:32:22 P4LigQDi0
なんでこの程度のことでわざわざ煽り入れるんだか

45:名称未設定
08/10/13 12:32:45 WM63qh/30
>>35
サイトよりスレの方が早いので,あらためてこちらに.
Safariで動かなかったとのことですので,スクリプト書いておきます.
たぶん,これなら動作すると思います.

tell application "Safari"
activate
set theURL to get URL of document 1
open location theURL & "&fmt=6&fmt=18"
end tell

29のアプレットは,これにいくつかのエラー処理を加えたんですが,
それがきっと動作的にまずかったんだと思います.

46:名称未設定
08/10/13 12:41:12 WM63qh/30
誤解されそうなので訂正します.エラー対応処理です.

47:名称未設定
08/10/13 15:38:07 vHCZlgpZ0
set URL of tab -1 of window 1 to URL of tab -1 of window 1 & "&fmt=18"
なんてやっておくと裏のタブで開いておいたのを裏のままfmt=18で再読み込み。
全タブを取得しといてcurrent tabだけ除外すれば複数の裏タブもいっぺんに。

48:名称未設定
08/10/23 21:18:44 JnvvdQR80
Growlがとかいってた人
URLリンク(memogaki.soudesune.net)
こんなんでてたぞ

49:名称未設定
08/10/23 21:55:34 E3n5TJ5f0
10.5 Intelだとうまく動かない、元スクリプト作者は環境ないから何ともしがたい、
って話だったと思ったけど
それが解決してなければどうしようもないんじゃないかい

50:12
08/10/23 22:00:25 lUXKK1hP0
>>7とか見ると中身のスクリプトを取り出してもう一度.app化すればUniversalで動くらしいよ。
>>7のリンク先はもうないっぽいが。

51:名称未設定
08/10/23 22:01:06 lUXKK1hP0
ってよく考えたら>>7作ったのは自分だったんだ。
かなり前のことだったので忘れてたぜ。

52:名称未設定
08/10/24 10:04:11 gyloSjgq0
www.gcug.net/test/ascal.png
do shell script "cal"でdisplay dialogの表示をそろえたい場合,どうしたらいいでしょうか?

53:名称未設定
08/10/24 11:36:24 Jf97pub80
>>52
ヒラギノ?の標準半角スペースは333emだから500emのと置き換える。
でも、使えない環境もおおい。例えばこことかね。
これは力技てか、手抜き。本当はHTMLとかで真面目に書いた方がよいね。

set hoge to do shell script "cal"
set myStrings to hoge as Unicode text
set findStr to " "
set replaceStr to string id 8199

set myStrings to replaceString(myStrings, findStr, replaceStr) of me
display dialog myStrings
return
on replaceString(myStrings, findStr, replaceStr)
set tmp to AppleScript's text item delimiters
set AppleScript's text item delimiters to findStr
set theList to every text item of myStrings
set AppleScript's text item delimiters to replaceStr
set myStrings to theList as string
set AppleScript's text item delimiters to tmp
return myStrings
end replaceString

54:名称未設定
08/10/24 12:13:07 YLgb7goj0
初めてまともにAppleScript使ってるんですが、つまづいてます。

Safariで複数のウィンドウ、複数のタブを開いている時、
アクティブなウィンドウを切り替えたいんですが、何か方法ないでしょうか?

set current tab in targetWindow to targetTab

でタブは切り替わってるんですが、ウィンドウが背面にある場合は背面のまま切り替わってます。
System Eventで clickしても同様です。10.5.5です。

要するに目的のタブとウィンドウをアクティブにしたいんですが、どうやれば良いでしょう?
ヒント下さい

55:名称未設定
08/10/24 12:45:14 Jf97pub80
>>54
set index of targetWindow to 1

昼食後は眠い。

56:名称未設定
08/10/24 13:29:40 YLgb7goj0
>>55
thx!

ウィンドウは切り替わった...けど非アクティブのまま切り替わってる?
全面にあるウィンドウが非アクティブ、背面にあるウィンドウがアクティブの色

こーゆーもんですか?


57:名称未設定
08/10/24 14:58:36 Jf97pub80
>>56
そのままじゃんか。答え自分で書いてるし。
次の行に activate とでも打ってみるんだ。
ひまだー(嘘だ!!!)仕事する気ならねー

58:名称未設定
08/10/24 15:18:19 YLgb7goj0
>>57
答え...? よくわからんです。
Safari自体はactiveなんですが、

SafariのウィンドウをA(前面)B(背面)として、
通常はAがアクティブ、Bが非アクティブのウィンドウ色で並び順もその通りなんですが、

set index of B to 1

とすると、Bが非アクティブ、Aがアクティブ(つまり変更前のまんま)
の色のまま、Bが前面にくる(並び順だけ変わる)んです。

次の行にactivate書いてみましたが、これはアプリを前面に出すんですよね?
何か勘違いしてるのかな(´・ω・`)

やっと文法がわかってきたけど、これ難しいなぁ

59:名称未設定
08/10/24 15:59:35 ykVyKfvr0
初めて触るのにそうポンポン思い通りのスクリプト書かれちゃたまらんw

60:名称未設定
08/10/24 20:17:48 YLgb7goj0
あぁダメだ

tell application "Safari"
 --activate
 set (index of window 2) to 1
end tell

こいつの動作が納得いかない
とりあえず今はこういうモンだと思うことにしよう

61:名称未設定
08/10/24 20:46:43 MjFKpi3E0
たぶんそれバグだ
AppleScriptではよくあること

62:名称未設定
08/10/24 21:05:51 D8NGnyy50
ほんとだ。うしろウインドウをcommand+optionクリックしたときと
同じ動作になっちゃうんだ。

63:55
08/10/24 21:22:57 Kw8HwHQ60
Script Editor でも一緒だな。アプリケーションレベルのカレントにならない。
2つしか見てないけど、仕様かな?かな?
index 忘れて素直に System Events で書いた方がよいね。

64:名称未設定
08/10/24 21:31:39 D8NGnyy50
Finderは期待通りの動作をするようだ

65:名称未設定
08/10/24 22:21:32 frwVBtf10
AppleScriptじゃなくてCocoa自体のバグですな。
だからCocoaアプリは全滅
tell application "Finder"
select window 2
end tell
で動くのが正しい実装

tell application "System Events"
tell process "Safari"
set value of attribute "AXMain" of window 2 to true
end tell
end tell
とすれば動くが、こんなの判る人いない。

66:名称未設定
08/10/24 22:47:16 PrT8+w6N0
おお、そういう指定ができるのか。知らなかった。

ちなみにAppleScript的ルールからいうとバグではあるが、Cocoaな
世界ではActive Windowという単一の概念は無くて、
MainWindowとKeyWindow, Inactive Windowってのがある。

ちなみに、NSWindowクラスではKeyになるのを拒否したり出来るみたい
なのでセットしたプロパティが反映されているかその後チェックが必要。

Classic OSユライのASと考え方が違うのはある程度しゃーない。

67:名称未設定
08/10/24 23:10:52 Kod93loi0
>>53
display dialogでHTML(CSS?)のフォント指定ができるのかよくわかりませんが,
とりあえずは自分で使うだけなので,デリミタ置換で十分かなと思います.
ありがとうございました.

68:名称未設定
08/10/24 23:20:07 frwVBtf10
>>66
AppleEventの命令を内部的にどうマップするかは別にCocoaに限った問題じゃない。
アプリやクラス毎に意味付けは変わって来る。
だからこそStandard Suiteに総称的なselectがあるわけで、代わりに意味不明な
命令を繰り出す理由にはならんよ。OOP的な方向とも相反する。

69:55
08/10/24 23:48:15 Kw8HwHQ60
色々奥が深いんね。勉強になるし楽しい。
>>67
display dialog でよいのか。最終エディタとかに持って行くんかとおもった。

70:名称未設定
08/10/25 00:02:39 /nRWm3zs0
2chResView.app

MBP intel 10.5.5でお試ししてみましたが,これはいいですね.
ワンセグを使っているんですが,まさに実況スレの自動更新とあいまって,
スレの流れがよくわかるわかる.

2chResViewのみですが,今のところこれといった問題もありません.
実況は2chブラウザでなく,2chResViewのみでいいかなって思うぐらい.
GrowlとAppleScriptの可能性を感じさせるアプレットですね.素晴らしい.

71:名称未設定
08/10/25 00:55:28 /nRWm3zs0
>>69
display dialogなんですよ.もしJedit Xとかに持っていくのなら
フォント変更ができると思うので,大丈夫じゃないかと思います.

72:名称未設定
08/10/25 03:02:01 F4pUJc+e0
tell application "Safari"
activate
set visible of window 2 to false
set visible of window 2 to true
end tell
少し遅くなるがこれもありか?

73:名称未設定
08/10/25 07:19:58 /nRWm3zs0
読み飛ばしてもらっていいんですが,
うちのLeopardでは,>>72 が希望にそった動作をしてます.
>>65 はドックからの起動だと大丈夫なんですが,アプリ単体で
起動した時はウインドウがアクティブにならないみたいです.

74:名称未設定
08/10/25 16:44:23 /nRWm3zs0
www.gcug.net/test/gmc.png

レス >>53 で教えて頂いたスクリプトと2chResViewのソースをあわせて,
display dialogではなくGrowlでカレンダー表示させるようにしたスクリプト.

75:名称未設定
08/10/25 17:18:51 zRBX1lq80
2chResView導入テスト中。

モタスポ実況板のスレURLを入れると、
「&amp;1(←本当は半角)を取り出すことはできません。」と言われて、
動作が止まってしまいます。下記スレで起こりました。

URLリンク(live-racing.net)

どこをいじればいいかアドバイスいただけますと大変助かります。
Intel iMac、10.5.5です。よろしくお願いします。

76:名称未設定
08/10/25 18:05:23 VbXcGaBh0
Growlスレに作者がいるって訳じゃないの?

77:名称未設定
08/10/25 23:42:03 x2JBMzcV0
string id 8199ってなんじゃ?

78:名称未設定
08/10/26 01:08:20 e+jOjkx/P
>>75
対応したと思う

79:名称未設定
08/10/26 02:14:27 QJLbb3aC0
>>78
2chはここしかみてないから使わないけどソース見てて。おしえてくれろ。
set AppleScript's text item delimiters to {hoge as Unicode text}
どしてリストにして渡してるの?どっかで何か変わったの?これやらないとだめ?

80:名称未設定
08/10/26 02:15:30 4cxLaD6K0
>>79
日本語でおk

81:名称未設定
08/10/26 02:19:56 QJLbb3aC0
>>77
あ、私かいな。ちゃんと引用しろよ。
Unicode ID のことだよ。前スレで盛り上がったじゃん?data<>とかで書かなくてもよいんだ。
そいえばちゃんとお礼してない。教えてくれた人ありがとう。

82:名称未設定
08/10/26 02:23:45 QJLbb3aC0
>>80
78さん? >>53 で私の使ってるハンドラ string を渡してる。
delimiters に関してなにか変更あったのかな?と。あまりAppleのdocument読まないから。

83:名称未設定
08/10/26 02:25:13 4cxLaD6K0
どうやら日本人じゃないらしい

84:名称未設定
08/10/26 10:17:39 lUfGSYy60
>>81
ありがと。
Tigerだとコンパイルできるけど動かんぞ。
Leopard以降なのか?
なんかUnicode対応以来,あちこちぐちゃぐちゃしてわからんことが大杉。

85:名称未設定
08/10/26 11:04:50 hQeVnxlp0
君ら、もうちょっと脳に汗かこうや
ググらず、Language GuideやRelease Notes読まず、じゃわか(ry

86:75
08/10/26 13:32:52 zHn/rlQA0
>>78
ご対応ありがとうございました。
ただ、残念ながら動きませんでした。エラーも同じです。
Growlからは「スレが見つからないので新しいスレを選択しろ」と言われます。



87:名称未設定
08/10/26 16:51:07 TVo/dLc60
AppleScriptのdo shell scriptからPerlを扱えるようカジりはじめたのですが,
最初からつまずいてます.

set textMess to " Leopard."
do shell script "perl -e 'print \"Hello,\n\";'"

do shell script文の後にAppleScript変数textMessをつけて,"Hello, Leopard."
という結果にしたいのですが,"echo " & textMessをこれにどうつなげていいのか
わかりません.教えていただけませんか.

88:名称未設定
08/10/26 17:18:51 1fRNd1I/0
>>87
コマンドラインを変数にして文字列とつなげればインジャネ?
つかここら辺基本だから、どっかのサイトでみっちりやっといた方がいいと思うけど。

まあ適当にサンプルおいとくからがんばれ

on open theFileList

repeat with theFile in theFileList
set commandLine to "openssl sha1 " & {quoted form of (POSIX path of theFile)}

set xxx to do shell script commandLine

set pushTemp to AppleScript's text item delimiters
set AppleScript's text item delimiters to "= "

set xxx to last text item of xxx

set AppleScript's text item delimiters to pushTemp

display dialog xxx
end repeat

end open



89:名称未設定
08/10/26 17:33:51 TVo/dLc60
>>88
do shell scriptを変数に書き出して,それをもう一つの変数につなげるのではなくて,
do shell script 内のPerl内でつなげて完結させるということを聞きたかったわけです.

上のサンプルは別な部分で参考にさせていただきます.

90:名称未設定
08/10/26 17:40:30 TVo/dLc60
わかりにくかったかもしれません.自分でいろいろ試してみます.

91:名称未設定
08/10/26 17:52:57 1fRNd1I/0
>>89
do shell script で発行されたコマンドに対して対話的に何かしたいといいうことか?無理。

92:名称未設定
08/10/26 18:28:28 TVo/dLc60
>>91
言われている通り無理っぽいので,テクニカルノートのサンプルを参考にして
一度AppleScript変数に読み込ませてからつなげる方法にしました.

set textMess1 to "Hello,"
set textMess2 to " Leopard."
do shell script "echo " & textMess1 & textMess2
-- "Hello, Leopard."

ありがとうございました.

93:名称未設定
08/10/26 20:07:32 VTGefaxq0
set textMess to " Leopard."
do shell script "perl -e 'print €"Hello," & textMess & "\n€";'"

これとは違うって事?
解決したみたいだからいいけど

94:名称未設定
08/10/26 20:30:36 TVo/dLc60
>>93
そうかそれでいいんですね.
何度やってもエラーになってたので,ダブルクォーテーションが抜けてたか,
増えすぎたバックスラッシュでこんがらがってたのかも.ありがとうございます.

ちょっとでもわかると,Perlが楽しくなってきました.

95:名称未設定
08/10/26 21:29:52 e+jOjkx/P
>>79
どっかからのコピペなんで詳しいことはわかりません

>>86
試したら自分もエラーが出たのでもっかい直しました



96:名称未設定
08/10/26 21:57:07 c5rHVkSN0
このつぶやき見飽きた。もう勘弁してくれ。

>>33 でも,なんだかわかんないけど,楽しい.
>>94 ちょっとでもわかると,Perlが楽しくなってきました.

97:名称未設定
08/10/26 22:02:11 leFDhUAz0
>>96
それがプログラミングだからしょうがない。
楽しくないプログラミングなんて誰もやる気しないだろ?
あの試行錯誤感がいいんだよ。

98:名称未設定
08/10/26 22:11:01 VTGefaxq0
>>94
€"ワンセットを即座に普通の文字として認識出来るように鍛えるか

set DQ to "€""
do shell script "perl -e 'print " & DQ & "Hello," & textMess & "\n" & DQ & ";'"

とかやればApplescriptでのダブルクォーテーションとの違いがなんとなくつかみやすいかも。
文字の並びが長くなっちゃうけど

>>96
そんなら無視しれ。
オレ覚えはじめのころにそんなこと言われたら相当凹むわ。

99:名称未設定
08/10/26 22:21:26 PmjoJ6HJ0
環境変数の展開とかしない限りは「¥"」じゃなくてシングルクオート「'」でいいんじゃないのか?

100:名称未設定
08/10/26 22:31:05 tzBda6Gc0
楽しいのは全くもって結構だが、いちいちここに書く必要はない。

101:名称未設定
08/10/27 01:05:49 xTSmnSN80
>>96 >>100 そういうお前がry

102:名称未設定
08/10/27 07:43:15 0eZUsEsb0
>>98
わかりやすくていいですね,慣れるまではそれを使ってみます.

>>99
自分が書き方知らないだけだと思いますが,シングルクォートで書けなかった…….

103:名称未設定
08/10/27 16:35:43 SCa34hkm0
せめて句読点をちゃんと使って欲しい。


104:名称未設定
08/10/27 20:57:21 rwh9I1Ct0
わかり難い物はquoted form of 使うべきだろ。

105:名称未設定
08/10/28 22:28:26 uR63MieC0
>>84
PARKにまだ書かれていないみたいだから、まとめ的に昔と今の違いをここに書いとく。
めちゃくちゃ便利になったってのが解ると思う。Unicodeつかう人にとってだけかもだけど。
とりあえず2万字回すべし、面白いぞ。"25991 23383 12497 12524 12483 12488 35211 12390 12429 12399 28961 12375 12394"
set hoge to 9891 as real
set leopardString to string id hoge
set tigerString to (《data utxt26A3》 as Unicode text) --《》は半角ね。
log leopardString & space & tigerString

106:名称未設定
08/10/28 22:31:24 uR63MieC0
ついで、クォートの使い方私風。参考になれば。
上の10進出すのに使った。ちょうど良いかも。

set hexNum to quoted form of "26A3"
set decNum to do shell script "ruby -e " & quote & "p " & hexNum & ".hex" & quote
return decNum

107:名称未設定
08/10/28 22:47:04 Kb/uGXgy0
>>106
これを参考にして,これから作るScriptに利用してみます.
ありがとうございます.

108:名称未設定
08/10/29 00:30:23 S4POVvan0
見直さずに送信は悪い癖だな。治す気はないが。補足もしくは蛇足をば。
勉強し始めの人にはちょっとしたことでもわけ解んなくなるから。←通ってきた道。いや今でも。

>105 1行目の as real
エラーメッセとNo.が欲しくていろいろ遊んでたのを消すの忘れてた。
なんも書かんでよいぞ。 as integer でもよいか?宣言した方が読み返しやすいかな?

>106 で16進から10進変換かいてるが10進取るだけなら >105 の tigerString つまりキャラクタを id of したら10進とれる。
set hoge to id of "腐" とかで結果みてくれ。ASCII number と character のUnicode 用みたいな物だ。

で >106 はPearl のハンドラ書き直したときのをデバッグついでに1行使いしてみただけ。quote の流れの役に立つかな?と。
とにかく文字処理する人間に取ってはAS2.0と ruby には感謝感激雨霰だな。

ちなにみこいつどんだけ暇なんだ?と思うだろうが確かにそうだ。
仕事する気がおきんのでここで遊んでる。仕様書なんてこの世からなくなればよいのに。


109:86
08/10/30 21:07:17 uO0uvF/a0
>>95
今度は動きました。
どうもありがとうございました。
便利に使わせていただきます。



110:名称未設定
08/11/06 01:32:52 ZibL1xWP0
広義の意味でのApplescriptの質問なのですが、
これまで自分で使うためとフリーウェア(1本だけですが)としてスクリプトを組んだことはあるのですが
はじめて、お客さんに頼まれてスクリプトを組みました。
スクリプトはだいたい200ライン程度、スクリプトエディタを使用しユーザーインターフェイスは最低限のものです。
いちいちtellで階層を呼び出すのは嫌いなので、割と短めのライン数になっていると思います。
内容を言わないでの質問で申し訳ないのですが、一般的にはどのくらいの額を請求できるものなのでしょうか?

最終的にはお客さんと相談して決めようと思っているのですが、
あまりにも常識はずれになってしまうといけないし、自分が安く提供したのか、高く貰ったのかくらいわかっておきたいので


111:名称未設定
08/11/06 01:54:35 6C3sgi7U0
普通は開発にかかった時間で請求するものだと思うけど。
個人的には,AppleScriptで稼ぐのはあきらめました。



112:名称未設定
08/11/06 02:23:52 ZibL1xWP0
>>111
ありがとう。
最初うまく動かなくて2日位かかってしまった。
最初からあることに気づいてれば数時間で出来ちゃったと思う

>個人的には,AppleScriptで稼ぐのはあきらめました。
やっぱり仕事として発生しないということかしら...

113:名称未設定
08/11/06 02:42:27 xe1A6rEs0
会社員なので参考になりそうな答えは提示できないけど、
別にAppleScriptに限定して考える事は無いんじゃないかな

あと今更言ってもアレなんだが、
先に決めとくべきだったんじゃないかとは思う

114:名称未設定
08/11/06 12:53:50 ZibL1xWP0
>>113
アプリケーション制御とファイル管理をするような内容だったので
開発の容易さからApplescriptになりました。
私自身使える言語がApplescriptとjavascriptしかないというのもあります。

私はプログラマーではなく、自身のためにスクリプトを組んだり
レイアウトフォームに付随して(業種がばれますね)スクリプトを組むことはあったのですが
スクリプト単体で発注されたのははじめてで、うれしくて予算は二の次にしちゃいました。

やっぱり、まずはお客さんに満足していただくよう努力して、評価を得ようとおもいます。
有り難うございました。

115:名称未設定
08/11/06 14:51:35 SrjMOGQVP
「報酬は?」「あなたが…満たされた分だけ…」

116:名称未設定
08/11/06 19:47:28 5FgNhhrY0
3万円~30万円ってところかなあ。

117:名称未設定
08/11/07 00:13:21 KE7FU1C70
日給いくらで申請するかだよね。



118:名称未設定
08/11/07 00:25:54 e1eBJROM0
スクリプト単体じゃなくて別に主たるコンテンツの依頼があったのなら
「また次も宜しくお願いしますね」的なおまけとして差し上げても良かったのにな。

119:名称未設定
08/11/07 01:51:01 U7X/qCx20
>>114
いや、「何故わざわざAppleScriptで作ったの?」とかそんな話じゃなくてさ

対価の見積もり基準としてAppleScriptだと幾ら?って限定する必要はないわけで、
マ板かム板あたりで一般的な話として相談する手もあったんじゃねーのって事です

AppleScriptで書こうがObjective-Cで書こうが、
中身に詳しくないお客にしてみれば同じ事じゃね?

120:名称未設定
08/11/07 13:15:50 QwQjnn/H0
>>119
ありがとう。>>108の方の書き込みをみて、ここで聞いてみようかなと思った次第です。
>>111,117
時間計算してしまうと私の能力が低いと高い請求になってしまう。それもちょっと...
>>116
私はその低い方の金額でもOKな感じです。
>>118
それなりに頂ければ、やる気も出てくるので...やっぱり頂きたい

みなさん本当にありがとう。


121:名称未設定
08/11/07 21:09:06 KE7FU1C70
>>120
能力と時間給の問題は,そのとおりなのだけれども,世間はそれで動いているんだよね。
能力がありすぎると損をするような...

122:名称未設定
08/11/08 12:46:11 n/AS+2ei0
>>121
FP

123:名称未設定
08/11/08 21:23:48 ijpwYJEF0
能力があればそれを理由に時間単価を上げられるじゃない

124:名称未設定
08/11/08 22:45:01 dQzZVq1f0
能力がある→単位時間当たりの料金が高い→でも開発時間が短い ←こっちの方がクライアントのメリットは多いはず
能力がない→単位時間当たりの料金は低い→でも開発時間が長い

ってことでまず自分の時給を決めなさい。750円/hからスタートです。

125:名称未設定
08/11/09 18:45:13 75hQjtnT0
次のような処理を一気にしてくれるスクリプトを書きたいと思っています。

1) ~/Desktop にあるすべてのzipファイルを解凍
2) ~/Desktop にあるすべてのhtmlファイルをゴミ箱に移動 or 削除

1)はStuffIt ExpanderやUnarchiver、2)はFinderに、それぞれやらせればいいのだと思いますが、
具体的にどういう命令にすればいいか分かりませんでした。

初歩的な質問で恐縮ですが、アドバイスお願いします。

126:名称未設定
08/11/09 18:51:37 10dOh0aU0
Automatorなら分からなくても出来るが
それでは駄目なのかい

127:名称未設定
08/11/09 20:02:29 J1ADMCxr0
>>125
簡単に作りたいんだったら
1)はzipファイルをFinderでopen
2)はhtmlファイルをFinderでdelete

両方とも拡張子で選びだせばいい



128:名称未設定
08/11/09 21:40:44 J1ADMCxr0
>>125
>>127の説明だけだとわかんないだろうから具体的なものを書いとく
2)の方だけだよ。あとは調べるなり応用するなりしてみて

tell application "Finder"
delete (every file of (path to desktop folder) whose name extension is in {"html", "htm"})
end tell




129:名称未設定
08/11/10 00:13:25 G+bZelPo0
>>125
こんなんでもいいのかと
tryは該当項目がない時の対応

try
do shell script "open ~/Desktop/*.zip"
end try
try
do shell script "rm ~/Desktop/*.html"
end try


130:名称未設定
08/11/10 03:47:18 HbJJ7IMM0
>>129
シェルスクリプトでやれってことですね、わかりますw

131:名称未設定
08/11/10 11:39:44 jKYev5ya0
最初からシェルスクリプト使った方が効率的だしw

132:名称未設定
08/11/10 14:09:55 E18X5wfz0
なんか雰囲気からして、一日一回定期的に動かしますみたいなものに見えるんだよね。
それだとシェルスクリプトとcronだわなあ。

133:名称未設定
08/11/10 14:32:28 /YsdEu920
>>132
それは古典的なunixの場合、OSXではlaunchdを使う。
URLリンク(developer.apple.com)

134:名称未設定
08/11/10 19:56:01 5VAvNdNM0
へー

135:名称未設定
08/11/11 03:07:18 6TGtup5L0
思いっきりcron使ってた。
launchdってそういうこともできるのか。

136:名称未設定
08/11/11 15:47:06 eOj/IPUD0
>>133
iCal のイベントで呼出してたw


ところでファイル名やフォルダ名に全角パーレンが入ってると
アプリでopenした時にエラーになってしまうのですが
対処はどうすればいいんでしょう?

137:名称未設定
08/11/11 23:59:13 2Z6c/c/30
>>120
今更だけどクライアントと先に話すべき事だよね。
考え方によっては、今後の事も考えて次の仕事とセットで値段を決める方法もあるよ。
例えば「今回は普通5万もらうんですが、これだと高くなるので次の○○とセットで7万でどうですか?」とか。
ついでに、photoshopCS3で楕円形の選択範囲ってつくれる?

普通の長方形とかなら
tell app "photoshopCS3"
select current document region {{500, 520}, {501, 2020}, {501,2020}, {500, 2021}}
end tell
で作れるけど、楕円形が作れない・・・・
教えて下さい。


138:名称未設定
08/11/12 07:22:19 rk8/vzcM0
>>137
CS3 の AppleScriptReferenceGuide は読めるという前提で。
標準楕円なら楕円方程式に放り込んで、必要とする平滑度でポイントの座標をだす。
メモ。((x*2)*(a*2))+((y*2)*(b*2)=1 -->第1象限、abは長短半径。bが0ならxはaね。

円を扁平させたのを3次ベジェで書くなら path item で作って create selection 。これなら12個の座標で行けるね。
ググって方程式あるかな?Illstratoer で楕円書いて direction みてみたら55%くらい引っ張ってあるね。

って遊んでたらお弁当作る時間無くなった;;

139:名称未設定
08/11/12 07:32:18 JWYw+knL0
>>135
launchdを使えば周期動作やフォルダ監視スクリプトも待機負荷無しで作れる。
cronと違いLaunchAgentsはloginしていることが保証されるから、AppleScriptや
GUIアプリを使う物はここに置けば良い。OSXの多くのAPIはloginwindowや
WindowServerとMach IPCでやり取りして動くからlogin状態が必要になる。

140:名称未設定
08/11/12 12:22:33 RLAaAYsU0
>>138
楕円方程式が間違ってるぞ
((x^2)/(a^2))+((y^2)/(b^2))=1

でもなんかカッコいい...惚れた

141:名称未設定
08/11/12 17:26:14 LaYCdK41P
円を扁平させたのも楕円もまったく同じだよ。

>>140の式

142:137
08/11/12 20:54:38 rk8/vzcM0
恥ずかしい。。。。鬱だ死のう。。。っていうんだっけ?2ちゃんねるでは。
ぐはー、いいんだ寝起きは駄目なんだ。
円を扁平させても焦点1つじゃないん?暇なときに書いて比べてみる。

近日点、遠日点、重心の共有、ケプラーの法則。同一時間で起動が描く焦点からの面積は同一だっけ?
なつかしいな。あの頃は HyperTalk で書いてた。←天文部兼写真部。Macで回る赤道儀がほしかった。

143:138
08/11/12 20:57:29 rk8/vzcM0
↑自分の番号間違えた;;こりゃほんとにだめだ。

144:名称未設定
08/11/12 22:40:12 RLAaAYsU0
>>137
結構いいヒントが出てるからもう出来るんじゃないの?
あと、もう一つの手段として
javascriptを使って三角関数で楕円を作る方法あるぞ



145:138
08/11/12 23:59:05 rk8/vzcM0
>>144
もう寝る。眠い。
でもってあんたわたしになにいってんの?書けない????
かけるにきまってるじゃないの。なにがJava?Rubyでもなんでも。shellでも。
三角計算1行で呼べるのがASじゃん。なめたこといってんじゃねーよーーーー

あーーーー。うわ、、、、ごめん、私相手じゃなかった。だからーーーー、番号間違えてただけだよ。
ごめん。うわ。はずかし。えとーーーーー。にゃ?
消すべきだよね、送信したらだめだよね。でも、押すんだろーな。せっかく書いたからってだけで。

146:名称未設定
08/11/13 00:04:24 Xd/R6mGT0
あんた雑談スレでも見るけど、正直、その口調ウザい。
続けるならコテなりトリップなり付けてくれない?

147:名称未設定
08/11/13 00:05:05 O8lIbEpR0
>>145
もうネロだワン

148:137
08/11/13 01:06:16 C6jPTMrr0
みなさんありがとうございます。
AppleScriptReferenceGuideは一応読むんですが、いつも良く分からず考えられる組み合わせ全部やってる状態です・・・
せっかく教えてもらったのにさっぱり理解できません。わからない言葉全部ググってもどうすれば楕円ができるやら。
たとえば、
select current document region {{0, 0}, {0, 100}, {200, 100}, {200, 0}}
で200*100の横長の選択範囲が作れるますよね?
その時に、Photshopの楕円選択範囲ツールで{0, 0}から{200, 100}ドラッグした時とおなじ楕円を作るにはどうしたらいいんでしょうか?

create selectionのパラメーターにはそれらしいものも見当たりません。
select current document region {{0, 0}, {0, 100}, {200, 100}, {200, 0}} as oval とかできればいいんですけどね・・・
ほんと宜しくお願い致します。

149:137
08/11/13 01:22:21 C6jPTMrr0
あれ?もしかしてパスで楕円を作って選択範囲を作る必要があるんですか?
パスになるともっとわからない・・・
明日車で出張なのに気になって眠れない。

150:名称未設定
08/11/13 01:30:46 EqSLftju0
>>148 勘違いをしているようなので
以下が楕円方程式から求める方法
これでいいんだよね?

set a to 100
set b to 50
set ox to 200
set oy to 200

set ovalList to {_1:{}, _2:{}, _3:{}, _4:{}}
set oval to a reference to ovalList
set x to -a
set n to 1
repeat until x ≥ 0
set y to ((1 - (x ^ 2) / (a ^ 2)) * (b ^ 2)) ^ 0.5
set end of oval's _1 to {x + ox, y + oy}
set beginning of oval's _2 to {-x + ox, y + oy}
set end of oval's _3 to {-x + ox, -y + oy}
set beginning of oval's _4 to {x + ox, -y + oy}
set x to x + n
end repeat

tell application "Adobe Photoshop CS2"
select current document region oval's _1 & oval's _2 & oval's _3 & oval's _4
end tell

151:名称未設定
08/11/13 02:19:22 w1vAjk9p0
>150
すげーな。素人にはさっぱりわかんね!でも
repeat until x ≥ 0
って通らないぞ。

152:名称未設定
08/11/13 07:30:54 I6x4aDNX0
x >= 0
かな、入力する時は。後で勝手に≧に変換されるんだっけかな。

153:名称未設定
08/11/13 07:32:45 I6x4aDNX0
>>だったかな、入力する時は。

って意味です。すまそ

154:名称未設定
08/11/13 07:57:22 X81kC3MY0
積分思い出した

155:137
08/11/13 09:08:52 KUaqIAkT0
>>138
>>140
>>144
>>150
>>152
皆さんありがとうございます。
去年から気になっていてあきらめていたんですが
出来てしまうとは!!
ホントにありがたいです!
でも、なんでこの式で楕円になるかさっぱり分かりません(笑
でも、ここまでやってもらえれば私でも出来ます!!!!
ありがとうございます。
でも、やっぱりなぞです・・・

156:150
08/11/13 13:13:13 EqSLftju0
>>155私はあなたが最初にレスをつけた>>120ですよ。
>>138さんのおかげで気がついた。
ちなみに各座標を求める部分をサブルーチン化するのであれば以下のようにする。

set a to 100
set b to 50
set ox to 200
set oy to 200

on get_oval(a, b, ox, oy)
script oval
property _1 : {}
property _2 : {}
property _3 : {}
property _4 : {}
end script
set x to -a
set n to 1
repeat until x ≥ 0
set y to ((1 - (x ^ 2) / (a ^ 2)) * (b ^ 2)) ^ 0.5
set end of oval's _1 to {x + ox, y + oy}
set beginning of oval's _2 to {-x + ox, y + oy}
set end of oval's _3 to {-x + ox, -y + oy}
set beginning of oval's _4 to {x + ox, -y + oy}
set x to x + n
end repeat
return oval's _1 & oval's _2 & oval's _3 & oval's _4
end get_oval
tell application "Adobe Photoshop CS2"
select current document region my get_oval(a, b, ox, oy)
end tell


157:名称未設定
08/11/15 20:21:14 QxiQRkp80
暗号化コンテナ作成&マウントソフト「TrueCrypt」にパラメータを渡して
起動するため(コンテナをマウントさせる形で起動)、何とかAppleScriptの
形にしてみました。

do shell script "/Applications/TrueCrypt.app/Contents/MacOS/TrueCrypt /Volumes/DATA/test.tc"

この一行のみです。アプリTrueCryptを使ってDATAディスクにあるtest.tcを
マウントするための単純なシェルスクリプトを、Terminalを表示させずに
行うためとった苦肉の策なのですが、上記のスクリプトを実行すると、
暗号化コンテナをマウントするためのパスワード入力窓がフォアグラウンド
には来ず、即座にパスワードを入力できる状況にはなりません。

このスクリプトを起動したときに、これがフォアグラウンドに来るための
方法なぞご存知の方、ご教示ください。TrueCrypt側の問題なのかもしれない
ですが・・。



158:名称未設定
08/11/15 20:32:13 zjzwFa6K0
TrueCryptって全然知らんけど

do shell script "/Applications/TrueCrypt.app/Contents/MacOS/TrueCrypt /Volumes/DATA/test.tc &"
tell app "TrueCrypt" to activate

かな
間にdelay 3とか入れたほうがいいかも

159:157
08/11/15 20:46:46 QxiQRkp80
>>158
ありがとうございます。
うーん、やはりパスワード入力窓がフォアにならないですね・・。
delay 3 を入れても同様です。

と思ったら、パスワード入力窓はバックのままなのですが、その入力をキャンセル
すると、アプリ本体が起動され?メインの窓がフォアに来たりしています。

パスワード入力窓のプロセスか何かが、アプリ本体と違う要素で出来てるとか何か
なんでしょうか。こうなってくると、TrueCrypt側の問題っぽい感じがしますね。
というより、フォアに「どれを」持ってこればいいのか調べきれない私の問題か。

いずれにせよ、もすこし試行錯誤してみます。ありがとうございました。


160:名称未設定
08/11/15 22:56:56 6ZZgBvaS0
UI Element Inspector か Prefab UI Browser 辺り使えば、
プロセス調べるぐらい簡単じゃないか

やろうと思えばAppleScriptでもできるし、
LeopardならAutomatorを使う手もある

161:名称未設定
08/11/16 03:42:21 kpcsZDAS0
>>159
1行目と2行目入れ替えればいんでない?

162:150
08/11/16 11:51:03 yqcSWyTJ0
do shell script "/Applications/TrueCrypt.app/Contents/MacOS/TrueCrypt /Volumes/DATA/test.tc"
tell application "System Events"
tell application process "TrueCrypt"
set frontmost to true
end tell
end tell

これでどう?

163:159
08/11/16 19:44:57 c9TxTH4I0
>>161,162
うーん、やはりうまくいきません。
スクリプトエディタから起動した場合も、アプリケーションにして保存して
ファインダーからダブルクリックで起動した場合も、パスワード入力窓は
最前面には出てこず、エディタの背後やファインダーの背後に立ち上がり
ます。

do shell script を使うのが無理矢理っぽいって感じなのでしょうかねえ・・・。
他に、アプリをパラメータつきで起動する方法は無いでしょうか・・。

164:名称未設定
08/11/16 20:34:46 YH31Dkqw0
まさか

tell app "TrueCrypt"
activate
open (("/Volumes/DATA/test.tc" as POSIX file) as alias)
end

で済むと言う話ではないのか

165:150
08/11/16 22:09:51 yqcSWyTJ0
>>163
ひょっとして2行目以降に進んでいない?
ignoring application responses
do shell script "/Applications/TrueCrypt.app/Contents/MacOS/TrueCrypt /Volumes/DATA/test.tc"
end ignoring
tell application "System Events"
tell application process "TrueCrypt"
set frontmost to true
end tell
end tell

これでダメなら最後の手段、
アプリケーションを起動するスクリプトとアプリケーションを全面に送るスクリプトを分けてしまう。
以下のようにする。
スクリプトA> tmp.txtにファイルパスを書き込み、スクリプトBをファインダーより起動、
       スクリプトBにより起動したTrueCryptを全面に送る
スクリプトB> tmp.txtに書き込まれたファイルパスをシェルを使って開く

166:名称未設定
08/11/17 01:23:38 HYGF21ap0
まさか TrueCrypt とやらじゃなくて UserNotificationCenter だったなんてオチじゃないよね

167:名称未設定
08/11/17 04:42:03 vf7oC03d0
>>157
URLリンク(bbs.macscripter.net)
URLリンク(www.truecrypt.org)

168:163
08/11/17 13:21:56 aCPrsfJR0
>>164
ありがとうございます。アプリケーションのメインの窓は出てくるのですが、パスワード表示窓は表示されず、また
test.tcも選択されていない状況で、「file "DATA:test.tc" のタイプを alias に変換できません。」という
エラーメッセージが出てきてしまいました。このあたりの意味は今後もう少し勉強してみます。

>>166
ありがとうございます。一応、パスワード入力窓はTrueCryptのものと思われます。オプションにTrueCrypt
マウント関連の項目がありますので・・。

>>167
情報ありがとうございます。やはり、このソフトに関しては同じようにマウント自動化につまづく状況の人が他にも
いるようですね。TrueCryptの振る舞いの問題もあるのでしょう。ひょっとすると、このソフトの性質上、そうした
自動化をやりにくいように工夫されているのかもしれません。特にパスワード入力窓の操作など。



169:163
08/11/17 13:24:09 aCPrsfJR0
>>165
ありがとうございます。うむむ・・ やはり、パスワード入力窓は、起動したスクリプトエディタ、またはファインダ
の背後に出現してしまい、いったんマウス操作なりで前面に持ってこないとパスワード入力できない状況ですね・・

「最後の手段」についてやってみましたが、二つに分けることで、何とかうまくいったようです。

tell application "System Events"
tell application process "TrueCrypt"
set frontmost to true
end tell
end tell

で、tcfront.appという形でtest.tcと同じ場所に保存し、

do shell script "/Applications/TrueCrypt.app/Contents/MacOS/TrueCrypt /Volumes/DATA/test.tc &  /Volumes/DATA/tcfront.app"

を、test.appで保存。test.appを起動することで最初はファインダーの背面にパスワード窓が出てきますが、
1秒ほどでそれが前面に出てきます。とりあえずはこれでやっていけます。
大変感謝しております。ご教示ありがとうございました。

170:150
08/11/17 22:53:12 Uomap7AT0
>>156の続き
暇だったので、こんなのも作ってみました。

--引き数→ 角の数,傾き,高さ,横幅,中心点横座標,中心点縦座標
on polygon(corner, angle, h, w, ox, oy)
script obj
property theList : {}
end script
set {angle} to {((angle + 360) mod 360) / 360 + 0.75}
set angle_2 to angle
repeat with i from 1 to corner
set {sign_1, sign_2} to {-1 ^ (angle_2 div 0.5), -1 ^ (angle_2 div 0.25)}
set rad to ((0.5 + (sign_2 * angle_2 mod 0.5)) mod 0.5) * 2 * pi
set {y, ni} to {rad, 1}
repeat with n from 1 to 8
set ni to ni * (2 * n) * (2 * n + 1)
set y to y + -1 ^ n * (rad ^ (2 * n + 1)) / (ni)
end repeat
set y to y div 1.0E-13 * 1.0E-13
set end of obj's theList to {sign_1 * sign_2 * ((1 - y ^ 2) ^ 0.5) * w + ox, sign_1 * y * h + oy}
set angle_2 to angle + i / corner
end repeat
return obj's theList
end polygon

tell application "Adobe Photoshop CS2"
select current document region my polygon(90, 0, 1000, 1000, 1500, 1500)
end tell

↓テイラー展開はここを参考にしました。
URLリンク(www33.ocn.ne.jp)

171:名称未設定
08/11/18 01:14:04 nGx6fZdr0
Applescript でサウンド再生するスクリプト。
RubyCocoa を呼び出しているので,Tiger以前の場合は別途 RubyCocoa のインストールが必要(Leopardには標準添付)。


playSystemSound("Basso") -- /System/Library/Sounds/*.aiff および ~/Library/Sounds/*.aiff から探して鳴らす
playSoundFile("/System/Library/Sounds/Blow.aiff") -- サウンドファイルのパスを指定してサウンドを鳴らす

on playSystemSound(soundName)
do shell script ("/usr/bin/ruby -e \"require 'osx/cocoa';OSX::NSSound.soundNamed(\\\"" & soundName & "\\\").play;sleep 0.5\"")
end playSystemSound

on playSoundFile(soundFilePath)
do shell script ("/usr/bin/ruby -e \"require 'osx/cocoa';OSX::NSSound.alloc.initWithContentsOfFile_byReference(\\\"" & soundFilePath & "\\\", true).play;sleep 0.5\"")
end playSoundFile



172:名称未設定
08/11/18 21:43:00 Oj2LKQ7S0
ファイル名の一部を判定して条件分岐するにはどうしたらいいのでしょうか?

Apple純正FAXモデム使ってMacでFAX受信するようになったのですが
受信したFAXのファイル名が相手先のTEL番号に自動的になっており 例)FAX from 123 4567.png
これを利用して取引先からのFAXか迷惑FAXかなどを判定し
リネームやAlertを出すFloder Action Scriptを作っている途中です。

173:名称未設定
08/11/19 00:47:49 0V1+hMLH0
ファイルは既に取り出せてるの?
それが、theFaxFileだとして

tell application "Finder"
set theName to name of theFaxFile
end

で名前は取り出せる。あとは文字列操作だけど、それはもう少し具体例が
ないとよくわからない。
もしかすると
text 10 thru 17 of "FAX from 123 4567.png"
でいいような話かな?

174:名称未設定
08/11/19 00:52:38 Bx+L9xFS0
条件分岐だけなら例えばこんな感じだが

if theName starts with "FAX from"then
if theName contains "123 4567" then
/*123 4567からのFAX*/
else if theName contains "456 7890" then
/*456 7890からのFAX*/
else
/*迷惑FAX*/
end if
else
/*FAX以外のファイル*/
end if

例のようなファイル名なら、
"FAX from "と".png"込みで判別した方が確実な気もするけど…

175:173
08/11/19 01:02:07 0V1+hMLH0
123 4567が電話番号だとすると、東京からだと3123 4567になってたりしますね。
単純に文字数ではだめっぽい。
市外局番があることもあるんでしたっけ(それだとwordもつかえない)。

>>174もおっしゃるように
全部含めて比較した方が世話なさそうだ。



176:名称未設定
08/11/19 01:02:51 +YqqaPqO0
>>172
例えば,デスクトップのファイルで "hoge","hage" のいずれかが含まれているファイルに対してアラートを表示するなら,

set whitelist to {"hoge", "hage"}
tell application "Finder"
repeat with aItem in whitelist
repeat with aFile in ((every item of (path to desktop) whose name contains aItem) as list)
set namae to name of (aFile as alias)
display dialog (namae & " is Valid!") buttons "OK" default button 1
end repeat
end repeat
end tell

あるいはこんな感じでもいい。

set whitelist to {"hoge", "hage"}
tell application "Finder"
repeat with aFile in ((every item of (path to desktop)) as list)
set namae to (name of (aFile as alias))
repeat with aItem in whitelist
if namae contains aItem then
display dialog (namae & " is Valid!") buttons "OK" default button 1
end if
end repeat
end repeat
end tell



177:名称未設定
08/11/27 17:05:32 AmrFVjHJ0
>>171
すごいです。手を出しすぎるとわけわかんなくなるから RubyCocoa 逃げてた。
これは色々出来そうですね。RubyCocoa スレ行ってきます。

178:171
08/11/28 01:00:23 PIGyVP2U0
>>177



179:171
08/11/28 01:06:43 PIGyVP2U0
↑途中で送信してしまいました。
>>177
他にも,こんな使い方もできます。

例1:AppleScriptに対応していない 辞書.app を何としても使って辞書を引く

on lookupinDictionary(aWord)
do shell script ("/usr/bin/ruby -e \"require 'osx/cocoa';
p = OSX::NSPasteboard.generalPasteboard;
p.declareTypes_owner([OSX::NSStringPboardType],self);
p.setString_forType(\\\"" & aWord & "\\\",OSX::NSStringPboardType);
OSX::NSPerformService(\\\"Look Up in Dictionary\\\", p)\"")
end lookupinDictionary

lookupinDictionary("アップル") -- AppleScript に対応していない辞書.appを使って「アップル」を調べる


例2:AppleScript から WebKit の JavaScript エンジンを使って JavaScript コードを実行。
AppleScript→sh→Ruby→Cocoa→WebKit→JavaScript という,もはや何がしたいのか分からない呼び出しの深さになっていますが……。
まあ,こんなこともできますよ,というネタです。

on eval_js(jsCode)
do shell script ("/usr/bin/ruby -e \"require 'osx/cocoa';
OSX.require_framework \\\"WebKit\\\";
print OSX::WebView.alloc.init.windowScriptObject.evaluateWebScript(\\\"" & jsCode & "\\\").to_i\"")
end eval_js

display dialog eval_js("(new Date()).getYear()+1900")



180:名称未設定
08/11/28 16:17:05 mHcPVnbl0
辞書引く場合は
open location "dict://apple"
non ASCIIだとURLエンコードがちょっと面倒
open location "dict://%E3%82%A2%E3%83%83%E3%83%97%E3%83%AB"

181:名称未設定
08/11/28 22:03:07 CStVQp+C0
set _word to "こうですか?わかりません!"
open location "dict://" & URLEncode(_word)

on URLEncode(_str)
do shell script "printf '" & _str & "'| perl -pe '~s/([^\\w])/\"%\".unpack \"H2\",$1/ego;'"
return result
end URLEncode

182:名称未設定
08/11/28 22:05:09 CStVQp+C0

\はバックスラッシュに置換よろ

183:名称未設定
08/11/29 09:44:16 VZIVUASpP
php の方が余計なエスケープいらないからすっきりして分かりやすそう。
do shell script "php -r '$str=$argv[1];$str=urlencode($str);print $str;' " & _str

184:名称未設定
08/11/29 09:50:56 VZIVUASpP
>>183
ちょっと訂正。
do shell script "php -r '$str=$argv[1];$str=urlencode($str);print $str;' '" & _str & "'"

185:名称未設定
08/11/29 18:52:50 3EFLCewh0
iTunesで選択された曲のアーティストを右クリックからググることって
AppleScriptで出来ますか?

186:名称未設定
08/11/29 19:28:45 0uoN253C0
割と簡単に出来るので試してみて下さい


187:名称未設定
08/11/29 19:54:25 opFxlnzc0
>>184
urlencodeだと半角スペースが+になって
辞書appではデコードされないので%20になるrawurlencodeの方がいいかな。
あと''で単純に単語を囲むと'を含む文字でエラーになるので
quoted form ofを使った方がいいかな。

まあ、どっちも単語検索では問題になるケースは滅多に無いと思うけど
いろいろ使うならどっかで問題になることがあるかも。

do shell script "php -r 'print rawurlencode($argv[1]);' " & quoted form of theText

188:173
08/11/29 20:53:59 QzsGECYR0
>>186
「右クリックから」はそう簡単じゃなくないか?

189:名称未設定
08/11/30 01:50:01 g75iUdnM0
不特定多数の人に見られたら困るが
ある特定の人に渡したいフラッシュ(swf)があります
添付付きメールを送り、見てもらいたいのですが
相手がMac初心者であるため、swfをそのままダブルクリックとか
したりして見れないかと思います
そこで、swfをsafariで開くAppleScriptを同封したいと思っております
「同階層にあるhoge.swfをSafariで開く」
AppleScriptをだれか作っていただけないでしょうか?

190:名称未設定
08/11/30 02:02:47 b3addvQ70
>>189
swfファイルを選択してコマンド+I(アイ)
 ↓
「このアプリケーションで開く」ポップアップからその他を選択
 ↓
ファイルオープンダイアログでSafariを選択

このようにしたファイルを送ったほうが早くね?
Mail.appならメタ情報も送ったと思うだけどアーカイブしておいたほうが安全かな?


191:186
08/11/30 12:58:36 YQMNir780
>>188
AppleScriptを起動する為のコンテクストメニュープラグインが幾つか有るので
それを導入する事はそんなに難しい事でもないと思ったのですが。。。
CMプラグイン無しでやるには難しいですね。

192:189
08/11/30 19:39:20 g75iUdnM0
>>190
ありがとうございます
アップルスクリプト使わない方向で送り
無事届きました


193:名称未設定
08/12/04 18:17:32 C4D3uOe/0
path to me って10.4だとスクリプト自身のパスを取ってきてくれないんですね…
10.4で自身のパスを取得したい時はどのようにしたらよいのでしょうか…

194:名称未設定
08/12/04 21:27:22 HwXCthH70
>>193
スクリプトをアプリケーションとして保存する
んでもってアプリケーションとして実行

195:名称未設定
08/12/04 21:37:26 ypxWlKaq0
そのスクリプトを実行しているまさにそのアプリのパスが返るんだよ。
編集中のスクリプトであればその編集プログラムの,アプリとして実行中であればそのアプリの...

196:名称未設定
08/12/04 23:15:34 D4sqqstd0
Automator Actionの「AppleScriptを実行」だとLeopardでも同じ現象が起こる
よく使うのは path to をオーバーライドする方法だね

197:名称未設定
08/12/04 23:28:03 ypxWlKaq0
どうやんの?

198:193
08/12/04 23:45:42 BQJVqUNw0
レスありがとうございます!

ふむふむ…若干ややこしそうですね…

199:名称未設定
08/12/05 01:29:21 LdWXDghp0
URLリンク(homepage.mac.com)
人任せですまないが、くりた氏の所から

200:193
08/12/05 09:53:39 okzXidIv0
ありがとうございます!!
一度試してみます!!
お手数お掛けしました!

201:名称未設定
08/12/06 16:29:42 0qrcWF2v0
safariにsafaristandを入れたときにコンテキストメニューに現れる「PDF形式で書き出し」を
applescriptから実行するにはどうすればよい?

SystemEvents でやったみたけど出来ない・・・。

202:名称未設定
08/12/06 18:02:11 Y1jB2mcS0
>>201
コンテキストメニューからではなく
プリントからPDF書き出しではダメなのか?

203:名称未設定
08/12/06 18:39:58 0qrcWF2v0
それだとページに分かれちゃうのがやなんだよね。。。

204:名称未設定
08/12/06 22:05:24 NDrqP39+0
>>203
プリンタのカスタム用紙サイズでA4の縦が10倍くらいのをつくって
それ使ってプリントからPDF書き出し→トリミングで(゚д゚)ウマ-

205:名称未設定
08/12/07 02:31:56 LPtgCgIE0
applescript から用紙サイズを指定できない・・・

206:名称未設定
08/12/08 23:57:55 /A4x2I0f0
Safariのブラウザ部分だと action "AXShowMenu" が使えないね
マウスキーでも使わない限り、スクリプトでのコンテキストメニュー表示は厳しいんでないかな

207:名称未設定
08/12/10 04:30:55 5tEDkIRR0
Mac OS 10.5.5 (intel)/iTunes 8.0.2

tell application "iTunes"
set currentTrack to current track
set currentName to name of currentTrack
display dialog currentName
end tell

こうやるとエラーは出ませんが、

tell application "iTunes"
set currentTrack to current track
display dialog (name of currentTrack)
end tell

こうするとエラーが出てしまいます。
この違いは、どこから出るのでしょうか…

208:名称未設定
08/12/10 05:18:07 EFcWvX1W0
>>207
上の方は勝手に型の変換が行われてるわけよ。
tell application "iTunes" to display dialog name of current track as string


209:名称未設定
08/12/10 05:29:42 5tEDkIRR0
>>208
ありがとうございます。
textとstringは違うんですね…

210:名称未設定
08/12/10 18:29:18 G6ldQbJ30
これは display dialog の引数のクラスを調べて見ると良い。引数には string が必要なのに
class of (name of currentTrack)
は property と帰される。なので型変換が実行されるわけだが、 property を変換することは
スクリプトには出来ないので、tell してるアプリに処理が丸投げされ、そこでエラーが起きている。

アプリ側にしてみれば「そこのジョプズの名前を教えろよ」と命令されているようなもので、
「てめぇ、名前知ってて聞くか!?」とぶち切れてエラーを起こしている…わけではなくて、
ほとんど無意味な処理なので実装されてなくて、命令が処理できずエラーになっているだけ。

たとえば、これを明示的に型変換を指定して、
display dialog (name of currentTrack) as string
と書くと、エラーは起きずに処理が進む。
この場合は先に name of currentTrack が get されていて、それから型変換が試みられる。
class of (get name of currentTrack)
は、Unicode text なので、スクリプト側で string として処理することが可能で、結果、
アプリ呼び出しは起きずに変なエラーにはならない。

>207
の動作した最初の例なら、
set currentName to name of currentTrack
のところで、実際は
set currentName to (get name of currentTrack )
と実行されていて、display dialog に渡される引数は実体になっているので、問題は起きない。


結局これは暗黙の形変換に絡んだやっかいで解りにくい問題なんだけど、
たとえば、
display dialog (get name of currentTrack)
と記述しても動作するわけで、暗黙か、明示かと言うよりは、対象が参照か実体か?
それが解決されるとき、どこで処理が行われているか?あたりが分かれ目なんたど思う。


211:名称未設定
08/12/10 22:01:35 5tEDkIRR0
>>210
ありがとうございます。
「get」関数のある意味がようやくわかりました…

212:名称未設定
08/12/14 09:26:06 0xUWQQKX0
tell application "QuickTime Player"
open location "URLリンク(hoge)"
-- ここで、読み終わるまで待つには、どうすればいいんだろう?
save self contained document 1 in new_file
close document 1
end tell


213:名称未設定
08/12/14 12:32:48 CSeBAn7s0
>>212
if load state of document 1 is complete then
処理

とするとか

214:名称未設定
08/12/14 13:17:24 0xUWQQKX0
>>213
なるほど、これでいいんだな。
サンキュー。
tell application "QuickTime Player"
open location "URLリンク(hoge)"
repeat while load state of document 1 is not complete
delay 1
end repeat
save self contained document 1 in new_file
close document 1
end tell


215:名称未設定
08/12/14 20:53:38 9ph8Kdqc0
ちょいと質問。

DVDプレーヤーのイコライザーっていじれないですよね?
要は、VIDEO_TSフォルダから再生すると、イコライザの設定が保存できないの
で、AppleScriptを使って保存/復帰をさせたいんですけど、用語説明を一見し
たところイコライザに関する設定が見つからないので…

最悪、System Eventsを考えていますけど、あくまでも最終手段ということで。

申し遅れましたが環境は10.4.11です。よろしくお願いします。

216:名称未設定
08/12/15 11:47:43 J3odUKcK0
ちょっと質問させて下さい。

今 XCode 上で AppleScript メインのアプリケーションを作成しているのですが、
例えばあるボタンが選択された時に呼ばれる

on clicked theObject
end clicked

があったとして、この時呼ばれるスクリプトオブジェクトを事前に知る方法はないので
しょうか?それとも、毎回ボタンが押されるたびに新しいスクリプトオブジェクトが
生成され、実行されているのでしょうか?

だとすると、これらのハンドラの中からグローバルな値をいじる事はできない
のでしょうか?

うまく伝わったか心配ですが、何卒よろしくお願いします。

217:216
08/12/15 14:35:17 J3odUKcK0
ちょい言い方変えた方が分かりやすいかもしれません…。

例えば
・a.applescript
・b.applescript
という二つのファイルがあったとして、

その中で常に参照できる一つのスクリプトオブジェクトみたいなものがあれば、
万事解決する気がします。

218:名称未設定
08/12/15 15:49:53 fBme1Rqv0
>>216
どうも理解ができない。
この場合呼ばれるtheObjectってのはon clickedメソッドを呼び出したクラスだぞ?
で、on clickedの場合theObjectはボタンだぞ?
on clickedより先に中身知りたいならwill finish launchingでインスタンス呼べば良いんじゃないの?
>>217 でもっと混乱しておる。aとbのスクリプトが同じプロジェクトにあるならなんもせんでもインスタンス共有してるじゃん。
ばらばらに書くほうがめんどいと思うのだが?

219:216
08/12/15 16:11:44 J3odUKcK0
え~っとですね…………。

on clicked theObject

で呼ばれるスクリプトが a.applescript だったとしますよね?
よく分からないですが、多分ボタンをクリックすると a.applescript を読み込んで
インスタンス化し、そのスクリプトオブジェクトの clicked 関数を呼んでる訳ですよね?

そのスクリプトオブジェクトを事前に知りたい………と言ったらおかしいかもしれないですが、
要するに a.applescript 内での "me" と b.applescript 内での "me" ってのは違ってきちゃう
訳じゃないですか。

もっというなら、最初に起動した時に呼ばれてる awake from nib の時の me ってのを
clicked 内から呼びたいんですが、伝わってますかね………。

グローバルで定義しとけばいけるのかな~と思いきや、ファイルが違うと global の範囲も
そこで区切れてしまうらしく、以下の様な呼び出しができませんでした。

(続く...)

220:216
08/12/15 16:13:00 J3odUKcK0
(a.applescript)
global MainScript

on awake from nib theObject
set MainScript to me
end

on test (theValue)
display alert (theValue)
end

(b.applescript)
global MainScript

on clicked theObject
tell MainScript to test ("aiueo")
end

221:216
08/12/15 16:54:14 J3odUKcK0
連投になってしまってすみませんが、

URLリンク(homepage.mac.com)

ここを参考にまずは a.applescript の MainScript を property として
b.applescript を global に定義してみたのですが、うまくいきませんでした…。

Nib からのイベントハンドラの時だけスコープがおかしいんでしょうか。

222:名称未設定
08/12/15 17:43:37 F/y6zi1v0
何がしたいのか良くわからないけど、値を取得したいなら、
普通は一つのスクリプトに纏めるべき何では?
どうしてもスクリプトを分けるなら、適当なオブジェクトに
値を埋め込んで取得するとか。

223:216
08/12/15 18:06:40 J3odUKcK0
>>222
できれば、一つのウィンドウは一つの .applescript ファイルに、という形でまとめたかった
んですよね。一つのファイルにごちゃごちゃ入ってると見にくいし…。

当初適当なオブジェクトに最初の me をつっこんでおこうと思ったのですが、全ての
.applescript から絶対的に呼べる所が分からなかったので、ダメでした…。
何かうってつけのオブジェクトなど、ありますか?

224:名称未設定
08/12/15 23:29:47 vbtDqJru0
毎回load script命令で読み込んでみたら?



225:名称未設定
08/12/15 23:57:42 5awCoNJ20
> on clicked theObject
>
> で呼ばれるスクリプトが a.applescript だったとしますよね?
> よく分からないですが、多分ボタンをクリックすると a.applescript を読み込んで
> インスタンス化し、そのスクリプトオブジェクトの clicked 関数を呼んでる訳ですよね?
>
> そのスクリプトオブジェクトを事前に知りたい………と言ったらおかしいかもしれないですが、

うん、それはおかしいな
イベント発生時にどのスクリプトのハンドラが呼ばれるかは Interface Builder 使って自分で設定するんだから、
事前に知りたいも何もない

仮に以下の様に設定したとする

button "A_btn" of window "A_win"
-> AppleScript タブで「a.applescript」と「action-clicked」を選択

button "B_btn" of window "B_win"
-> AppleScript タブで「b.applescript」と「action-clicked」を選択

この場合、button "A_btn" を押すと「a.applescript」の「on clicked」が呼ばれ、
逆に button "B_btn" を押すと「b.applescript」のの「on clicked」が呼ばれる

んで、厳密にはウィンドウじゃなくてボタンレベルだけど、これでやりたい事は解決できんじゃないの?

226:名称未設定
08/12/16 00:26:15 M9H7jOFz0
MacOS10.5.5です。
bookmarksフォルダにある全てのファイルについて、スポットライトコメントをリスト形式で得たいのですが、上手くいきません。よかったら教えてください。

set aRootFolder to "Macintosh HD:Users:hoge:Bookmarks"

tell application "Finder"
activate
tell folder aRootFolder to set aFileList to name of every file
repeat with aThisFile in aFileList
tell aThisFile to set aCommentList to (get comment of aThisFile as list)
end repeat
end tell

aCommentListの中には以下のようなものが入っているようです。コメントではなくファイル名が入ってしまっているようです。(ScriptDebuggerによると)
note of item 2 of {
"ほげ.webloc",
"ふが.webloc"
}

227:216
08/12/16 00:29:49 2FbCdVtl0
>>224
それでは毎回別のスクリプトオブジェクトが生成されてしまうのでダメだと思います…。

>>225
ボタンクリックによって呼ばれるスクリプトを指定できるのは分かりますが、
スクリプトオブジェクトを指定できないのが困りものなのです………。

多分、言いたい事が伝わってないですね。すみません。
本当に説明が難しくて…。色々やっているうちに AppleScript のバグじゃないかと
思ってきたんですが…。クリックなどのハンドラ内では global な値はそもそもが
いじれない気がします。

228:名称未設定
08/12/16 00:41:27 Q0LU9beE0
>>227
「AppleScript Studioでスクリプト分割に影響されない形でアプリケーション
グローバルが使いたい」ってことじゃないの?
だったらuser defaults使えば? これなら保存も効くし。

229:名称未設定
08/12/16 00:57:28 HLbSKQnW0
>>227
失礼、違ったか
そもそもスクリプトオブジェクトが出てくる辺り全く意味わからんので、俺程度ではもう無理だな

> クリックなどのハンドラ内では global な値はそもそもがいじれない気がします。
バグか仕様か知らないけど、イベントハンドラ 内で定義した変数は例えトップレベルで global や property 宣言してあっても、
イベントハンドラ内ではローカル変数扱いだった気がする

>>228の言うuser defaultsを使うか、UI内の値にするとか、
スクリプトの外側に求めるしか無いんじゃないかな

230:216
08/12/16 01:06:46 2FbCdVtl0
>>228
やっぱり最終的にそうなっちゃうんですかね。
実はさっき諦めてそういう形にしました。

なんか不便ですねぇ(^_^

>>229
おぉ!そうなんですか。
そういう仕様だったんですね………。

231:名称未設定
08/12/16 02:01:58 LE4/gpv90
>>226
>tell folder aRootFolder to set aFileList to name of every file
「ファイル名」そのもの取得しちゃってる。name of はいらない。

>repeat with aThisFile in aFileList
>tell aThisFile to set aCommentList to (get comment of aThisFile as list)
>end repeat
繰り返して追加するなら最初に
set aCommentList to {}
としておいて
repeat内に
set end of aCommentList to comment of aThisFile

一気にやるなら
set aRootFolder to "Macintosh HD:Users:hoge:Bookmarks"
tell application "Finder"
set aCommentList to (comment of files in folder aRootFolder) as list
end tell

自分のトコTigerなので違ったらゴメン

232:名称未設定
08/12/16 02:35:02 LE4/gpv90
あ、よく見たらカッコもas listもいらんかった。
>>226のスクリプトの頭の数行でファイル名をリストとして取得できてるんだから
name ofをcomment ofに変えるだけでOKだね。

set aRootFolder to "Macintosh HD:Users:hoge:Bookmarks"
tell application "Finder"
activate
tell folder aRootFolder to set aCommentList to comment of every file
end tell

233:名称未設定
08/12/16 09:19:04 G3m1InAp0
>>232

ありがとうございます、上手くいきました。示唆に富むレスを頂き、ありがとうございます。

234:名称未設定
08/12/16 21:56:13 sc3SpK6H0
scroll view の中にある text view のスクロール具合を指定したいのですが、
どうすればできるでしょうか? 要するにテキストが追加されると一番下まで
スクロールしたいのですが…。

かれこれ2日ほど悩んでます(;_;)

235:名称未設定
08/12/16 23:02:54 sc3SpK6H0
追記:

scroll to bottom はメッセージを認識できない、と出てしまい、
vertical scroller の float value を 1.0 にしてもスクロールバーだけが移動し、
内容が移動してくれませんでした。

236:名称未設定
08/12/16 23:16:41 sc3SpK6H0
できました!!

URLリンク(developer.apple.com)

ここによると、scroll to bottom とかはまだ正確にサポートされていないとの事で、
以下のコードでできました。

set theLength to length of (contents of (text view "xxx" of scroll view "xxx" of window "xxx") as string)

--スクロール
tell text view "xxx" of scroll view "xxx" of window "xxx"
 call method "scrollRangeToVisible:" of object it with parameter {theLength, theLength}
end tell

237:名称未設定
08/12/18 14:11:24 3s+aMYPz0
>>203

オートメタースレより
もういらんかな?
290 名前: 名称未設定 Mail: sage 投稿日: 2008/12/12(金) 15:43:26 ID: DrSmwv6L0
バラのPDFを一個にしたりしてる。

238:名称未設定
08/12/18 23:02:48 vAyDBqey0
>>237
>バラのPDFを一個にしたりしてる。
これは複数のPDFファイルをひとつにまとめるって意味じゃないかな?

Safari以外のツールを使っても良いなら、シイラには[1枚のPDFで出力]ってメニューがあるから使えるかも。
あと、同じHMDTのCoralだと、コマンドラインでURLを与えてpdfオプションを付ければ、
一枚で出力される。ただ、高さの計算がおかしいみたいで、ソース落として手直しが必要かも。

239:名称未設定
08/12/22 01:14:24 YcErVovj0
AppleScriptを使って、たとえば12月分のiCalイベントの項目をテキストに書き出す、
というのはやり方を見つけたのですが、これを普通のテキストではなくて、
ics形式で書き出す方法をご存知の方はおられませんか。
あるカレンダーのある期間のものだけ、イベント名をすべて変更して
かつメモ欄に同一文をつけ足してから別のMacのiCalへ持っていきたいので
ただのテキストへ書き出すのではちょっと使いにくいのです。

240:名称未設定
08/12/22 04:58:21 JbjbTgRh0
普通に「ファイル-書き出し…」で ics 形式で書き出せるけど?

ちなみに第2文以降は簡単にAppleScriptでできた.
ただし,親カレンダーを変更するのはわからなかったから,あらかじめ対象の
イベントを書き出し対象のカレンダーに移動しておいてね.

241:名称未設定
08/12/22 14:53:42 meU4MAq/O
うちではその方法では、12月分だけとかは書き出せないなあ
カレンダー内のすべてのイベントが書き出されてしまう

242:名称未設定
08/12/23 15:34:06 4qnl3VEI0
>>241
うん、だから12月分のイベントは別カレンダーに移動して、移動した先のカレ
ンダーを書き出す、ってことじゃない?

ちなみに、イベントの移動ってのは自動でやるのは結構大変(同じプロパティ
を持つイベントを作成するという形になる)

243:239
08/12/23 16:11:34 Xd5k/12X0
239です。質問の意図がわかりにくかったようですみません。
AppleScriptによって一番自動化したいのは、「12月分のイベントをics形式に書き出す」
という部分です。現在の使い方だとそこを手動でやるのではあまりメリットがないので
質問させていただきました。そこ以外はできるというのは把握しています。

現状は、すべてのイベントが書き出されたicsファイルを、LightWayTextで開いて
LightWayTextのマクロ機能で一気に処理しているのですが、不要な部分を取り除くのに
だんだん時間がかかるようになり、ここを改善したいというのが目的です。
AppleScrpitでこういった形で書き出せてしまえば、LightWayText(私の環境ではやや不安定)の
マクロを使わなくても、そのままAppleScriptで処理できてしまうので、いまより便利になるな、
という公算でした。

必要な部分だけ別のカレンダーへ移動して、というのは、あまり考えていませんでした。
まず、ダミーのカレンダーを作ってそこで処理を行い、最後にそれを削除して終わる、ということですよね。
うーん、ちょっと考えてみます。ありがとうございました。


244:名称未設定
08/12/23 17:35:12 4qnl3VEI0
>>239=243
ここを参照して、普通のイベントに対応できるようにすればいいんじゃね?
URLリンク(blog.deadbeaf.org)

245:名称未設定
08/12/25 15:33:22 6FISXrhM0
data utxtを使ってユニコード16進数から文字を出すことは可能ですが、
逆に文字からユニコード16進数を出すことはできますか?

246:名称未設定
08/12/25 20:27:58 lRBhhS9Q0
>>245
set slct to "字"
set unihex to do shell script "echo " & quoted form of slct & "| iconv -f UTF-8 -t UTF-16 | perl -pe '~s/([^?w ])/¥"%¥".unpack(¥"H2¥", $1)/eg;' | sed s/$'%0a'// | sed s/'%'//g | sed s/feff// | sed s/$'00'//"

自己レスで考えてみたけど、スマートじゃないね・・・。
perlがよくわからないので

247:名称未設定
08/12/26 02:24:46 pDJlSCTf0
>>245
>108 ので10進とって16進に変えたら?


248:名称未設定
08/12/26 09:41:34 JIlTPKw20
>106 の逆。decからhex
set decNum to id of "亜" --leopard only
set hexNum to do shell script "ruby -e 'p " & decNum & ".to_s(16)'"

249:名称未設定
08/12/26 12:20:08 E9x+Te7w0
246ですが、tigerなのでidは使えないのです。
で、5桁の文字にも対応するようにちょっと改善

set unihex to do shell script "echo " & quoted form of slct & "| iconv -f UTF-8 -t UTF-32 | perl -pe '~s/([^?w ])/¥"%¥".unpack(¥"H2¥", $1)/eg;' | sed s/'%'//g | sed s/0000feff000// | sed s/$'0000000a'//"

250:名称未設定
08/12/26 22:34:33 foTzQ6520
個人的に以前 id of 同等機能をTigerでやる必要があった時には、
hexdumpとprintf使って無理矢理やったな

perlで出来るんならそっちのが万倍早そうだけど

251:名称未設定
08/12/26 23:05:19 +dIEzKNr0
set theText to "漢字あいうアイス123abc☆○abc"
set hexString to do shell script "perl -e 'use Encode qw(from_to); $t = $ARGV[0]; from_to( $t, q{utf-8}, q{utf-16} ); $t =~ s/(.)/unpack(q{H2}, $1)/ge; print $t;' " & quoted form of theText
log "hexString:" & hexString
log "date utxt:" & (run script "«data utxt" & hexString & "» as Unicode text")

feffはそのままでもutxtで戻せる気がするけど消した方がいいのかな?


252:名称未設定
08/12/30 18:31:49 I5OBkT890
しかし、do shell script を多用するなら、もとのスクリプトをそっち (sh/perl/ruby 等)
で書いて、Apple Event の部分だけスクリプトブリッジを使ったり osascript で
呼んだ方がよかったりして。

パフォーマンスとかによってはそれでも AppleScript メインで書いた方がいい場合も
あるのかもしれないけど....
あるいは、AppleScript を純粋にスクリプト言語として見た場合の優位性ってある?

253:名称未設定
08/12/31 03:31:04 Mm1sm4sY0
対応アプリケーションの制御 かな

OS 10.5から
#!/usr/bin/osascript
で始まる、コマンドラインで実行できるAppleScript書けるようになったから
他のスクリプト言語との親和性を高めようとはしてるのかなと思う

254:名称未設定
08/12/31 11:11:52 Ozabx93y0
自分の場合,入出力がGUIでできて,簡単に.app形式のアプリにできる,という点が大きい。
一般人に使ってもらうためのちょっとしたツールを作るには,ターミナルを見せないことが望ましいからね。

255:名称未設定
08/12/31 16:08:22 b2MY+RQ70
他のアプリとの連携はASの優位性だと思うが,あまり活用してアプリを作る人はいない。
(DTP系とか一部のソリューションをのぞいてね)

256:名称未設定
08/12/31 18:29:43 oTst3lHO0
自分用に作るAppleScriptはそれが多いんだけど、
それは一般性があるわけじゃないから公開はできなかったりします。

257:名称未設定
08/12/31 18:40:05 AjDOZHKY0
デバッガが本人の資質だったりするからな。
おのずと規模がでかいと手間取るし、作る気もなくなる


258:名称未設定
08/12/31 19:03:18 Sltoo2eV0
>>255
AppleEventでアプリ制御する場合はC++でごりごり書いちゃうね。
AppleScriptだとUnicode処理とか細かい所がうまく書けない。プロトタイピングや
テスト時はAppleScriptも使う。
>>257
ScriptDebugger

259:名称未設定
09/01/01 06:26:57 gq08o8Xj0
AppleScript の良さは、
本来自分がやるべき単純作業をコンピュータにやらしてらくちんできること
使用頻度の少ないものでも採算がとれるケースが他の言語に比べて圧倒的に多いこと
おおよそなんでもできること ←ちょっと語弊があるか、要はできる奴にやらせるということ

260:名称未設定
09/01/01 13:11:38 r11gX/B20
>>252
>AppleScript を純粋にスクリプト言語として見た場合の優位性
かなり自然言語に近い。
でもこれ英語を話す人じゃないとメリットじゃないんだよね。

261:名称未設定
09/01/01 14:53:29 g3+YIBVs0
でも、tell application "Finder" to activate
って、toの前後が逆のような気がする(日本語の語順っぽいから、日本人的にはOK)。

262:名称未設定
09/01/01 16:37:25 /KkdaRW00
>>261
そう、Mac の操作は「このファイル」を「コピーする」で日本語的。
英語は「コピーする」「このファイル」なんだよね。

263:名称未設定
09/01/01 17:51:51 yGgn93fb0
自然言語に近いっていうことは英語ネイティブにとってどんな利点があるのかな?
いろんな表現を許す自然言語から離れて、文法的な曖昧さのない人工言語で
プログラミングができるほうが、英語ネイティブにとってもいいんじゃないかと思っちゃうんだけど…。
どんな表現でもこちらの意図をくんでインタープリタが機械語に変換してくれるんならいいけど、
結局はこうじゃないと通じない、っていうのが決まってるわけだしね。

>>261
この場合の to はプログレッシブ英和でいうところの「状態境遇の変化の結果」
ってやつで、これはこれで自然な英語なんじゃないかな。
sing a child to sleep|歌を歌って子供を寝かせる

>>262
最初の本格的な GUI を搭載したパソコンとして Macintosh が発売されたときに、
まずマウスで操作の対象となるアイコンを選択してから、メニューで「コピー」という操作を選ぶ、
というのがオブジェクト指向だとか言われていたみたいだね。

264:名称未設定
09/01/01 19:06:18 ckwdD4I/0
「何を」「どうする」の順で操作するのがオブジェクト指向的だったんじゃないか?
マウスでアイコンをクリックしてからコマンドを選択する。
対象となるアプリを指定してから動作内容を記述するのはちゃんと伝統に則っていはいるように思われる。

ところで,AppleScript日本語について誰も言及しないのはなぜだ。



265:名称未設定
09/01/01 19:27:30 fMNW6y3O0
日本語でスクリプト書いてる人ってどれくらいいるんだろうね
何一つメリットが思い浮かばないんだけどさ

266:名称未設定
09/01/01 20:14:26 gq08o8Xj0
>>263
書く方はそうだろうけど
読むのは楽だよ


267:名称未設定
09/01/02 02:22:25 sK+2ziH80
>>263
>まずマウスで操作の対象となるアイコンを選択してから、メニューで「コピー」という操作を選ぶ、
>というのがオブジェクト指向だとか言われていたみたいだね。
つかそれこそオブジェクト指向だけど。
Cの言語仕様の一つがオブジェクト指向とか勘違いしてないよね?

>>264
オブジェクトに指令を出すとその指令をどう実行するかはそのオブジェクト自身が知っているという事。
表層はオブジェクト指向だけど内部的にはオブジェクト指向的。

268:名称未設定
09/01/06 17:29:19 7WvgjDPx0
コマンドラインでのオペランドの並び順はバラエティにとんでるからねえ。
CP/Mの時のPIPコマンドとMS/DOSでは逆だったじゃない。

>>267
>オブジェクトに指令を出すとその指令をどう実行するかはそのオブジェクト自身が知っているという事

知らないメッセージは処理しようがないわけで、それはオブジェクトに限らずプログラム一般に言えそう
だから、継承という考え方も加えとかないといかんのじゃない?

初代Macのオブジェクト指向風って、smallTalkで書かれたaltを模したってところじゃないかな。

269:名称未設定
09/01/06 17:39:55 9hT81oaU0
>>268
知らないメッセージは発行自体が出来ない。何ができて何ができないかはオブジェクトを選択したときの
メニューに反映される。

つかオブジェクト指向の概念の本とかみんな読まんのね。有名な部長と秘書の話とか。
実装ってサブセットに縛られ過ぎ。

270:名称未設定
09/01/06 17:45:50 x9TH+iw90
>>264
以前、AppleScriptを日本語で書くというのがとにかく嫌だった。
なんでこんな馬鹿なことをさせるのかと腹が立った。
プログラムはある法則で書かざるを得ないんだから、そのルールは嫌でも覚えなければならない。
それが自然な日本語に近いかどうかより、覚えやすく、書くのが楽なほうが余程良い。
おまけに国依存のソースコードになる。(勿論内部では同じ扱いになるということは承知しているが)
そういう意味では英語(というよりアルファベットかな)のほうが遥かに分かりやすく能率がいい。
OS Xで、やっと英語が標準になってホッとした。

271:名称未設定
09/01/06 19:25:04 O1FFwiLj0
日本語でしか AppleScript を書けなかった俺が通りますよ…

272:名称未設定
09/01/06 21:07:21 clcxNgKA0
>>270
純粋に好奇心で聞くんだが、「以前」はどうしてわざわざ日本語で書いていたの?

273:名称未設定
09/01/06 21:14:48 k8xAJtIz0
>>272
AppleScriptでゼンマイびゅんびゅん!! のソースが日本語だったから。

274:名称未設定
09/01/06 22:47:07 Lek/xeGZ0
>>268
> smallTalk

Smalltalkはこれで一語だからtを大文字にするのはヤメれって口をすっぱくしているのに
その上わざわざSまで小文字にするってどんだけ嫌がらせだよ。w

275:名称未設定
09/01/06 23:08:01 podRJ9OX0
AppleScript日本語が出る前からAppleScriptを書いていたから,今でも英語。

276:名称未設定
09/01/07 08:30:53 2paAUfaL0
>>274
おお、まさに小言。

277:名称未設定
09/01/07 09:11:51 NmRz++hy0
>>274
Cocoaプログラマならそうしたくなるなw

278:名称未設定
09/01/07 09:25:59 7Pev0izK0
>>276
うまいこと言うなきみぃ

279:名称未設定
09/01/07 10:06:57 Tr3RL5ZE0
>>273
なるほど。理解。
あの本の(せい|おかげ)で日本語で使ってた人を「ショーダー」と呼ぶことにしよう。

280:名称未設定
09/01/12 01:10:40 AhGlsvAA0
以下,LeopardのTerminalで動作することは確認しています。

perl
$_='Yaeeeh!';
if (/Yae+h!/){print "マッチしました。\n";}

このPerl文をdo shell scriptで実行させるためには,どうやって書くのでしょうか。

281:名称未設定
09/01/12 16:40:31 1vC0p+Pe0
>> 280
自己レス。Perlはまだよくわからないので,デリミタで行うことにしました。


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