2013年01月新・mac135: AppleScript アップルスクリプト 質問、発表 5 (482) TOP カテ一覧 スレ一覧 2ch元 削除依頼
スレッドを立てるまでもない質問 Part84 (758)
【CSシリーズ総合】Adobe Creative Suite 42【Mac】 (236)
誰か、いらなくなったMacを下さい【7台目】 (811)
【Mac】BeBeBe Chocolatier 30【ベルギーチョコ】 (735)
Mac OS X初心者質問用スレ 27.7 (366)
MacOSX対応のプリンタとスキャナ 2 (599)

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


1 :2012/02/27 〜 最終レス :2013/01/16
質問、発表どっちでもスレ。
■注意
安直なスクリプト作成依頼、丸投げ、「こういうの作ってください!」はお断り。
わからない点、エラーが解決できない点についてはスクリプト片を添えて質問すること。
OSバージョンも忘れずに。
■参考
AppleScript ヘルプ
http://docs.info.apple.com/help/guide.html?path=AppleScript/2.1/jp/
発表まとめ (過去ログなども)
http://members.at.infoseek.co.jp/obto/script/script.html ※消失?
MacWiki - AppleScript
http://macwiki.sourceforge.jp/wiki/index.php/AppleScript
AppleScript PARK
http://www.tonbi.jp/AppleScript/
AppleScript Lab.
http://www.drycarbon.com/applescript/
TN2065: do shell script
http://developer.apple.com/jp/technotes/tn2065.html ※消失?
http://developer.apple.com/technotes/tn2002/tn2065.html
AppleScript: The Language of Automation
http://www.macosxautomation.com/applescript/
AS Hole(AppleScriptの穴)
http://piyocast.com/as/
■過去スレ
1 http://pc11.2ch.net/test/read.cgi/mac/1174045850/
2 http://pc11.2ch.net/test/read.cgi/mac/1197443062/
3 http://pc11.2ch.net/test/read.cgi/mac/1223026902/
4 http://anago.2ch.net/test/read.cgi/mac/1256127156/

2 :
1 Oats

3 :
1乙
さっそく今日どうしてもできなかったのでだれかヒントをくれるとありがたいのですが。
フォルダを参照するときにPOSIX形式のパスがtextで与えられたとき、それから
普通のalias参照に戻して変数に格納するにはどうすればいいんでしょ?
applescript studioでの話です。ファイルなら 〜 as POSIX fileとかだと思うけど、
フォルダの場合はどうすれば? POSIX path of 〜 として変数に格納しようとしても
エラーが出るなどしてだめのような、、、、、、。

4 :
1おつ
POSIX file thePOSIXPATH
file だけど thePOSIXPATH の指すのがディレクトリでも大丈夫
POSIX path of ...
はPOSIXパスへ
POSIX file ...
はaliasへ
なんじゃそらっw

5 :
>>4
なんか俺、ものすごく基本的なことで間違ってる?
tell application "Finder"
set a to "/User/xxxx/Desktop/"
set POSIX file a
open a
end tell
とすると開けないし、そもそもイベントログ見ても get POSIX file〜でエラー出てる。
POSIX fileの文字列は同様にして
tell application "Finder"
set a to selection as alias
set a to POSIX path of a
end tell
で得た文字列なので間違いないと思うんだけど、、、、、、。

6 :
間違えました。
tell application "Finder"
set a to "/User/xxxx/Desktop/"
set a to POSIX file a ←この行
open a
end tel
でした。l

7 :
もひとつ。
よくわからないのだけど、フォルダ参照が入った変数をuser defaults で
プロパティリストに書き出すと、
/User/xxxx/Desktop
というように最後の/が記録されてない。サンプルコードとか見ても
そのままdo script shell的なことをするにはOKみたいだけど、applescriptエディタの
出す結果とplistに書かれている形が違うのは気味が悪いんだけど。正しくは
最後に/が入るんだと思うけど、なんでそうなってないんでしょう???

8 :
すみません。この件で悩みすぎてカゼをこじらせているので寝ます。ズビ。

9 :
>>5,6
なんかFinderが余計なことをしている
POSIX file ... を tell application "Finder" の外(前)に置けばよろしい
>>7
そういうもんじゃないの
ディレクトリを示すのに最後の'/'が必要というわけじゃなく、また、最後に'/'が付いていないのはいくらでもあるので

10 :
set a to POSIX file a
を tell application "FInder" 内のままで
tell me to set a to POSIX file a
としてもおけ
他にもっとカッコいい書き方あるかな??

11 :
set a to a as POSIX file

12 :
それはカッコいいっ!ぐぬぬっw

13 :
fileキーワードの解釈が衝突してるんだろうね。my付けてglobalな定義優先すれば良い。
homeのパスも直書きせずこんな感じで。
tell application "Finder"
set homePath to POSIX path of (home as alias)
set aPath to homePath & "Desktop/"
open my POSIX file aPath
end tell

14 :
いろいろ勉強になります。こちらのことを参考に本日もこじらせて参ります。
とかいいつつ、プロパティリストに登録するときにPOSIX形式でなく、aliasを
テキスト形式で保存することで、回避しちゃったけど、試してみます。
テキスト形式から復元するときは日本語注意だけど。うちだけかな?

15 :
>>13
それはそれでカッコいいねえ。他でも使えるしぃ
一つ賢くなれた気がする。どうもっす

16 :
昔 POSIX file ... でエラーになるものが ... as POSIX file で上手く動いたのでそれ以来後者の書き方を使うようにしていたけど、
>>13が理由だったのかな
>>7
StandardAdditions の POSIX file クラスの属性である POSIX path は何故か末尾にスラッシュが付くね
一方で System Events の disk item クラスの属性としても POSIX path が存在しているのだけど、こちらは末尾にスラッシュが付かない
スラッシュは区切りであって、フォルダやディレクトリそのものを意味する訳じゃ無いので、本来は要らないものだと思う
ちなみに前者はテキストに対しても実行できる様になってるので、
実際には存在しないパスでも変換できるという利点があったりはする
>>14
コロン区切り式でテキスト保存すると、同名ボリュームが複数ある場合なんかに問題が無い事も無い
とはいえまぁレアケースだとは思う

17 :
on awake from nib theObject
tell theObject to register drag types {"file names"}
end awake from nib
on drop theObject drag info dragInfo
set dataTypes to types of pasteboard of dragInfo
if "file names" is in dataTypes then
set preferred type of pasteboard of dragInfo to "file names"
set theFiles to contents of pasteboard of dragInfo
set theFiles to POSIX file theFiles
tell application "Finder"
set theFiles to theFiles as alias
duplicate theFiles to desktop
end tell
end if
return true
end drop
あーもうわからん。テーブルやBoxにドラッグアンドドロップしたら
そのオブジェクトをデスクトップにコピーするスクリプトを初歩の初歩
としてサンプルスクリプトを参考にいじっているのだが、うまくいかんorz
上の例でなんとかコピーはされるのだが、なぜかたった数十字のテキスト
ファイルでも20秒くらい時間がかかる。明らかにおかしい。でも
どこが悪いかわからない。duplicateもtell "Finder"しなくてもいいような
気がするけど、こうじゃないとエラーを吐く。なんで???

18 :
Drag and Drop及びAppleScriptの処理(tell application) はアプリケーション間通信(AppleEvent)を通じで行なわれている
Finderはアプリケーション間通信は1度には1つしか行なわない
FinderからそのAppleScriptアプリへ通信中(on drop を抜けるまで)に、そのAppleScriptアプリからFinderと通信(tell application "FInder")を行なおうとするので、Drag and Dropの通信中なので止まる
Drag and Dropの通信が時間切れになって、やっとこさduplicateが行なわれる
てとこかなあ
on drop で tell application "Finder" せずに、property に対象をセットし、on idle でそれをチェックして tell application "Finder" するとスムースに行くよ(1秒間隔のチェックなのでちょっと間があるけど)
AppleScriptで遅延ハンドラ呼び出しってなんかあったかなあ

19 :
あと、
set theFiles to POSIX file theFiles
って、地道に1個ずつ処理しなければなさげだけど?
こんなんできんのかっ!と思ったけど、複数ドロップだとエラるようだけど

20 :
StandardAdditions のライブラリより
> POSIX file n : A file object specified with a POSIX (slash)-style pathname
そりゃそうだろうね
あとdupulicateはFinderのcommandだから当然tellってないと無理

21 :
非常にキケンなコードができましたw ほかへの影響はまったく考慮なしw
これ、実装してみようかなw 10ファイルくらいなら問題なさそうw
on awake from nib theObject
tell theObject to register drag types {"file names"}
end awake from nib
on drop theObject drag info dragInfo
set dataTypes to types of pasteboard of dragInfo
ignoring application responses  ←危険な香り
if "file names" is in dataTypes then
set preferred type of pasteboard of dragInfo to "file names"
set theFiles to contents of pasteboard of dragInfo
set FileList to {}  ←適当に複数ファイルも対応してみました
repeat with aFile in theFiles
set aFile to POSIX file aFile
set end of FileList to aFile
end repeat
tell application "Finder"
duplicate FileList to desktop
end tell
end if
end ignoring
return true
end drop
>>20
duplicateはFinderのコマンドというのはなんとなく分かるのですが、
自分が作ったアプリの用語辞書にはduplicateが載ってる。
それってつまり、もともとのテンプレートがduplicateに対応している
のかな、と。

22 :
Finderに、じゃこれらコピっておいてってメモ置いてって、あとは知らんふりってだけなので、それでもいいんじゃないの
Finderでduplicateに失敗しても特になにするわけでもないから ;)

23 :
ちなみに、AppleEvent(をFinder)は一度には一つだけ処理しないけど、キューはあるから、どこどこメモ置いていっても構わないよ
例えば
repeat with theItem in FileList
duplicate theItem to desktop
end repeat
でも構わない(まあ、あんまりキューに貯めるのはよくないし、これだと、エフェクト音が煩いしw)
なので特にそれだけでは危険というわけでもなく、単にエラー処理ができないってだけだね

24 :
全部
ignoring application responses
するから怖い訳で、tell "Finder"のとこだけignoreすりゃいいかな。
それでも動く模様。これならファイルコピーの部分だけケアすりゃいいから、
大事にはいたらない。Rれでいこう。ハンドラとハンドラのFinder上の
処理がぶつかってエラーというのはよくあるけど、こんなこともあるんですね。
ありがとうございました〜♪

25 :
>>21
確かにduplicateは載ってるね
だけど比べてみると多少内容は違うみたい
FinderのStandard Suite
>duplicate v : Duplicate one or more object(s)
>duplicate specifier : the object(s) to duplicate
>[to location specifier] : the new location for the object(s)
>[replacing boolean] : Specifies whether or not to replace items in the destination that have the same name as items being duplicated
>[routing suppressed boolean] : Specifies whether or not to autoroute items (default is false). Only applies when copying to the system folder.
>[exact copy boolean] : Specifies whether or not to copy permissions/ownership as is
>→ specifier : to the duplicated object(s)
Finder以外のStandard Suite
>duplicate v : Copy object(s) and put the copies at a new location.
>duplicate specifier : the object for the command
>[to location specifier] : The location for the new object(s).
>[with properties record] : Properties to be set in the new duplicated object(s).
objectをコピーする点は変わりないのだけど、じゃあobject=fileとかの定義があんのかってーと、
自作アプリには無いんじゃね
ちなみにSystem Eventsは後者でしかもfileやらfolderの定義もあるのでじゃあduplicateで複製出来るのか?と思ったら出来ないし
その辺の理屈はよくわからん

26 :
ちょっと環境がないから分かりませんし、スレ違いかもしれませんが、ここで質問。
OS10.5でXcode3を使ってapplescriptでプログラミングしています。
OS10.4をターゲット?にしてコンパイルして10.5と10.4でプログラムを
動かしていました。しかし、10.5のほうは快調に動いていますが、
10.4でよく分からないのですが、特定の条件でエラーを吐きます。
Finder can't get Unknown objectとかなんとか。
実際にはDVDなどのメディアをFinder上から取得する動作で
詰まっているようです。
tell application "Finder"
set DiskDVD to selection as alias
end tell
というようなことをしているのですが、いろんな種類のメディアで
エラーになったりならなかったりします。考えたことは
続きます。

27 :
・特定のメディア(DVDならDVD、MOならMOなど)に起因するのでは
→多種類にわたりエラーが出る。
・マックのデータをウインドウズで焼くなどしてリソースフォーク系が変になっている。
→そうなっていないであろうデータでも発生している。
・メディアのフォーマットが変
→「情報を見る」で見る限りはMacOS拡張で変わりなし。
いずれのディスクも開発環境である自分の10.5のマシンではまるで問題ないのですが、
10,4のマシンだと、たまにエラーが起きます。
自分のマシンで該当箇所をデバッグできればいいんですが、10.4のマシンにXcode3は
入れられませんし、自分のマシンでは快適に動きます。
素人サンデープログラマーなので正直これ、どーすんの? って感じです。
10.4をターゲットにしてコンパイルしてるんだからapplescriptだったら簡単にできることが
なんでできなくなるのか不思議でたまりません。しかも10.5ではすいすい動きます。
こういうときはやはり10.4にXcodeを入れてデバッグするしかないんでしょうか。

28 :
入れられるなら入れちゃえばいいんじゃないの?と思う一方、
エラー箇所が特定できてるなら得るものないかなとも思う
10.5のリリースノート漁るのもいいんじゃないの?とも思うし
applescript-studioやapplescript-usersのML漁るのもいいんじゃないの?とも思う

29 :
>>26,27
AppleScriptはFinderにAppleEvent送ってるだけだよ。
問題があるとしたら原因はFinderの方。
データがキャッシュされてないと上手く取れなかったりとかFinderはバギーだった
記憶あるから、おまじないに一回update呼んでみるとか。

30 :
Finderにイベント投げてるだけならASSでないとダメってわけじゃないんだから、
必ずしもXcodeが必要とは限らんだろう
まずはスクリプトエディタで試せばいいんじゃね

31 :
今頃遅レスで申し訳ないが、
>>29
updateなんつーコマンドあるんですね。今度ちょっと試してみます。
>>30
それがスクリプトエディタで試すと問題は起きないのにXcodeで組んだものだと
該当部分でエラーがでているような気がします。
しかし、こんなに便利な言語なのにXcodeで切り捨てなんてさびしい限り。
Automatorに合流しろってことだとは思うけど、どうにもあれは好きになれませんorz

32 :
でも、Cocoa-AppleScriptの方がなんでもできちゃんだよね。慣れればより簡単に
慣れるまでが大変だと思うけど
Automator はあれはあまり使えないw

33 :
もうプログラム自体もおぼつかない初心者も初心者なんだけど、あらためてAppleScriptってなんでも
できるんだね。うちの会社にも100台くらいはMacありそうだけど、ぜんぜん使われてないよorz
AS使えば、まだまだ省力化、効率化できるなあ、と思った。でも、それを俺がやったって出世するわけ
でもないし、新しいものを導入したらトラブルは必然だし、楽になったらクビ切られる人は怒るだろうしねw
ところで、ASとXcodeを使って、それなりのアプリを作ったんだが、次は何を学べばいいんだろう?
Objective-Cの本とかは買ってきて読み始めようか、というところなんだけど、今まで作ってきたコード資産
をうまく活用したり、うまくASと連携させたり。どういう風にバランスをとればいいか分からないんだけど。
どなたか勉強の指針を教えてください。

34 :
なんか周りの見えないバカが湧いてる?

35 :
>>31
tell application "アプリの名前かパス"
...
end tell
てな感じで囲んでやれば、Xcodeなしでもテスト出来るよ
イベント呼ばれる部分は無理だけど
Automatorはあんま関係無いよ
切られたAppleScript Studioの代わりはAppleScript Obj-Cであって、
どちらもAppleScriptには違いない

36 :
>>35
そうだよね、時代はAppleScript Obj-Cだよ、と思ったら手持ちのOSが10.5だったでござる、の巻

37 :
Mail.appで受信ボックスの未読メールを全て選択して.txtに書き出したいのですが、
「未読メールを全て選択」という所がどうやればいいのか分かりません。
check for new mail for account "accountname"
keystroke "1" using {command down}
こんな感じに、メールを受信して受信ボックスを開いたところまではできたのですが、未読メールを全て選択するにはどうすればいいでしょうか?
.txtで書きだすのは、
System Eventを使って
pick menu bar 1's menu bar item "ファイル"'s menu "ファイル"'s menu item "別名で保存..."
delay 1
keystroke "UnreadMail"
keystroke return
こんな感じに書きました。

38 :
tell application "Mail"
set MessageList to (every message of mailbox "INBOX" of account accountname whose read status is false)
set theText to ""
repeat with theMessage in MessageList
set theText to theText & content of theMessage
end repeat
end tell
みたいな感じで

39 :
>>38
ありがとうございます。完璧です。

40 :
Skypeでapplescriptの設定する方法教えてくれるかたいませんか?
ID co-ca-co-la.jp

41 :
美人集め ※ワールド非対応
set BIJIN to "bijin"
display dialog "エリアは" default answer "jp"
set AREA to text returned of result
display dialog "開始時間は" default answer "0000"
set STARTTIME to text -4 thru -1 of ("0000" & text returned of result)
display dialog "終了時間は" default answer "2359"
set ENDTIME to text -4 thru -1 of ("0000" & text returned of result)
set H to text 1 thru 2 of STARTTIME as number
set M to text -2 thru -1 of STARTTIME as number
tell application "Finder"
set picFolder to folder "Pictures" of home
set bijFolder to folder BIJIN of picFolder
if not (exists bijFolder) then make new folder with properties {name:BIJIN} at defFolder
if not (exists folder AREA of bijFolder) then make new folder with properties {name:AREA} at bijFolder
end tell
repeat
set HH to text -2 thru -1 of ("0" & (H as text))
set MM to text -2 thru -1 of ("0" & (M as text))
set CURRENTTIME to HH & MM
do shell script "curl -o ~/Pictures/" & BIJIN & "/" & AREA & "/" & CURRENTTIME & ".jpg -e http://bijint.com/jp/ http://www.bijint.com/" & AREA & "/tokei_images/" & CURRENTTIME & ".jpg"
if CURRENTTIME = ENDTIME then exit repeat
set M to (M + 1) mod 60
if M = 0 then set H to (H + 1) mod 24
end repeat
自分の環境だと1日分で10分ちょい

42 :
すいません、全く畑違いの職種なんで、的を得てないかもしれませんが質問お願いします
PDFファイルやJPGファイルが200〜300くらいあって、その情報をエクセルで管理しているのですが
Finderの「情報を見る」で表示される「詳細情報」をAppleScriptから取得する事は可能でしょうか
名前や一般情報の種類やサイズはitemのpropertiesで取れるのですが…

43 :
>>42
そこの情報はSpotlightが集めたメタデータを表示してるから、mdls使えば
得られるよ。shellからでも良いし、do shell script "mdls うんたら"みたいに
AppleScriptからも得られる。
Terminalでmdlsいじってみると勘所はつかめると思う。

44 :
>>43
遅ればせながら情報ありがとうございます
全くの初心者の為、「do shell script "mdls うんたら」など少々ハードルが高くて焦りましたが、
何とか希望の詳細情報を取得できました。
でもこのこの返り値ってレコードじゃなくて文字列なんですね…

あとはAutomatorと繋げて最終的にはテキストに書き出して〜などと妄想は膨らましながらも
なかなかスキルが追いつかなく、もどかしい限りですが、少しずつ習熟していきたいと思います

ありがとうございました

45 :
どなたか御知恵を
info forで得られるファイル情報のlong versionのみを参照したいのですが方法がわかりません。
作成、保存バージョン別に分岐させ、開くアプリケーションを選びたいのです

46 :
long version of (get info for ~ )

47 :
>>46
set X to long version of (get info for Y)
set Z to (X) as text
で文字列にまでできました。
ありがとー

48 :
10.6.8で見直してみたが()で括ってさえいればgetも要らなかったな
long version of (info for ~ )
てゆーかハナから文字列なんだけど、
変数に代入した上で更に文字列化する必要なんか無くない?

49 :
>>48
質問前の勘違いを引きずってました。お恥ずかしい。
getは10.5.8でも不要でした。
連休明けに10.4.11でも検証してみます。

50 :
携帯から送られたメールがmail.appで文字化けするので
mail.appのルールを使ってテキストエンコーディングを任意のものに変更したいと思いますが
AppleScriptはどのようなのを使えばいいのでしょうか?
どなたか教えていただけませんか?

51 :
最近は例題スクリプト付属してない?
/Applications/AppleScript/Example Scripts/Mail Scripts/Rule Actions 下
同じものになるけど /Library/Scripts/Mail Scripts/Rule Actions 下

52 :
>>51
レスどうも。
なんだか難しそうですね。
スクリプトに出てくる用語をぐぐって勉強してみようと思います。
ありがとうございました。

53 :
あーここのところ冬眠してたけど、また復活しようかな。
つってもやりたいことは大体できるようになった。
すばらしきかなAppleScriptさまさま。

54 :
すみません、ググっても試行錯誤しても解決出来ないので質問失礼します。
やりたい事は非常に単純で、画面の操作ロックを掛けさせたいのです。
(WindowsでいうWin+Lに近い動作を、デスクトップ上に置いておきたい)
ググると、要はScreenSaverEngine.app叩けば良いですよと言われて
tellなりdo shell scriptなりが出てくるのですが、この方法でやると
ScreenSaverEngine.appが起動している最中(AppleScript起動直後とか)にマウスイベントが発生すると
正しくスクリーンセーバーが起動せず、正しく終了もせず、そのまま操作不能になってしまいます。
OSはLionです。
Lion特有の問題なのかもしれませんが、Terminalから呼ぼうがFinderから直で呼ぼうが同じ状態になるので
ScreenSaverEngineを叩くという方法そのものを変えないといけないかなと思いつつも、代替方法が見つからず。。
長文申し訳ありませんが、どなたか知恵をお貸しください。。。。。。。

55 :
ちなみに、ホットコーナー等から正規にスクリーンセーバー起動させた場合
起動中にマウス動かすと、起動せずそのまま終了します。
実現したいのはこの動作です。
(説明べたで申し訳ないです)

56 :
すみません、自己解決しました。
「スクリーンをロック」でもスクリーンセーバー起動するみたいなので
これで問題なく動いてくれました。
スレ汚しすみません(寝ます)
ttp://memogaki.soudesune.net/AppleScript.html

57 :
えらい

58 :
javascriptでsafariから取得した値をapplescriptに渡すことってできないんでしょうか。

59 :
AppleScriptからdo JavaScriptでJavaScriptを実行するとか?

60 :
どうもありがとうございます。すみません自己解決しました。

61 :
>>60
だからすべてとは言わんがほかの人がわかる程度に結果を書けよ。いや書いてください。

62 :
ものすごく基本的なことなんだけどなにやらわからないので教えてくれ。
Xcodeでインターフェイスつけてデータを加工するのだが、毎回毎回繰り返す。
そのとき、前の変数の値を引きずらないように初期化的な処理をするんだが、
どうするのがいいのかよくわからない。
普通の文字列とかなら
set a to ""
とかすればいいと思うんだけど、ファイルやフォルダなんかを保持する変数の場合
上と同様でいいんでしょうか? 上と同じことをすると変数の型が変わってしまうような。
それから、defaultつーかplistつーかにレコードって保持できるんでしょうか?
いまいちどうすればいいかわからない。
どなたかご回答を。

63 :
>>62
AppleScript の変数に型は無いよ。型を持っているのは値。 a に何入れても、そのときに入れた値の型がその変数の型
Cocoa-AppleScript なの?
レコードってのは
{ name:"Name", address:"Address", realname:"Real Name" }
のようなこと?

64 :
テキストファイルの文字コードを変更するAppleScriptってどんなコードになるのかな?

65 :
>>64
どんな離隔ションを求めているのか?w
てか、まずはググれカス。

66 :
do shell scriptでiconv使っとけば

67 :
>>62
>set a to ""
初期化を明示したいなら
set a to null
>それから、defaultつーかplistつーかにレコードって保持できるんでしょうか?
http://www.latenightsw.com/freeware/PListTools/index.html

68 :
>>67
nullでいいんだ。なんか気持ち悪くて避けてました。
ありがとうございます。

69 :
あるクラスのオブジェクトを指定するときにindexを使って以下のようなことができますが、
tell application "iTunes"
set aSong to track index 1 of current playlist
逆にある曲の参照番号を知りたいときはどのようにすればいいのでしょうか?
具体的には、以下のようなことがしたいです。
set aTrackNo to |aSongの番号|
set bTrackNo to |aTrackIDを加工|
play track index bTrackNo of current playlist
id of aSong は必ずしも表示順と一致しないので使えませんでした。
またiTunesでは、再生中のものとは異なるプレイリストを表示した状態だとpause中のnext trackが動作しないというバグ?があるようですが、GUIスクリプティング以外にこれをworkaroundする方法はあるでしょうか。
idを使う方法だとシャッフル時はうまくいきません。
長文になってしまいましたがご回答お待ちしております。

70 :
ちょっとやってみた
tell application "iTunes"
set theID to id of track 1 of current playlist
end tell
--ある曲が持つ固有の"ID"をtheIDに入れておく
tell application "iTunes"
set theList to id of tracks of current playlist
repeat with i from 1 to count of theList
if item i of theList is equal to theID then exit repeat
end repeat
i
end tell
--current playlistに含まれる曲のIDのリストを作り、そのリストの中でtheIDの位置を調べる
current playlistの並び順は、その時のiTunesでの表示順になっているようです。

71 :
>>69
>またiTunesでは、再生中のものとは異なるプレイリストを表示した状態
iTunes自体がそういうものだからじゃないの。普通に使っていても
current playlist に対してだから、current playlist にするために、play してすぐ pause するとか
tell application "iTunes"
set thePlaylist to playlist "Any playlist of any song"

try
if thePlaylist is not current playlist then
play thePlaylist
pause
end if
on error
play thePlaylist
pause
end try
next track
end tell
try - on error は current playlist が現在存在していない(iTunes起動直後とか)場合のお

72 :
ありがとうございます。
>>70
なるほど、こんなやり方ができるとは。懸案が解決しました。
ところで、より一般的に、あるオブジェクトがindex 何番で指定できるかを調べる命令は存在するのでしょうか?
命令 second_item for item in aList
-->2
のような感じで。
今回教えていただいた方法を元にハンドラを定義すれば実現できそうではありますが、標準でそういった命令があるのであれば。
>>71
申し訳ありません、言葉が足りませんでした。
通常iTunes起動後 1.曲をplay 2.pause 3.ほかのプレイリストをクリックして表示 するとウィンドウ上部がリンゴマークに戻り停止状態になりますが、1-3-2の順では結果が異なります。
この後(current playlistは変化していません)に次の曲へ移動したいのです。
たとえば、曲を再生中に別プレイリストをブラウジングしながらpause→フェードアウト処理→next track→playといった流れです。
どうもこれは仕様のようなので、現状思いつく策といえばnext track→pauseを連続で行うことくらいでしょうか……。

73 :
>>72
current playlist が現在見ている/表示している playlist ではないが、その current playlist 内での次の曲ってこと?
play
next track
(必要ならすぐpause)
よくわからないけど、play とすぐに pause を組み合わせればどうにでもなりそうだけど

74 :
>>69
曲を取得した時のプレイリストとインデックスを求めるプレイリストが同じなら
index of aSong
で取得できそうだけど

75 :
>>73
そうそう、そうなんです。
すぐpauseだとたまに一瞬再生されてしまうのが気になって……。
仕方ないのかもしれませんね。
なんでこんなことをやっているかというと、曲送り時にフェードアウトを伴うような再生用スクリプトを自作して使っているのですが、音量ゼロに→pause→next track→playと処理しているためです。

76 :
>>74
うわ、本当ですね! いままで
index of aSong of current playlist
とよけいなof current playlistを附けていたためエラーが出てできませんでした。
こういう見落としはやっぱり人に訊くとすぐにわかりますね。
ありがとうございます。

77 :
ぬるぽ

78 :
>>64
AS内部では基本的にUTF-16BEだったかな
ファイルからread/writeする場合はas Unicode textでUTF-16BE、
as <<class utf8>>でUTF-8、何も付けなきゃShiftJIS
do shell script内ではUTF-8からiconvで好きな形に
>>68
missing valueってのもあるよ

79 :
>>77
say "がっ" using "Kyoko"

80 :
15組の値のペアがあり、その片方がさまざなま条件で決まる。
そのときのもう一方の値を変数に設定したい。
たとえば{AAA,あああ}でAAAが決まったときに変数にあああを
設定する、みたいな。

けっこう悩むのですが、みなさまならどうされます?
レコード使えば簡単かと思ったけど、意外にスマートでなかった。
ペアのリスト内容は固定の15組です。

81 :
ひとつずつif文連ねるのはちょっと避けたいです。

82 :
条件をメソッドにしたスクリプトオブジェクトを条件の数だけ作って、
配列に突っ込んで、ループすれば?
スマートかどうか知らんけど。

83 :
スマートではないんだけど
set xxx to "AAA"
set theVal to "{AAA:¥"あああ¥", BBB:¥"いいい¥", CCC:¥"ううう¥"}"
set theScript to "get " & xxx & " of " & theVal as string
run script theScript
set yyy to result

84 :
AとBという対のリストならAのリストで一致した時のアイテム番号でBのリストの要素を指定するとか。

85 :
>>80
-- 対応する値を同じ順番で二つの変数へ入れる
set listA to {"a", "b", "c"}
set listB to {"あ", "い", "う"}
set theVal to "b" -- これが決まった値とする
set theNum to offset in (listA as text) of theVal
set theResult to item theNum of listB
return theResult
スクリプト書いてから84と一緒だということに気付いた
まあ、せっかくなので晒しとく

86 :
>>83
いや、それが俺はいちばんスマートだと思うんだけど、なぜかできない。
getとかas stringが決め手かな、、、、、と思ったけどtell application Finder内でやってるからかも。
というか、レコードは文字列としてsetせなあかんのかな? theScriptに設定するときにas stringするのと
なにが違うのか、、、、、。
とても勉強になりました。あとで試してみます。
で結局、いまのところ15個のレコードのリスト作ってrepeatで照合してる。
別のところでは>>85も使ってる。>>82は意味がわかりません。もうちょっとヒントを。
15個くらいじゃ速度なんてどれも変わらないかな?

87 :
83はバックスラッシュが円記号置き換えられているみたいだけど、ちゃんとバックスラッシュに直してる?

88 :
あ、コピペしたときに化けた…
¥は¥に直して
>>86
getやas string部分はなくてもたぶん動くよ。
レコードのキーはソースコードでしか指定できないので
キー部分を変数にしてソースコードとなる文字列を作成。
それをスクリプトとして実行。
なので2行目のレコード部分はただの文字列。

89 :
バックスラッシュ出せないんだ…

90 :
2chはShiftJISだからな
どうしでも区別したければ実体参照で

91 :
¥

92 :
>>83の変形版というかrecordを実体で持つ場合
set theKey to "AAA"
set theRecord to {AAA:"あああ", BBB:"いいい", CCC:"ううう"}
run script "on run {theRecord}
|" & theKey & "| of theRecord
end run" with parameters {theRecord}
recordの持ち方が違うだけなので速度的には同等
パイプは念の為に書いてるけどこの例なら無くても動きます

93 :
もいっちょ
殆ど一緒だけどちょっとだけ速い気がする
set theKey to "AAA"
set theRecord to {AAA:"あああ", BBB:"いいい", CCC:"ううう"}
keyOfRecord(theRecord) of (run script "on keyOfRecord(theRecord)
|" & theKey & "| of theRecord
end keyOfRecord
it")
とまぁ書いておいてなんだけど…
recordを使う方法は分量は短くなるけど、初見では何をやってるのか解り辛いかもね
2つのlistを使う方が内容的にはシンプル
でもって速度的な面でも結局listの方が速いんじゃないかなという気が;
いずれにしてもミリ秒以下の話だけども

94 :
もうレコードのキーを取り出すのはあきらめるというのはどうだろう。
set theRec to {{label1:"AAA",Label2:"あああ"},{label1:"BBB",Label2:"いいい"},{label1:"CCC",Label2:"ううう"}}
set theKey to "AAA"
repeat with i in theRec
if label1 of i = theKey then set theResult to label2 of i
end repeat
速度が早いかどうかは知りません。
ところでどなたかご存知なら。
フォルダtheFolderの中にあるファイルを取得する命令
set allFiles to every file of theFolder
これとほぼ同じことをevery file ofを使わずに実現するにはどうすればいいんでしょう。
do script shell cat POSIX path of theFolder←すんません。知識がなく適当です。
とか
call method 〜
とかそんな方法で。なぜか分からないのですが、特定のネットワーク上のフォルダについて
every file of を使うとなぜか固まり、まったく原因がつかめないため、違う方法を
試してみたいのです。どなたかヒントを。

95 :
処理時間測定してみた。マシンは2GHz Core i7
素直なループ処理使う方が30倍速い。
(1) 0.65秒
set xxx to "CCC"
set theVal to "{AAA:¥"あああ¥", BBB:¥"いいい¥", CCC:¥"ううう¥"}"
repeat 1000 times
set theScript to "get " & xxx & " of " & theVal as string
run script theScript
set yyy to result
end repeat
(2) 0.022秒
on getIndex(aItem, aList)
set idx to 0
repeat with x in aList
set idx to idx + 1
if (contents of x is aItem) then return idx
end repeat
return 0
end getIndex
set listA to {"AAA", "BBB", "CCC"}
set listB to {"あああ", "いいい", "ううう"}
repeat 1000 times
set yyy to item getIndex("CCC", listA) of listB
end repeat

96 :
>>94
set theFiles to do shell script "cd " & quoted form of POSIX path of theFolder & " && /bin/ls -1 | while read item; do [ -f ¥"$item¥" ] && echo ¥"$item¥";done;exit 0"
set saveDelimitters to text item delimiters of AppleScript
set text item delimiters of AppleScript to return
set theFiles to text items of theFiles
set text item delimiters of AppleScript to saveDelimitters
¥ はバックスラッシュ

97 :
|はパイプではないと云々
それはそうとAppleScriptはもっと機能拡張してくれないかなあ
特にリスト系をね

98 :
>>97
おお、パイプは仕組みの名前であって、記号としては単に縦線でいいのか
素で知らなかったわ…お恥ずかしい限り

99 :
>>96
なんとか分かる部分だけ使って残りはapplescriptで書いて、get every file of 〜を置き換え、
同様にget name of 〜も
do shell script "ruby -e \"puts File::basename(" & (POSIX path of theFolder)'s quoted form & ")\""
にすべて置き換えてみたところ、2分15秒かかっていた処理が、1分15秒になりました。
考えて見たら、get every file of とかしたあともいろいろファイル操作しているのですが、
それもUNIXのコマンドのオプションで対応できそう置き換えてみる予定です。
とても勉強になりました。ありがとうございます。

100 :
この1年ほど我慢して使ってたんですが、教えてください。
GUIスクリプトでAcrobatProfessionalを操作しているのですが、
さる設定のときに設定のサブウインドウを出して、数値を入力します。
手動の場合は「数値」+returnで数値が確定してPDFのプレビューが変わるのですが、
GUIスクリプトでその欄のに数値を入れても変化なし。数値+returnも変化なしで
困ってます。
ウインドウ内で数値を設定して確定させるにはどうすればいいんでしょう。
具体的には出力プレビューのインキ総量をプレビューする際の数値の欄です。

101 :
AcrobatProfessionalとやらを使った事が無いので何とも言えないけど、l
まずは深呼吸をして>>1を読まれい

102 :
>>97
こんなのを使ってみてはどうでしょう?AppleScript のリストを機能拡張するスクリプトオブジェクトです。
http://www.script-factory.net/XModules/XList/index.html

103 :
>>102
おお、これはいいものですね。
しかもリファレンスも参照してくれるんだね。
情報感謝です

104 :
>>95
スクリプトオブジェクトで連想配列を提供するモジュールがあります。
XDict : http://www.script-factory.net/XModules/XDict/index.html
これを使えばさらに高速化するはず。
内部でのリスト処理が工夫されているからね。

105 :
なんかapplescriptのHelp消えてない?
http://docs.info.apple.com/jarticle.html?path=AppleScript/2.1/jp/as182.html
とか。
(applescript Disk でググると出る一番上のもの)
同様にほかの用語ヘルプ消えてるみたいだけど、試合終了?

106 :
>>105
docs.info.apple.com が現在お亡くなり中みたいやね

107 :
あ、いや、亡くなっていなくてなんか混乱中かな

108 :
ミラーサイト頼む

109 :
もうちょっと高速にならんかなぁ
処理に拘束されたくない

110 :
AppleScript自体の処理速度は割と速いと思う
遅いのは他のアプリケーションに処理をさせている時
つまり、ほとんどの処理が遅いだろと言われれば、まあその通りなんだが
俺は特に遅いところはシェルスクリプトとか他の言語で置き換えているよ

111 :
Xcodeでapplescriptプログラミングするとき、TableViewで複数の
行を選んで削除すめるにはどうすればいいんだ?
1行だけ消すことはできるけど、複数行はできない。
いろいろググってはみるんだけど、うまく検索できない。
今からびゅんびゅん読んでみる。

112 :
なんでAutomatorとAppleScriptとVBAが一体にならんの?

113 :
VBAとな?

114 :
AutomatorとAppleScriptが一体ってAutomatorでAppleScript使えるから何を言っているのかわからないが、
AutomatorのAppleScriptエンジンっていままでのと別物だよなあ。なんでだろ

115 :
>>112
AppleがMSを買いたくないんだろうな。

116 :
>>111
複数行の選び方次第でできるよ
連続してる行なら
delete data rows X thru Y of data source Z
特定のセルの状態で検索するなら
delete (data rows whose content of data cell X is Y) of data source Z
一旦自力でリスト化して〜みたいなのは無理だね
--delete {data row X, data row Y} of data source Z
その場合はループさせて1回ずつ実行するしかない
repeat with aRow in {data row X, data row Y} of data source Z
delete aRow
end repeat

117 :
>>116
あーありがとー。なんとなく分かりますが、実際にプログラムを
動かしているときにmuitiple selectをオンにした場合、Shift+クリック
などでrowが複数選択できるようになると思うんだけど、それを
set aRows to selected row
delete aRows
などとしても消えるのは1行のみ。なんか違う概念が必要な気がするけど
わかんねーっすorz 全部消すことと1行消すことはできるのだが、、、、、、

118 :
>>117
なるほど、実際に選んでいる行って事ね
今試せないんだけど、
delete selected row でもダメかな?

119 :
do Script系の強化 頼む

120 :
>>118
出先にてすみませんが
applescript delete tableview multiple rows
でググると一番目の結果に答ありました。
リピート処理するみたいですね。お騒がせしました。

121 :
>>119
リスト操作の強化も

122 :
みんなスクリプト組めるように
国民の教化も必要だな

123 :
>>120
解決した様だけど折角なのでまとめておく
selected row 選択している中で最後に選んだ行番号
selected rows 選択している行番号のリスト
selected data row 選択している中で最後に選んだ行への参照
selected data rows 選択している行への参照のリスト
deleteに直接selected data rowを渡すと無反応
selected data rowsは選択状態が解除されるだけで削除されない
set selected rows to {}
set selected data rows to {}
実質的にこれらと同じ
なので複数行を削除するなら結局repeat使うしかない
repeat with anOrder in reverse of (get selected rows of tableView)
delete data row anOrder of data source of tableView
end repeat
もしくは
repeat with aRow in (get selected data rows of tableView)
delete aRow
end repeat

124 :
なんかXcode上でコーディングするのがめんどくさくなってきた。
入力支援スクリプトとかないのかな?
探したけどみつかんねー

125 :
>>124
つくってくださいな

126 :
すみません。どうにもこうにもわかりません。
Xcode上で複数のスクリプトファイルを作ってプログラミングしているとき、
すべてのスクリプトファイルでグローバル変数を共有するにはどうすればいいんでしょう?
別のファイルにあるscriptなどをload script? できることはわかったんですが、
別のファイルのグローバル変数を持ち込むことができません。どなたかご助言を。
つか単純にグローバル変数にしたい変数を返すハンドラを作って、それを他のファイルで
読み込めばいいのかな。今回は別の方法で乗り切ったので他の方法を試す気がしないけど。

127 :
スクリプトを1つのファイルにまとめた方が早くね?

128 :
>>127
まとめるとXcodeが不安定になって
頻繁に落ちて使い物にならない。

129 :
>>126
Studio Applicationの話をしてるのかな?
だったらこの辺を参照
How do I add user preferences to my application?
http://macscripter.net/viewtopic.php?id=24606
Variable Scope in Applescript and Applescript Studio
http://macscripter.net/viewtopic.php?id=24657

130 :
>>126
load scriptする側をA、される側をBとする
AとBに同じ名前のglobalがあった場合、
Bのハンドラを読んだ時点でAでの値がBにコピーされ、
Bのハンドラから抜けた所でBでの値がAにコピーされる
A側がpropertyの場合にも同じ事が起こるが、逆はなし
run scriptでも同様

131 :
ちょっと心配なんだけどさ、これから、applescriptって廃れて使えなくなるの?
applescript対応アプリを連携させながら、ちょこちょことした処理をするには必須
だと思うんだけど、最近はどんどんいろんなページが閉鎖されたりして、
今後、そのような用途はどうすればいいのかとちょっと不安なんだけど。
業務で使ってる自作アプリ、どうすりゃいいのかな、、これから。

132 :
http://www.apple.com/jp/osx/apps/all.html

133 :
>>131
そんなの中の人にもわからんよ

134 :
どうせ他のスクリプトに繋げるんだから
Apple Scriptをスクリプトのオープンドックにして欲しいんだが

135 :
いやーいろいろ面白いね。この前自作のスクリプトで人からもらったメディアを自動コピー
してたらなぜか2個しかファイルは見えないのに、コピーしたらファイルが50個になってた。
いろいろ調べたら、そのメディアを初期化せずに使いまわししているみたいでゴミのような
不可視ファイルがコピーされた模様。POSIX pathで"/."を含むファイルを除外したらうまくいった。
それはそうと、TableViewにファイルのパスのリストを表示させておき、そのリストの1行を表示すると
image viewに表示させているのだが、リストからパスをクリックさせたときの反応が悪い。
ハンドラはselection changing 使ってるんだけど、さくさく反応させるにはとうすればいいのん?

136 :
>>135
selection changedを使う
つか質問するならまず>>1ぐらい読んどけ
selection changedは何か変な動きすんのね
2回目以降の操作が突っかえるみたいな

137 :
あーミスった
2つめはselection changingの間違い

138 :
>>137
ありがとー。ものすごく快適になったよ。
アップル謹製のサンプルがselection changingなのはものすごく疑問。

139 :
質問です。
applescriptを使って、キーボード操作をシミュレートできるのでしょうか?

140 :
できるよ

141 :
クリックした場所を1秒間に16回連続クリックする高橋名人は作れますか?

142 :
すいません、今のどうでもいい書き込み無しで本気で聞きたいことができました。
環境設定の「フォーマット」で好きなフォントを選んでも、気がついたらリセットされます。
まだ2回目で、リセットされる条件は分かりません。
AppleScript エディタ、Macを再起動してもリセットされませんし、いつの間にかリセットされてます。
みなさんはフォントの設定がリセットされることはありませんか?
Mountain Lionで、AppleScript エディタのバージョンは2.5です。

143 :
>>140
レスありがとうございます。

144 :
Onyx禁止

145 :
>>142
Snow Leopardだと設定ファイルはこれ
~/Library/Preferences/com.apple.applescript.plist
バックアップを取っておいておかしくなったら元に戻して使ってる。というか未だ直ってないんだ。

146 :
>>144
Onyxは使っていません。
ちなみにMountain Lionはクリーンインストールしたばかりで変なものは入れてないので、AppleScript Editorの問題かと思います。
>>145
前から不具合があるのですね。
なるほど、そのファイルのコピーをとっておいて、設定がリセットされたらそれを置き換えるAppleScriptを書けば楽チンですね。
しかし何が原因なんでしょうね、いつリセットされてるのか全く分かりません。
メニューにあるフォントのとこなど怪しいのですが、全くいじってないですし。
リセットされるのは「環境設定」→「フォーマット」の設定だけのようです。

147 :
ちょっと間違えました。
>>146みたいな処理は常駐させないと出来ませんね。
まぁいいや。

148 :
しっかしAppleScriptの情報って時代遅れの古いのばっかだな。
誰か今の環境に合わせた新しい情報まとめ作ってくれよ。

149 :
言い出しっぺの法則
…は、兎も角としても
Leopard辺りからさほど変わってないしな

150 :
古い情報を除外したければ
「AppleScript -掌」
で検索するというのはどうだろう

151 :
Leopard辺りならまだいいよ
掌田さんの本も古いの多いけどまぁ最後に出たの2003年だしまだいい
ていうか、その、およそ10年前の本がAppleScriptの本としては最新なんだよな...
深く知ろうとするとすぐOSX以前の古文書を読まなきゃいけないのが辛い
そんで書いてあること試して、エラー出ても自分が間違えたのか、環境が変わったせいなのか、そもそもその文自体が間違ってるのか判断つかない
グチっただけなので言い出しっぺの法則は勘弁して

152 :
>エラー出ても自分が間違えたのか、環境が変わったせいなのか、そもそもその文自体が間違ってるのか判断つかない
よくわかってんじゃんw
基本的に机上が通じないトライアンドエラーが一番効率的な言語実装なんだから、その感じでやってけばいんじゃね?

153 :
GUI Scriptingで仕事してる身だけど書籍の類の情報は無いに等しいので、
基本1行単位でトライ&エラーの繰り返しだな

154 :
もうちょっと変数型の処理とかがマシだったらいいんだけどねえ
現状だとどうでもいいところでエラー出してくるからトライアンドエラーの労力も倍増だよ

155 :
ちょっと具体的に言ってくれたらみんなで対応を考えたりもできるのに
愚痴ばっかりじゃどうしようもないんじゃね?
俺的にいやなのは
open location
open file
なんかは処理を待たないとならないんだけど
終わったことを確かめるルーチンをいちいち書くのはめんどくさいし
delay 3とかだと遅すぎたり足りなかったりすること

156 :
open locationで読み込みが終わったか確認したいなら
do JavaScript "document.readyState" in document 1
で確かめればいいんじゃないかな。Chromeならloadingってのも使えるよ

157 :
>>153
UIをシミュレートする操作は元々その場凌ぎだよ。
AppleScriptに元からあった機能じゃないし、アプリ側のちょっとしたUI変更で
動かなくなる。本来AppleScriptはAEOMに基づいたモデル操作を行うための言語。
>>154
具体的にエラーになる例をどうぞ。
それに対しあーだこーだ言うのがこのスレです。

158 :
>>149
Leopard時代からほとんど変わってないって・・・。
つまり、全く進化してないの?何年も経ってるのに?
Objective-Cにはいくつも新しい機能が追加されてるのに?
てか、Leopard辺りからってどういうこと?
Leopardのときすごい変わったの?

159 :
変化がわからなければ変化がわからないのだから、どうでもいいんじゃないの

160 :
変化が分からないも何も、最近始めたばかりなので昔のことは知りません。

161 :
自分が使うだけなら「動けばいい」で済むけど、頼まれものなんかは色々と面倒くさい。
エラーチェックは真面目にしなきゃいけないし、こっちで再現しない不具合とか頭を抱える。
相手がシステムを無闇にいじってたのが原因だったことも。

162 :
>>158
Release Notes見れ。
10.5でtextが全てUnicodeになったのが最大の変更で、それに比べれば他の変更は些細な物。
http://developer.apple.com/library/mac/#releasenotes/AppleScript/RN-AppleScript/Introduction/Introduction.html

163 :
>>157
アプリ側のちょっとしたUI変更程度には影響を受けない、
または少変更で追随できる様に作っておくんだよ
その場しのぎというのは全くもってその通りだけどね
>>158
13年前の絶版リファレンス本が未だに役立つぐらい変化が少ないんだもの
Leopardでは>>162のリリース通りで大きく変わったとはいえないけど、
Snow Leopard以降の変化にくらべれば若干多いかという程度

164 :
どんどん更新されると、それはそれで不便なんだけどね。

165 :
再帰処理を練習してみたYO( ´∀`)
http://pastebin.com/grjBj3iP
UI Elementが含んでいるUI Elementsをchoose from listで再帰的に表示するの
アプリケーションのどこが補助装置で操作可能なのか知りたかったから作ったんだけど、ボタンの名前とか分からないし結局あんまり役に立たないの

166 :
ぬるぽ

167 :
ぬるぽ

168 :
ぬるぽ

169 :
質問です。
applescriptの勉強をしたいのですが、市販の書籍は古いバージョン対応のものばかりです。
古いバージョン対応の書籍で勉強しても、
最新バージョンでapplescriptを使えるようになるのでしょうか?

170 :
元の知識がゼロなら、最低限の情報は得られるかもしれないけど、
基本的な文法はネットだけでも勉強できるような…。
AppleScriptって、文法よりは、「どのアプリで何をしたいか」が重要で、
その書籍が自分の動かしたい「今のアプリ」を扱ってなければ、
大して役に立たない気がする。
アプリごとに使える命令が変わってくるから。
(どんな命令が使えるかは、スクリプトエディタのライブラリにアプリを登録すれば見れる)
Finder関係も、OS9→OS Xで結構変わってる部分があるし、
ネット上のサンプルスクリプトを改造しながら覚えていくのが
今は普通なんじゃないかな。

171 :
勉強というのが仕組みというか基礎的(基本的という意味ではない)なことなのであれば本も選択肢としていいと思う
何かやりたいことがあってそれのためなら上の人も書いてるがネットで十分だ

172 :
AppleScriptってのはな、古い情報を大量に読んで新しい環境でも使えるものを抽出して
普通の言語より何回も失敗しながら体に刻み込む根性が必要な言語なんだよ
もっといいスクリプト言語はたくさんあるし、Macを操作すること以外に学ぶ意味はないからMacへの愛が試されてるんだよ

173 :
ちゃんとしたドキュメントあるんだから、まず読め。
AppleScript Overview
http://developer.apple.com/library/mac/#documentation/applescript/conceptual/AppleScriptX/AppleScriptX.html
AppleScript Language Guide
http://developer.apple.com/library/mac/#documentation/applescript/conceptual/applescriptlangguide/introduction/ASLR_intro.html
AppleScript Release Notes
http://developer.apple.com/library/mac/#releasenotes/AppleScript/RN-AppleScript/Introduction/Introduction.html
>>170
その通り。何ができるかはAppleScript言語側で決まってるんじゃなくて、アプリや
OSAX側の機能で決まる。それを記述してるのが各アプリやOSAXのディクショナリ。
アプリ以外にもshellやAutomatorとも連携取れるから、それらの機能も取り込める。

174 :
英語読めるなら障壁なんて無いんだけどな...Appleのドキュメント読めばいいだけだし
いかんせん日本語の情報が少なすぎるわけで
情報が古いって嘆いてる日本人に英語のドキュメント読めってのはひどいですね
もっとやれ

175 :
日本語AppleScript超おすすめ
ごめん嘘

176 :
>>175
一時、日本語OSの標準が日本語AppleScriptになってた事があったが、とにかく面倒で困った。
やはりプログラミングのキーワードは英語の方がわかりやすい。
説明は、日本語のほうがわかりやすいのは言うまでもないけど。

177 :
やっぱりそんな大昔からAppleScript使ってるベテランばっかりなんだこのスレ

178 :
ぴゅう太の頃から使ってるからな

179 :
>>170-178
レスありがとうございます。
「辞書」アプリのラッパーアプリを作って、英単語の検索履歴をファイルに記録したいのですが…

180 :
辞書アプリはAppleScript対応ではない(≠操作できない)ようだが、
そのくらいなら不可能ではないと思う、がんばれ

181 :
>>179
AppleScriptは、「スクリプトでアプリを操作する」ためのもので、
元のアプリに無い機能を追加するのに使うのは無理があると思う…。
しかも辞書.appはAppleScript非対応のアプリだから、
操作するにはシステムイベントっていう、UI操作をシミュレートする機能を使って
無理やりやるしかない。
履歴をファイルに記録するのは、できなくはないけど、
そのためにAppleScriptを一から勉強するのは時間の無駄かと…。
検索履歴付きの有料辞書アプリを買った方が早い。
それでもやるなら…。
入力フォームをAppleScriptで出して、入力内容をテキストエディタに
送ると同時に、辞書.appの入力欄にコピペして検索、
みたいな無様な形になるんじゃないかな…。

182 :
/Library/Dictionaries/
にある辞書ファイルのパッケージの内容を表示して読み込むってのは・・・無理か
見てみたらテキストが書き込んであるのはバイナリっぽいし
でも初めて見たけど画像がそのまま入ってて楽しいね

183 :
辞書.appでの検索ならopen locationという手もあるよ。
open location "dict://" & URLエンコード済み検索語句

184 :
>>180-183
レスありがとうございます。
で、applescript全く知らないのですが、どうやって勉強したら良いのでしょうか?
検索履歴の中に検索単語の出現媒体も入れたいので
>>181の「無様な形」しかないかも知れませんが…

185 :
>>1

186 :
Adobe Illustratorの、「Collect for Output」をディレクトリ決め打ちにしたいけど、
デスクトップとかの参照がよくわかりません。
要は書き出し先を ~/Desktop/Collect4outpt に書き換えたいだけなんです..

と、>>13さんの書き込みを見て解決しました。
時空を超えて感謝感謝です

187 :
誰かの役に立つかもしれないので覚書メモ
「AI付属の「Collect for Output」スクリプトの、
 書き出し先を手動選択でなく~Desktop/Collect4/<filename>+<"_collect">/ にする」
該当箇所を以下のように書き換える:
on collectCurrentDoc()
tell application "Finder"
activate
set homePath to POSIX path of (home as alias)
set aPath to homePath & "Desktop/collect4"
set myFolder to POSIX file aPath as string
end tell
try
tell application "Adobe Illustrator"
set docRef to document 1
set mydocname to name of docRef

copy mydocname to CollectName
set myFolder to myFolder & CollectName & "_Collect:"
set createPath to POSIX path of myFolder
set myCommand to "mkdir -p " & quoted form of createPath
do shell script myCommand

save docRef in file (myFolder & mydocname)

188 :
タブが全Rちてしまった...

189 :
>>186-188
タブ落ちは2chの仕様上しょうがない

190 :
まあタブあるとコピペじゃ動かなかったりするし
これでいいんじゃね?おつかれ

191 :
datにはしっかり残ってるから直読みすればおk

192 :
>>179
コマンドラインから辞書を引けるコマンド作っている人がいるから、
これ使ってdo shell scriptしたら?
ttps://github.com/false-git/dict

193 :
AppleScriptでいろいろやろうとすると結局はシェルスクリプトも覚えなくちゃならないよね
特にネット関連
AppleScriptだけじゃダウンロードすらできない

194 :
つかAppleScriptってそういうもんだし

195 :
だよねえ
元々必要だったらOSAX作ってだけど、シェルスクリプト呼べるようになってからそれすらほとんど必要無くなってしまったという

196 :
まあ、どう捉えるかだな
結局シェルスクリプトのほうが歴史も汎用性もあるから
勉強になっていいと思うが

197 :
単なるコマンドをシェルスクリプトと勘違いしてね?
比較対象にする時点でAppleScriptがよくわかってないと思うけど、
多分シェルスクリプトもよくわかってない
シェルスクリプトと比較するならPerlとかだろ
Unix一般のCUI体系をシェルスクリプトとはいわんよ

198 :
do shell script
だから、別に今の話題ではどうでもいいような

199 :
>>186
path toでもお決まりのフォルダ位置は得られる。
POSIX path of (path to "cusr") -- home
POSIX path of (path to "desk") -- Desktop
POSIX path of (path to "down") -- Downloads
POSIX path of (path to "docs") -- Documents
POSIX path of (path to "pdoc") -- Pictures
POSIX path of (path to "mdoc") -- Movies
POSIX path of (path to <<data TEXTB5646F63>>) -- Music
POSIX path of (path to "spot") -- Saved Searches
POSIX path of (path to "trsh") -- Trash
POSIX path of (path to "font" from user domain) -- Fonts
POSIX path of (path to "pref" from user domain) -- Preferences
POSIX path of (path to "asup" from user domain) -- Application Support

200 :
>>197
揚げ足とるようだが一つのコマンドでもシェルスクリプトとして書けばシェルスクリプトだし
特に、AppleScriptからコマンド使うならシェルスクリプトしかないでしょう
いちいちAppleScriptからターミナル起動する意味はあんまりない
一応UNIXの基本やシェルスクリプトは知ってるよ。君の書き方は何かカチンと来るね
比較対象がPerlってのもよく分からない

201 :
197の反論予想
「そもそもdo shell scriptなどというコマンド名が意味不明なのである。
 Appleは何もわかっていない、使う奴もわかっていない、俺は天才だけど。」

202 :
使うのはどうせone-linerでしょ。
調べるのもshellの文法じゃなくて、コマンドのパラメータの方。
on download(aURL, aPath)
do shell script "curl -L " & aURL & " -o " & quoted form of aPath
end download
set aURL to "http://www.nasa.gov/images/content/616888main_pia15280-43_800-600.jpg"
set aPath to (POSIX path of (path to "down")) & "mars_rovers.jpg"
download(aURL, aPath)
tell application "Finder" to reveal my POSIX file aPath

203 :
ネットでハウツー読んだのを披露してみたかったんじゃねえの
こっちに自信があればいちいち相手にする必要はない
一応言っておくと例えばAppleScriptをサービスとして走らせると便利だからその中で自作シェルスクリプト呼んで組み合わせたりするわけだけど
そうやっていろんなツールを組み合わせて使うためのwrapperとして、AppleScriptもシェルスクリプトも同列に語られるわけだよね

204 :
デバッグは別にして、
シェルスクリプトに
osascript で AppleScript を
here document とかで
埋め込むのもそこそこ
使いやすいと思う。

205 :
反論ツーかwww
そもそもシェルスクリプトじゃダウンロードすら出来ないんだがw
自信www
お前らこそ変な自信持つなよw
ホントしょうがねー奴の集まりだなw
>>200
>特に、AppleScriptからコマンド使うならシェルスクリプトしかないでしょう
>いちいちAppleScriptからターミナル起動する意味はあんまりない
do shell script "/usr/bin/curl"
これはシェルスクリプトでもなんでもないじゃんw
まあ>202が書いてるけど
揚げ足取る以前に理解してないだろw

206 :
だねえ。それこそ>>199なのをとかちょっとしたのでも使えるしね

207 :
>>206>>204
>>205
うん、お前は人よりも賢い賢い、ID: dzmIr9kX0
賢いお前にはここは場違いだと思うよw

208 :
間違い指摘したらその扱いかw
お前も立派なカスだったんだな、残念

209 :
ん?んんーー??w

210 :
ごめんめんどくさい奴の相手しちゃったね・・・
スルーすれば良かった

211 :
>>209
VPNで仕事してるんでな。IDはころころ変わるんだよ、こんな風に

212 :
>そもそもシェルスクリプトじゃダウンロード
イミフ
>do shell script "/usr/bin/curl"
サンプルにしてもそれは無いだろうw
賢い人の考えることは愚かな俺にはわからんw
そもそも do shell script の "" 内をまた勉強するのがちょっと面倒ねってことだけだろう
do shell script てのだからシェルスクリプトって言っているだけで、その内容が制御文をいろいろ使ったシェルスクリプトかどうかなんてどうでもいい話しなのに、「俺はシェルスクリプトを知っている」ってのを自慢したくてしたくてたまらないとしか愚かな俺にはわからない
>>211
ふーんw

213 :
ID:boM1/3nc0(2)が
>>196
>歴史も汎用性もある
って書いてるがコマンド呼び出すだけには、たいした歴史も汎用性も無い
俺は歴史と汎用性があるシェルスクリプトの事を語っただけだ
しかしこの程度で自慢とかどんだけ低レベルなんだよ、お前w

214 :
Unixコマンドには歴史も汎用性もあるだろうに。賢い人の狭量さはわからんなあw
また、VPN切り替えたのかw

215 :
>>214
>Unixコマンドには歴史も汎用性もあるだろうに。賢い人の狭量さはわからんなあw
これは無い。
それぞれ環境が違う中で入ってるコマンドの汎用性なんか信じてたら、まともな仕事出来ないだろw

216 :
なるほど
俺はパイプ使って処理いろいろできるのは汎用性、tailとかsedとかたくさんのもろもろは歴史があると思うんだけど、賢い人はやっぱ使い方が違うんだなw

217 :
>>216
パイプはシェル。お前はコマンドとシェルの区別がついてないのはわかったw
何故shなのか?歴史と汎用性があるのはbashやその他シェルスクリプトでは無いのかがわからんのだろうな

218 :
パイプから入力できるかどうかはコマンド(のプログラミング)による。まあ入力はstdin、出力はstdoutにしとけばいいんだけど
パイプで繋げられるようにプログラミンされているコマンドが多いのがUnixらしだだと思うけど
>何故shなのか
やっぱり自慢したいだけじゃん。何をいまさらと思っているのは俺だけじゃないとおもうぞw

219 :
>>218
俺だっていいたくねえよ、それこそ今更
お前がパイプとかアホなこと言い出すからだろが

220 :
パイプを使ってコマンドを繋げていろいろ成形できるのがUnixの世界の汎用性ってことだけど
人を小馬鹿にするために書いた文を、人のせいにするのかあ。やるなw

221 :
何となくわかって来たような気がする。
シェル自体がわかってないのか?シェルが無い状態とかがわからないのか?
いや小馬鹿じゃなくて大バカだろ。この程度で歴史と汎用性に乗っかるなんて

222 :
実行権限付けたテキストファイルだろうがワンライナーだろうがヒアドキュメントだろうが、
AppleScriptで文字列をdo shell scriptに渡そうが、シェルで実行できる内容があらかじめ羅列されたものならそれだけでシェルスクリプトだよ
ただの普通名詞
だから>>205の挙げてるよくわからない例も、意味があるかどうかは置いといてシェルスクリプトには違いない

223 :
まさかこうなるとはな……不毛にもほどがある
別にお互い相手が正しく理解してようがいるまいがどーでもいいんだから
相手の知識を量る意味も、諭す意味もないだろ?

224 :
>>221
>シェルが無い状態
この話題で何を話しを膨らませているんだかw
いや大馬鹿でもいいよ。言っているでしょ、お前は賢い、俺は愚かだとw
よいシメになったな。おもろかったよ。ありがとう

225 :
>>223
うん、すまんかった。ちょっとおもろかったから図に乗った。すまん

226 :
>>223
>203
お前が無意味な煽りでのっかったんだろーが。
ちょっと上から風にいわれると、すぐ逆切れして人を煽る、そのくせ今更だなw

227 :
FreeBSD-users-jpは「レスありがとうございます」と書いただけで3日間フレームの嵐が吹くのでQandAに注意書きがある
http://d.hatena.ne.jp/KoshianX/20091023/1256295713

228 :
>>226
「相手にする必要はない」と煽ったのは正直すまんかった
が「ちょっと上から風に」言うのはヤメテクレ

229 :
AppleScriptがかなり役に立ったとか、AppleScriptがなければ即死だったってことある?

230 :
役に立たなければわざわざ使わない。

231 :
即死だったってことはないかな。なきゃないでなんとかしてたとは思うからね。
でも、あるおかげでその「なんとか」がめちゃくちゃ楽になった。

232 :
即死回避って状況がちょっと思いつかないw
日常がちょっとだけ楽になる、って方が大きいかなあ
家帰ったら、Mail・Bathyscaphe立ち上げて新着読み込みさせつつ
巡回してるWebサイト7〜8コをSafariで一気に開く・・・
的なことがアプレット1つ立ち上げただけでおkなのは、ものぐさな
自分にはすんげえ重宝

233 :
>>232
よくわかる
複雑なことができてうれしいのはもちろん、
そういうランチャー+α機能付きみたいなのが地味に効く

234 :
iTunesのタグ編集機能が貧弱だから、ちょこちょこと編集機能を書いたり集めたりしてたら、
iTunesでタグ編集アプリ並みの編集が出来るようになった。

235 :
>>234
公開したらみんな幸せになれるかもよ
おれもタグ編集ではないが、自分用に書いて膨大になった再生関連のスクリプト(フェードさせるとか)をブログでも開設して公開しようかと思ってる

236 :
Xcode使ってプログラム組んでいるんだが、原因不明のトラブルに悩まされてる。
・データチェック、ファイル名変換、印刷など

・ドロップレットにそのファイルを投げる→ドロップレットが処理→フォルダアクション

終了
という流れで動かしているのだが、ドロップレットの処理が途中でハングしてしまうことがある。
delayをそこかしこに入れて試しているが改善しない。
tell application "Finder"
open theFile using 〜(ドロップレット)
end tell
的な処理ってうまくコントロールできないんでしょうか。
ドロップレットのエラーを疑って某アドビに連絡したら「サポート外です。これ以上は有料です」
とか言われてしまったorz もうアドビのソフトなんて嫌いだ!

237 :
>これ以上は有料です
R系サイトのような巧妙な手口だな。

238 :
>>236
Adobeがどこに関係してるのか分からないけど
フォルダアクションはファイルのコピーが終わる前に発動したり
フォルダアクション実行中にファイル追加されると処理しなかったりするから
その辺りの可能性もあるんじゃないk?

239 :
>>236
・delayじゃなくて、UI Elementが存在するかどうかで終了判定
・tell Finder to openの代わりにdo shell script "open -a..."
試してみれ

240 :
ドロップレットの処理が「途中で」止まるんだとしたら、
呼び出すところにゃ何も関係無いんじゃねーの
どっちの方法でも普通にドロップする場合と違って引数は1つしか処理できないみたいではあるが

241 :
お返事いただいた方ありがとうございます。
あまり書きすぎると恥ずかしいので詳しくは書けないのですが、
ドロップレットにファイルを投げると処理自体は終了し、
その結果フォルダアクションが働きいろいろ処理される。ここまでは
いいのですが、ドロップレットのウインドウが閉じることもできず
そのアドビのアプリを終了しないと元に戻らなくなってしまうのです。
そのドロップレット、ちょっと設定を変えるともっとひどいエラーに
なり、アメリカのアドビのフォーラムでも問題になっているのに
解決策は出てこないまま。どう考えてもアドビのアプリのバグだと
思うんだけど、「サポートは有料です」なんだって。あほらしいよ。
それから問題に再現性がない。同じデータでもエラーになったり
ならなかったりする。今日は50ファイルくらい処理して1回もなかったが、
なる時はなるらしい。もう本当に訳わからん。
>>238->>239の方のアドバイスを参考に明日も頑張ってみます。

242 :
>>241
もうちょっと具体的に何やってるか書かないとこれ以上アドバイスのしようがないな

243 :
かなりさがってるので上げとく

244 :
ドロップレットがAdobe製かつ実行専用なら何もできる事は無いし、
自作或いは編集可能なら内容見ない事には始まらん

245 :
>>241
そういやこれとは関係ないよな?
お仕事メモ帳 [Illustrator][AppleScript]テキストのアウトライン
http://macneko.blog77.fc2.com/blog-entry-165.html

246 :

AppleScriptを使用して、定期的にDDNS(Dynamic Do!)のIPアドレス更新をやりたいのですが、うまく動いてくれません。。
---- ソース ---------------------------------------------
set str_Domain to [ドメイン名]
set str_Pass to [パスワード]
on idle
do shell script "\"http://free.ddo.jp/dnsupdate.php?dn=" & str_Domain & "&pw= " & str_Pass & "\""
return 3600
end idle
------------------------------------------------------
なにか間違っている個所がございますでしょうか??


247 :
すみません訂正です。 curlコマンドが抜けていました。。
---- ソース ---------------------------------------------
set str_Domain to [ドメイン名]
set str_Pass to [パスワード]
on idle
do shell script "curl \"http://free.ddo.jp/dnsupdate.php?dn=" & str_Domain & "&pw= " & str_Pass & "\""
return 3600
end idle
------------------------------------------------------

248 :
"&pw= "
末尾のスペースはソースそのまんま?

249 :
すみません!! スペースはありません。

250 :
>>247
log Result
で結果くらい見てみたら?
あとメタ文字使わんで、quoted form ofで繋ぐ。
パスワードはhttpで送って大丈夫なのか?

251 :
このバカはコピペすらできんのか。

252 :
ドメイン、IPアドレス、パスワードのセットで登録するみたいだけど?

253 :
>>250
あとメタ文字使わんで、quoted form ofで繋ぐ。
  > 勉強になります。
パスワードはhttpで送って大丈夫なのか?
  > ん?違うんですか??
  -----------------------------------------------------------------------
  4.IPアドレスの自動更新
  定期的に自動で更新するには、 HTTPクライアントから下記URLを読み込んでください。
  http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード
  (無料サービスの場合は http://free.ddo.jp/......)
  IPアドレスはページにアクセスした端末に設定されます。 プロキシを中継した場合はプロキシのIPアドレスが設定されてしまう 場合がありますのでご注意下さい。 IPアドレスを指定する場合は
  http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード &ip=xx.xx.xx.xx
  (無料サービスの場合は http://free.ddo.jp/......)
  として下さい。 IPv6アドレス(AAAAレコード)を指定する場合は
  http://ddo.jp/dnsupdate.php?dn=ドメイン&pw=パスワード &ipv6=xxx:xxx:xxx:xxx:xxx:xxx:xxx:xxx
  として下さい。
  -----------------------------------------------------------------------

254 :
>>253
なんつーか、君には早いと思うんだ
素直にWhat's Up!ってフリーウェア使ったら?
ログも出さないしコピペすら合ってるかわからんから上のソースはいちいち確認せんけど
うちの環境では普通にcurlでうまくいってるから100%どこかおかしい
まあ提案としては、きっちりエスケープできてない気がするから
独立したシェルスクリプトをつくって(.shで保存して)それを呼ぶ形にしてみたら〜

255 :
>>254
What's Up!なんて糞アプリ使うやついねぇの分かってるから自作しようとしてんだろ
つーか、AppleScriptのスレでフリーソフト使えとか馬鹿なの?
お前、>>253の質問の意図あんまわかってねーだろ? ド低能。

256 :
罵倒は良くない

257 :
>>255
>AppleScriptのスレでフリーソフト使えとか馬鹿なの?
「使えるものはなんでも使う」って基本姿勢はあるかも

258 :
>>255
正論すぎてふいたw

259 :
これはひどいw
つらつら書いてる暇があったら教えてやれよww
実質ワンライナーだろ

260 :
まずTerminalで試して次にrunハンドラのdo shell scriptで同じ事ができる事を確認する
それをidleハンドラに置き換える
って段階を踏まずにいきなり完成系から書くから原因がわからなくなるのさ

261 :
あー
>>247は2つの変数がrunハンドラで代入されてるけど、
トップレベルでのglobal宣言またはidleハンドラでのglobal宣言が無いので、
idleハンドラ内では未定義扱いになってるんだな

262 :
>>261
  247です。
  変数のスコープというか、AppleScriptでの変数の扱いをよく理解出来ていませんでした。。
  下記のソースで、ちゃんと更新が出来ました。
  ありがとうございます!!
-------------------------------------------------
global str_Domain, str_Pass, str_Cmd
set str_Domain to "DOMAIN"
set str_Pass to "PASSWORD"
set str_Cmd to "curl \"http://free.ddo.jp/dnsupdate.php?dn=" & str_Domain & "&pw=" & str_Pass & "\""
on idle

do shell script str_Cmd
return 3600

end idle
-------------------------------------------------

263 :
bash ← ってどう読むの??
ボーンアゲインシェル?
バッシュ??

264 :
ググれよカス

265 :
>>263
>bash
ばっしゅ。
ビーエーシェルって言い方を最近聞かなくなった気がする

266 :
なんなんだよ最近
コピペもできないわググりもしないわ
クソみたいなのが湧いてくるな

267 :
まぁまぁ

268 :
>>263, 265
俺もバッシュていうな
ボーンなんとかは言ったことねぇw

269 :
scriptオブジェクトを呼び出す時に、任意の文字列でオブジェクト名を指定することはできませんか?
set hoge to script "nini"
のようなことをしたいんですが。

270 :
run script はどうだろう?

271 :
setしてその後どうしたいのかよくわからないが、
Script FactoryさんとこのOSAX使う手もあるよ
ModuleLoader
ttp://www.script-factory.net/software/OSAX/ModuleLoader/

272 :
>>270
変数を共有しないため、できそうでできなかったっす。
>>280
別ファイルに分割せずにしたいっす。

273 :
script Hoge
property hogeprop : "hogeprop"
property name : "Hoge"
end script
script Manager
property objects : {}
on add(obj)
set my objects to my objects & {obj}
end add
on fetch(str)
repeat with obj in my objects
if str is obj's name then
return obj
end if
end repeat
end fetch
end script
set oldHoge to Hoge
set oldHoge's hogeprop to "hogehoge"
tell Manager to add(Hoge)
set newHoge to Manager's fetch("Hoge")
newHoge's hogeprop
自分には>>270と、これくらいしか思いつかない。
AppleScriptってAppleEventにコンパイルする言語だから、
動的な事をするのが難しいんだよね。
runscriptと文字列処理を幾重にも重ね合わせた事有るけど、
自分で書いてるのに意味不明過ぎてワロタ。

274 :
>>273
おぉ、擬似連想配列的なやり方ですか。
言語機能上、素直にはできなくて、工夫が必要なんですね。

275 :
任意の文字列とスクリプトオブジェクトとの関連付けをどうするつもりなのかが見えない
各々のスクリプトオブジェクト内で定義する形なら俺も>>273みたいな方法しか思い付かないわ
どうやったって連想配列っぽくなる
単にオブジェクト名と同じ言葉を文字列で指定したいだけなら、
もっと単純にできるけども

276 :
すまん煮詰まってしまった(誤用)ので質問させてくれ
iTunesで曲を右クリックすると出てくる「iTunes DJで次に再生」をスクリプトからやらせたい
前提はiTunesがactivateしててその曲がすでに選択済みかつ再生中
UI Scriptingで現在選択中のelementを右クリする方法がよくわからなかったのでとりあえず
tell front window of process "iTunes"
scroll area 3's outline 1's row whose static text's value begins with "再生中"
と行を絞り込もうとしたんだけどエラーが出る
次の方法ならとりあえずstatic textを全回収できるんだけどそこで詰みました
set labels to value of scroll area 3's outline 1's rows's static text

277 :
あれ、もしかしてSystem Eventsでコンテキストメニュー操作って無理なのか……

278 :
>>277
正解

279 :
Gmailでメール送信するのをMail.appとか使わずに実現したいんだけど、
もしかして無理? 添付も付けたい。

280 :
根性次第、諦めたら負け

281 :
VBだと簡単にできたからapplescriptでも簡単にできないかと思ったが、根性しだいか。

282 :
UIスクリプティングでがんばるかバックグラウンドで自動処理できるクライアントを探す

283 :
VBではどういう手法を使ったの?

284 :
VB Gmail で検索
これとは違う方法でもスクリプト組めたよ、昔。

285 :
VBとか、特に最近の.NetFrameworkを使ってる物は、
アプリケーション自体を作成出来るようにして有る、
というかライブラリでフォローしてるので、色々出来る。
AppleScriptは、基本的にアプリケーション間の連携の為に存在しているので、
それ単体で何かしようとするのは割りと難しい。
do shell scriptとかOSAXとかScriptingBridgeとか何らかのアプリを呼ぶとか、
そういう方向で頑張りましょう。

286 :
AppleScriptは話し言葉の文法が逆に障壁になるw
一見初心者に向いてそうに見えるが、ちょっと思い通りのものを作ろうとすると、
結局内部のコンピュータ動作の仕様を意識をせざるを得ない。
今だったらJavaScriptの文法でやってくれた方が、ずっとフレンドリーだね。

287 :
ttp://docs.komagata.org/4724
Gmail に sendmail してる記事を発見。
これができれば、あとは簡単かと

288 :
>>287
そういう情報待ってました! 面白そう! ありがとう!
できそうだね。いやー、すげー嬉しい。

289 :
どなたかファイルの入っているフォルダをゴミ箱を経由することなく完全に消去する方法を
ご存知ないでしょうか。RAMディスク上で作業をしているのですが、しょぼいマシンなので
RAMディスクの容量を稼げません。毎度毎度ゴミ箱を確実に削除するのは面倒です。
なにかいい方法はないでしょうか。

290 :
まずどうやってRAMディスクをつくってるのかな?
やりたいのはRAMディスク上の任意フォルダを一発で削除したいってこと?
RAMディスク作り直しでの一括クリアじゃダメってことなんだよね?

291 :
>>290
RAMディスク作り直しがゴミ箱を空にするのと同じくらい面倒なような、、、、。
使っているのは適当に調べたEsperance DV for Macです。

292 :
それならターミナルで
$ rm -R hogeFolder
でできるから、あとはAppleScriptからdo shell scriptなりなんなりでどうとでもなるよ
注意としてはrmは強力なコマンドなので変な入力をしないように気をつけること
あとはがんばってね
何かあれば>>1のとおり質問して

293 :
別の階層に消したいフォルダと同じ名前の空フォルダ作って、
それをドラッグしてきて上書きしちゃうとかは?

294 :
ttp://forums.macrumors.com/showthread.php?t=259323 の下の方に即時削除のスクリプトあるから試せば

295 :
RAMディスク内の.Trashsのアクセス権をどうにかする

296 :
>>292
あまりグダグタ書いてもあれかと思い書かなかったが、当然それはやった。
でも、「フォルダ」は削除できないことがある。
で、やはり、>>294に近いスクリプトになったが、ただフォルダ(とその中身)を
消すだけにたいそうなスクリプト書くのもどうなのかと。
aFolderがフォルダーと仮定して
tell application "Finder"
set aFolder to selection as alias
do shell script "rm -rf " & quoted form of POSIX path of aFolder
end tell
で消えるフォルダもあれば消えないフォルダもある。
削除できない理由が知りたい、という話なんだけど。
実際にフォルダーを消してみて、百発百中完全削除できてるの?

297 :
スマン。追加。
たとえば上記のようなスクリプトをスクリプトエディタ上から実行すると削除できる。
上記のスクリプトを含むドロップレットを作成し、ドラッグアンドドロップすると削除できる。
そのドロップレットにドラッグアンドドロップするようなスクリプトを作って実行するとエラーを吐く。
Xcodeで作ったプログラム内に>>296のスクリプトを直接組み込んでも、ドロップレットを
作ってそこにドラッグアンドドロップするように組んでもエラーを吐く。
これ、どういうことなのかと。

298 :
とりあえずエラー番号とメッセージくらい貼ろうぜ
そのスクリプトだとselectionが空だったり複数だったりするとエラーになるだろうがそれのことじゃないよな?
あとドロップレットならできてるようだがそれではダメな理由は?

299 :
>>296
フォルダが消せなかった時に、それをターミナルから rm -r するとどうなりますか?
消せないならどういうエラーが出ますか?
アクセス権的な問題なら sudo を噛ませるってことになりそうだけど、それはやりましたか?

300 :
フォルダアクション内でリピート処理をしているのですが、
最初の1ファイルを処理したところで止まってしまいます。
ここでよくわからないのは、適当なところにdisplay dialogを入れてやると問題なく動作することです。
何らかの処理に時間がかかっているためかと思い、delay 1や do shell script "sleep 1"
を挟んでみたのですが、改善せず。時間を増やしてみてもやはり止まります。
他方、display dialog giving up after 1だと動きます。
このようなケースで考えられる原因は何かありますか?

301 :
補足です。
「最初の1ファイル」とは、
複数ファイルを同時に入力した場合や短時間に複数ファイルを入力した場合に
最初の1ファイルを処理したところで止まってしまうということです。

302 :
>>301
実際のスクリプトがないし、そのフォルダアクションをどう使ってるのかわからないので
答えようがないけど、可能性としてはなにかの処理をして多数のファイルを一度に
フォルダアクションのついているフォルダに突っ込むことになり処理が追いついていない
んじゃないかなあ。いずれにしてももっと具体的に質問とコードを晒さないと答えられない
と思う。フォルダアクションじゃないとだめなのか? 普通はそういう場合ドロップレットに
ドラッグアンドドロップだと思うのだが。状況がわからん。それからコードは100行くらいは
書いているのか? それとも単純な20行くらいのものなの?

303 :
うん答えようがないな
フォルダアクションは10.6のころに多少改善されたがそれでも単純な通知とか以外の目的で使うのはあんまり勧められない

304 :
なんかマルチスレッド周りが原因なのかねぇ?
1つずつファイルを投入すれば、普通に処理されるけど、
複数だと、多重に処理が走って、デッドロック的な何かで処理が止まるとか。
でも、DisplayDialogという形でGUIスレッドを挟むと、
多重処理がGUIスレッドでブロックされてDisplayDialogを抜けると、
複数のファイルをリストか何かで纏めて貰えるから、処理が出来る、とか。
フォルダアクション使った事ないから、思いっきり推測だけど。

305 :
>>300
どういう環境で実行してるの?
アプリにして実行しているのか、
単純にフォルダアクション設定したフォルダにドロップしてるだけなのか
それとも他のアプリを使って処理の一連でフォルダアクションしてるのか
それともXcodeでapplescriptアプリケーション作ってその中でフォルダアクション
をかませてるのか。
その「処理」は何をしてるのか
他の汎用アプリをapplescriptからコントロールしているのか
applescript、もしくはファインダーくらいでコピーとか名前の処理とかするくらいなのか
考えられることがありすぎて答えられんな。

306 :
もしくは、display dialogしてるアプリケーションがactivateなりtellなりされてないとタメ、とか。

307 :
みなさんありがとうございます。
Script自体は結構な長文な上、原因の見当がつかないためベタ張りになってしまうので、
抽象的な質問になるのを承知で控えました。
録画ファイルの自動エンコードやフォルダ分け処理をしています。
基本的には完全放置でフォルダを監視したいのでドロップレットではイマイチです。
途中にやや怪しい箇所があったので書き換えたところ最初の1ファイルで止まることはなくなりましたが、
やはり多数のファイルが入力されると途中で止まってしまうようです。
全体をくくったtry on errorにもひっかからないので、
止まった場合、そもそも処理に突入していない感じがします。
そこで
on adding folder items to this_folder after receiving input_items

on open input_items
tell application "Finder"
set this_folder to (parent of (path to me) as text) as alias
end tell
としてドロップレットに書き換え試してみたところ、こちらは問題なし。
display dialogを挟むとなぜ動作するのかという疑問は残りますが、
フォルダアクション自体に問題があるのかもしれません。
もっとも、多数のファイルが実際に入力されることはまずあり得ないので、
とりあえずはこのままでいこうと思います。

308 :
>>307
だから〜スクリプト全体の流れというか概要を書かないと誰にも分からないんだよ。言葉で説明できないからちゃんと動くスクリプトが書けないんじゃないの?

309 :
本人がもういいって言ってるんだからさー

310 :
Safariに表示してるWebページのボタンとかテキストフィールドをいじるのってJavaScript使わないと無理ですよね?

311 :
>>307
おれも>>308-309に同感だがひとつ
ドロップレットなら動くということであればフォルダアクションでドロップレットを呼び出したら?
フォルダアクションがファイル書き込み終了までちゃんと待ってるって前提だが
フォルダアクション→スクリプトを起動→フォルダアクションとは独立して指定フォルダの内容を取得して処理
>>310
無理じゃない
具体的にはUI Scriptingを使う方法と、Safariから少し離れてもいいならdo shell scriptでcurlを呼び出す方法が使える
何をしたいかにもよるが

312 :
>>307
なるほど。
taskenc.vbsとか参考になるような気が。
処理が重ならないようロックするファイルでも作って処理待ちすればいいよ。
Applescriptがそれだけわかる人なら
簡単なvbsも仕組みくらいはわかる。
仕組みだけパクればいい。
ちなみに録画システムはどんな感じ?
そっちのほうが興味津々。
よく知らないけどrecpt1とかたたく?

313 :
>>311
あーなるほど。ボタン等の要素を指定するんじゃなくて、キーボードの操作をエミュレートしてtabやenter等を使っていくんですね。
Webページの要素の位置が分かるわけじゃないからマウスを使うのは厳しそうですし。
たしかにとりあえず使えそうです。JavaScriptはまだ勉強していないのでこれで行こうと思うます。
ありがとうございました。

314 :
>>313
「ボタン等の要素を指定」もできるよ
Accessibility Inspector.appで検索

315 :
>>307
フォルダアクションは多重起動しないんじゃないかな?
何か追加された時点で起動するから、
スクリプト起動後input_itemsに入らなかったものは
無視される気がする。

316 :
>>315
Folder Actionはフォルダ変更検知をトリガーにフォルダ内容から差分アルゴリズムで
パラメータを生成してるから、元々input_itemsに信頼性は無いよ。
数百項目をフォルダにドロップしてみれば判るけど、メッセージが分割されたり、
遅れたり、一部が欠けたりってのがランダムに起こる。

317 :
>>314
うわ、Xcodeにこんなの入ってたんですね!
もっと早く知りたかった・・・。
めちゃくちゃ便利です。ありがとうございます。
もっと早く知りたかった。

318 :
プログラマーに必要な資質
それは、根気、意地、捨て身

319 :
馬力

320 :
ボタンを叩く力

321 :
いろいろありファイルをグローバル変数に持つときはかならずPOSIXのテキストで
持つことにした。
使うときだけエイリアスにもどす。
do shell scriptの時はそのまま使う。
1000行超えるスクリプトをいくつも行ったり来たりするそれなりのものを作る人
にはおすすめ。

322 :
ってそれ普通じゃね?
エイリアスとは簡単に相互変換できるんで、その辺は好みの問題だけども

323 :
applescriptの変数は自動で適切な形に変換してくれて
便利だけど、きちんとasなどで整えないと
思わぬところでエラーになる。
たとえばファイル関係の変数のリストとかを型を意識しないでrepeat with inで
選別処理したリストから取り出した変数をこれまた適当に扱うとエラーになる。
最初、エラーメッセージを見てもコードを見直してもエラーの理由が
分からず、とても苦労した。

324 :
ボタンを押す力が足りねぇんだよ

325 :
>>323
それ変数じゃない

326 :
AppleScriptに詳しい方いますか!?
至急のお願いがあります!

327 :
もう10時間pcの前で待っているんだが。

328 :
俺からも相談するけどCDイジェクトを強制実行
する方法を教えてくれ。

329 :
>>328
つ 事務クリップ

330 :
強制実行ってどういう意味?
tell application "Finder" to eject (disks whose its ejectable is true)
じゃダメなのかな。

331 :
>>330
そんなようなことしてるんだけど、イジェクトできなかったり、1分とか異常に時間がかかったりするんだよ。
なんでなんだか理由が分からない。
>>329
display dialog "CD出てきません。クリップで突っついてね”
これはかなり使える。メモメモ。

332 :
>>277
確かにSystem Eventsじゃ無理だな。rubyじゃないと。
tell application "Finder" to activate
right_cllick(100, 100)
selectMenu(1)
on right_cllick(x, y)
do shell script "/usr/bin/ruby -e 'require '¥¥''osx/cocoa'¥¥''; event=OSX::CGEventCreateMouseEvent(nil, 3, OSX::CGPointMake(" & x & "," & y & "), 0); OSX::CGEventPost(0,event);'"
do shell script "/usr/bin/ruby -e 'require '¥¥''osx/cocoa'¥¥''; event=OSX::CGEventCreateMouseEvent(nil, 4, OSX::CGPointMake(" & x & "," & y & "), 0); OSX::CGEventPost(0,event);'"
end right_cllick
on selectMenu(n)
tell application "System Events"
repeat n times
keystroke (key code 125)
end repeat
keystroke space
end tell
end selectMenu

333 :
>>332
¥は半角の\に変えてくれさい。

334 :
>>333
ruby -r osx/cocoa -e ... とするとバックスラッシュを使わなくて済む

335 :
後はquoted form ofを使うとか
そもそもrubyだったら囲み表現が色々あるしな

336 :
>>334-335
ありがとー。参考になる。というか、お前らそこまで詳しいなら>>277に教えてやれよw
あいつコンテキストメニューが出せないって泣いてたぞ。

337 :
頭のおかしい人がいると聞いて

338 :
>>327=>>331=>>336かなw

339 :
弱体脂肪肝が小手先の理屈こねてもダメダメなんだよ
グランド10周 !

340 :
>>336
RubyCocoa使う方法はちょっとググりゃ出て来るからなー
追加質問でもあれば誘導するつもりはあったけど、無かったので流れただけ

341 :
276だけどなぜいまさら槍玉に挙がったのか理解できん
この程度の質問をしてくる人になんで上から目線で物言われなきゃならんのか……
あのときはSystem Eventsでやる方法や自分の見落としがあれば知りたかったがなさそうだったので277で自己完結してしまった
その後レスしなかったのはすまない。確認させてくれた>>278に感謝
結局代替手法を自分で実装しました

342 :
>>341
>>336はユルいんだよ。>>327-328,331を見れば分かるでしょ。
>>337も何か言ってるじゃん。
でも、ユルい人はそれなりに気を使ってるんだと思うよ?たぶん。

343 :
>>341
問題ってのは目の前のそれが解決してはい終わりじゃないんだよ。
自分が思った疑問なり問題なりを結果報告するなり、コードで示すなりして形に残し、
後に他の誰かが同じような問題にぶつかった時、助けになるようにしておくんだよ。
そして、その誰かは将来、別人となった自分かもしれない。
いくら技術力や知識があっても、そういう意識が欠如していたらプログラマーとして
恥ずかしいと思って欲しい。
俺の書き込みの意図はそういうところにあるんだけど、ここまで反発されるとは思わなんだ。

344 :
>>343
あなたの書き込みがどれかは知らんが少なくともそういう意識は持ってるつもり
結局おれ自身はここでSystem Eventsでは右クリやその後の操作ができないということを確認したにすぎないが
>>332なんかが後の人のためになりそうなコードを書いてくれてるし、それでいいんじゃないのか?
自分は使わなかったけれども
あとここでは晒したことはないがAppleScript関係のサイトやってるから情報共有はだいぶやってるよ
取り立てて336を責めたいわけではないのでなんか申し訳ないが、ググればわかる疑問を書かれてもなというのが正直なところ

345 :
>>341
質問しといて聞きっぱなしかよって(>>343みたいな)状況がたまにあるのも確かだけど、
>>276-278の流れがそうだとは思わない
問題点は見えてた様なのでシンプルに回答してその後の>>340という感じで、
自力でどうにかしたんだろうなと思っていた
だから気にしなくていいよ
>>332がなんで今更拾ったのかは知らんが、別に槍玉に挙がったってのとは違うんじゃない?
>>336が余計な事言ったというだけの事
>>343
だったら泣いてたぞ、とかわけわからん事書かなきゃいいのに

346 :
>>345
あーありがとうなんか救われたわ
泣いてたのはおれだけどw、343も悪気があったわけじゃなかろうし
こんなつまらん話引っ張っても顰蹙買うと思うのでこの話はここまでということでいいかな
そういうわけで次の質問ある方どうぞ……

347 :
申し訳ない s/343/336

348 :
test

349 :
少林寺みたいに、指先を鍛えないとな

350 :
どうしてもわからないので教えてください。
AppleScriptをXcode3.2でプログラミングしているのですが、
自宅のマシンと会社のマシン両方でコーディングしています。
自宅がライオンで会社が雪豹。AppleScriptで操作するプログラムが
微妙にバージョンや名前が違っていてうまく両方で動かせません。
こういう場合、どうすればいいんでしょう。
使われるアプリケーションのバージョンによってもパネルの配置が
変わっていたりしてGUIスクリプティングとかもバージョンに
よって変えたいんですが……。

351 :
>>350
両方でコーディングしかつ両方で使うということかな?
アプリのバージョンはpropertyなどで取得できるので、if文で挙動を変えればOK
自動で判定するのが面倒だったり自信がなかったらスクリプトの最初にdialogで分岐させればよい
GUI Scriptingと書いてるのでわかってるとは思うけどある程度はだだ書きせざるをえないけどしょうがないね
この辺のキーワードでググってわからなかったらまたどうぞ〜

352 :
どのレベルかよくわからんので一応補足しとくと
if (会社の環境) then
--会社での処理
else
--自宅での処理
end
というようなことだからね
この書き方でも共通の部分はユーザ定義ハンドラにしておけば無駄は省ける
全体を丸ごとifで囲むか処理ごとに判定させるかは目的による
あと>>1を読んでくれ

353 :
>>351->>352
ありがとうございます。
>>351
そうです。現在は主に10.4で動かしていて、コーディングは10.5でやってます。
今度、10.8が会社に導入されるので、当然エラーが予測され、それを少しでも
避けるために、自宅にある10.7で動作チェックをしている状態です。
10.7以降でafpの挙動が変わるということだったのでビクビクしていましたが、
自作アプリ自体は10.7でも動き、ほっとしています。
やることはだいたいわかりましたが、コーディングしたあと、
Xcodeならコマンド-Kとか、スクリプトエディタならコンパイルすると
今、コーディングしている環境にないアプリがコード中でtellされていると
「○○○はどこにありますか?」と聞かれたりして困ってしまいます。
あれはどう対処すればいいんでしょうか?
同じアプリなのにライオンバージョンと雪豹バージョンで名前も
GUIも違い、10.8もまたアプリ名が違っている可能性もあり(〜Premiumみたいな)、
困ってます。具体的なアプリ名はご勘弁を。

354 :
OSのバージョンごとにスクリプトを別ファイルにして、
実行する時にOSのバージョンチェックでスクリプトをロードすればいいじゃん?

355 :
>>353
どんな命令が実装されてるかとかはアプリケーションによって違うので、
実際にインストールされてない環境ではコンパイルも通らないのでそういう表示が出るんだけど、
tell application ~ のところが違うとアプリケーションが特定できないわけだね
構成がまるっきり違うなら>>354みたいに分けた方が早いけど、
アプリケーション名は違うけどパスは一緒みたいな場合はパスで指定したりとかもできるよ

356 :
強くボタン押せばいいんだよ

357 :
>>356
いいかげんにしろ

358 :
画面を殴れ!

359 :
つまらん

360 :
質問です。ファイルメーカーで投資信託の管理をしていてヤフーのサイトからその時点での基準価額を引っ張ってくるのに
ファイルメーカー内のスクリプトからアップルスクリプトを呼び出して使っていました。そのスクリプトは昔ここで親切な方が教えてくださったものです。
そのアップルスクリプトの参照先のヤフーのアドレスやソースが変わってしまったので参照できなくなり、
書き換えようと思ったのですが私にはできませんでした。もとのスクリプトは
set theCode to the clipboard
set theNumber to count theCode
set theURL to "http://quote.yahoo.co.jp/q?s=" & theCode
set theCurl to "curl -s " & quoted form of theURL
set theIconv to " iconv -c -f euc-jp -t utf-8 "
if "=" is in theCode then
set thePerl to "perl -ne 'if( m{<td nowrap align=center>[0-9]+:[0-9]+</td><td nowrap><b>(.*?)</b>} ){ print qq{$1} } '"
else if theNumber = 8 then
set thePerl to "perl -ne 'if( m{<td nowrap align=center>[0-9]+/[0-9]+</td><td nowrap><b>(.*?)</b>} ){ print qq{$1} } '"
else
set thePerl to "perl -ne 'if( m{<td nowrap align=center>[0-9]+:[0-9]+</td><td nowrap><b>(.*?)</b>} ){ print qq{$1} } '"
end if
set theText to do shell script theCurl & " | " & theIconv & " | " & thePerl
以下略(theTextをファイルメーカーに引き渡す)
でした。現在のヤフーの参照先は、たとえばtheCode=998405.Tのときは http://stocks.finance.yahoo.co.jp/stocks/detail/?code=998405.T
で、そのソース内の <td class="stoksPrice">753.72</td> の部分の数字だけを取ってきたいです(この数字が時間によって変化する)。
このアドレスとソースの変化を元に、書き換えたらよさげなところを書き換えてみましたが、私の能力ではtheTextがからっぽになってしまいます。
どこをどうなおしたらよいか、なにかヒントをいただけたらありがたいです。

361 :
curl -s url | perl -pe 'm{<td class="stoksPrice">(.*?)</td>};$_=$1'
こんなのでいけるんじゃないかな。あと、iconvは不要でしょ。

362 :
>>361
ありがとうございます。perlの部分は全然わからないまま
言われた通りにしてただけなので、不要かどうかとかよくわからないのですが
家に帰ってから調べつつやってみます。

363 :
>>361
家に戻ったのでやってみたらちゃんと動きました。ありがとうございました。
perlの初心者向けサイトを読んでいたら、意味も何となく分かりました。
ちょっとだけperlってプログラム言語というだけでビビっていましたが、
正規表現がある程度分かるならそんなに敷居が高いわけじゃないような気がしました。
スレ違いの質問だったかもしれませんが勉強になりました。ありがとうございました。

364 :
キーボードに熱いコーヒー掛けてみろ

365 :
うちのNASが本当に糞でapplescriptのduplicateとかmoveを受け付けない。
しょうがないのでdo shell script "cp 〜"みたいなことしてるんだけど、
そうするとプログレスバーが出ないから、でかいコピーをしていると
コピーできてるんだかどうだかわかりゃしない。なんかいい方法ないかね。

366 :
ターミナルを開いてそこで cp -v や rsync --progress を実行するようにする

367 :
>>366
vオプションなるものを初めて知ったアホです。そんな土素人にヒントをあとひとつ。


キーを叩くように打てとかそういうのはナシで。

368 :

do shell script "cp 〜"
のとこを
tell application "Terminal"
activate
do script "cp 〜"
end tell
に置き換えるくらいでいけるんじゃ?と思って書いたけど...

369 :
なんか動転して -v 入れ忘れたw

370 :
>>368
はじめてターミナルapplescriptから触ったけど、面白いね。
今後は do shell script と tell application "Terminal" to do script を使い分けるぜ!
感謝!!
しかし、こんな楽しい言語をアップルはなきものにしようとしてるんだもんなー。いけすかない。
この前、ふとエラーメッセージ見てて思ったけど、エラーメッセージも本当に
自然言語に近いよな。きちんと変数とか書いておけば素人でも意味が分かる。
さあWIN8先生と8350でも買いに行くかな。

371 :
うちはまだ10.8にはしてないが
10.8のスクリプトエディタって未コンパイル状態で保存できる
というのを今日知った
ちょっとうらやましい

372 :
AppleScript
もっと高速にならない?

373 :
なりません
ちゃんとアルゴリズムは最適化してるんだろうな
AppleScriptの特徴や特有の手法も踏まえて

374 :
>>372
あんたのmacが遅いんじゃない?
それはそうと最近whoseフィルターにはまってる。
たとえばwindow内にtab viewがひとつしかないとき
item 1 of (every tab view of window 1)
というような指定ができる。
これのいいところは同じ構造をもっているものについては
名前で指定しているわけではないので
簡単にスクリプトが流用できる。
tab viewの中に同じ構造のtab view item
があるようなときとても便利。
異論はおおいに認める。

375 :
アップルスクリプト
オートメータ
アドビ系のアクション
MS オフィス系のマクロ
全部連動させたい

376 :
>>375
できるやん

377 :
>>374
whoseでフィルタ参照するのは至極基本的な話だけど、挙げてる例がよくわからん
>item 1 of (every tab view of window 1)
whose使ってないし、これじゃ「tab view 1 of window 1」と同じじゃね?
whoseの使い所は単純な名前または順番による参照ではなく、
その他の属性やそれらを組み合わせた条件で参照を特定できるところでしょ

378 :
item 1 of ((every tab view of window 1) whose...
と書こうと思って忘れたんだろ

379 :
>>376
簡単にできるのない?

380 :
>>379
ググれカスおよび>>1

381 :
あるよ

382 :
あー最近は他の環境でプログラミングしてて来てなかったけど、過疎ってるなあ。
ところで、今度、部内でちょっとしたデータベースを作りたいと思ってる。
データベースに収めるデータは画像とテキストを1案件にまとめてデータを作成する予定
どういう風に作ればいいかな。
素人考えでは画像フォルダを作成し、そこに画像をストアしていき、それとは別にXML的な
テキストデータを作り、画像のパスもそこに埋め込んで、XMLを検索する。みたいな。
Databaseイベントなるものもあるみたいだけど、よくわからんっす。

383 :
つーか、使えるな。Databaseイベント。他のところでも使ってみようか。ぜんぜんファイルメーカーいらないな。俺の用途だと。

384 :
どうせ、グラマーはいつでもカキコできるんだから
もっとあげといてくれっ
ちゅーの
(・))((・)/

385 :
プロ グラマー
あげ

386 :
すいません、結構基本的なことでしょうが^^;
tell application "iTunes"
...
repeat with i in x
...
set fp to open for access POSIX file "/a/b/c.jpg"
...
end repeat
...
end tell
のopenがコンパイルエラーしてしまいます。
多分iTunesのopen勘違いされているのだと思うのですが、
repeat文の中にあるので。tell applicationを分割することが出来ません。
このように基本命令みたいなのを指すときにはどうしたらよいのでしょうか?
OSはMt. Lionです。

387 :
自己解決。
数日前にみてた >>4 が答えになっていました。
tell me to set fp to open for access POSIX file "/a/b/c.jpg"
あるいは
set fp to open for access POSIX file "/a/b/c.jpg" of me
とすれば動きました。

388 :
あ、4じゃなくて >>5 の間違え。

389 :
うん、つまずきやすいところだよな
解決したようで何より

390 :
スクリプト作成依頼も兼ねてないと人が集まらん
>>1
これもっと門戸を広げるべき

391 :
人を増やす必要なんかないだろ、ニワカが増えても困る
これ作って下さいお願いしますーばっかりになったらそれこそ人が減るぞ
>>1にこう書いてあってもたまにそういう安易な書き込みをするアホだっているのに……

392 :
>> 390
「アプリ探し」のスレで頼めば新設な人がコード教えてくれるよ(ただしフォーマット遵守)
ここは391のような人が他人と自分のスキルを比べて騙り合いたい場所だから初心者はお断りなスレ
そもそも>>1を読まない人はどのスレでも嫌われる

393 :
>>392
IP変わった
ニワカが増えると困るとは書いたが別に初心者お断りではないと思う
ニワカと呼ばれて嫌われるのは、別にAppleScriptに興味があるわけじゃなくて、自分の抱えてる糞みたいな問題を解決できると小耳に挟んでググりもせずここでそれを人任せにするようなやつだし
要はその「>>1を読まない人」だよね

394 :
かといって>>1を読め、というだけで飽き足らず過剰に煽る輩がたまに居るのもどーかとは思う
自戒も込めつつ
>>392
騙り合うってなんだか意味深な誤記だね、とか言ってみたり

395 :
Terminal.appですが、以下のようにしたいのですが、"window"はとれないのでしょうか?
tell application "Terminal"
set myTab to do script ""
set myWin to the container of myTab -- <--こいいうことがやりたい
...
...
...
close myWin
end tell

396 :
>>395
ここは読んでみた?
お望みのことができる気がする
AS Hole(AppleScriptの穴) By Piyomaru Software &#xBB; Terminal.app
ttp://piyocast.com/as/archives/category/application_control/terminalapp/
しかし自分も訊きたい
395みたいな、用語辞書でcontainされてると書いてあるclassを得るにはどううればいいんだろうか
この場合だと既知のtabからそれを包含してるwindowを得るには……?
tab&#x2002;n : A tab.
elements
contained by windows.

397 :
>>396
ありがとうございます。読んでありました。
書こうとしている内容は >>395 に書いたようなことですが、
お考えと全く同じで、なぜ親のwindowはとれないのか?ということを聞きたかったのでした。
logコマンドに食わせたりするとちゃんと item 1 tab of window id xxxx なんていうふうに知ってるのに。
少し脱線していきますが、
そのASの穴のようにログというか「処理の経過」を出したいのでした。
少し処理が長い(一個が重いand/or多数ファイルを食わせたら)ので、scriptが黙ってしまうのがどうも…と。
ASの穴でのloggerとconsoleを使う案は読みましたが、Terminalでできないのか?と考えてみたのです。
tell application "Terminal"
 set myTab to do script ""
 activate
 --delay
set myTTY to (tty of myTab) as string
...
...
close myTab
-- do script "\nexit 0" in myTab -- ASの穴案。exitの前に一度改行を打ち込んでおいたほうが確実。
ここで、
do shell script "echo 'abc\nxyz\n' >>" & myTTY
とやると、ログっぽいことはできます。
欠点はあって、Terminalなので何かキー、特にreturnキーを叩くとログに文字やshellのpromptが割り込んでしまいますし、
偶然 rm * みたいなことを打ち込まれたりするとshellが処理してしまうので問題があると思います。
本当はshell無しでTerminalのウインドウを開きたいのですが(その場合は >> /dev/tty ではだめですが)。

398 :
前の書き込み、close myTabは間違いですね^^; windowオブジェクトが必要(それで、 >>395 の疑問が出たのをすっかり忘れていました…)
連投で、チラ裏になっていきますが…
各shellは必ず別のttyが割り当てられるので、
set myWin to windows whose tty is (tty of myTab) -- becase all tty is unique
で親のwindowオブジェクトが取れます。
do shell scriptとして作れば必ずtab一個の新規windowが開くと思うので(あってますか?)、この用途が終わったらclose myWinしてしまっても迷惑をかけないはずです。
この文のwhoseの部分、ttyはwindowのtab elementのpropertyなのに動いてしまうのは、文法的にあっているんでしょうか?

399 :
ところで、windowは一意のid propertyがあるのですがtabにはないので、tabを特定するのにttyを使う(B参照)
A:
tell application "Terminal"
set myTab to do script ""
activate
set idWin to -1 -- not found flag
repeat with myWin in windows -- activateとここの一瞬の隙間にterminalの他のウインドウを前面にされたり、
-- terminal自身が前面でなくなると意図通りに動かない。
if (frontmost of myWin) then
set idWin to id of myWin
exit repeat
end if
end repeat
..
close window id myWin
end tell
B: tabオブジェクトそのものを比較出来ない
set myWin to -1 -- not found flag
repeat with aWin in windows
repeat with aTab in every tab of aWin
if (tty of aTab = tty of myTab) then -- (aTab = myTab) では絶対 true にならない
set myWin to aWin
end if
end repeat
if myWin >= 0 then
exit repeat
end if
end repeat
連投、長文失礼しました。

400 :
>>395
set myWin to item 1 of (windows whose tabs contains myTab)
これでいけると思う

401 :
>>399
> if (tty of aTab = tty of myTab) then -- (aTab = myTab) では絶対 true にならない
これは aTab が repeat with X in Y の変数だから、
tab 1〜n of window x ではなく a reference to item 1〜n of every tab of window x になってる
故に contents of aTab = myTab としておけば true にもなる
>>400
わざわざ item 1 of (windows whose 〜 ) なんてやらんでも、
window 1 whose 〜 で済むよ

402 :
例えば System Events だとフォルダ用に container、
GUI Scripting用に attribute "AXParent" なんてのがあったりするけれど、
AS汎用でこうすれば親が辿れる、みたいな仕組みは無いんだよね
でまぁtabの親のwindow取るだけならこんなんとか
tell application "Terminal"
set myTab to do script ""
set myWin to window 1 whose tab of it contains myTab

close myWin
end tell
必要ないと思うけど敢えてttyとやらを使うなら
tell application "Terminal"
set myTty to tty of (do script "")
set myWin to window 1 whose tty of tab of it contains myTty

close myWin
end tell

403 :
あ、日跨いだのでid変わったけど401=402です
ってどーでもいいか

404 :
>>402
>AS汎用でこうすれば親が辿れる、みたいな仕組みは無いんだよね
あるよ。
Object specifierのkeyAEContainer parameterが包含するobjectのobject specifier
tell application "Terminal"
set myTab to do script ""
delay 2
close <<class from>> of (myTab as record)
end tell

405 :
>>404
あんのかい!…これは恥ずかしい////
…ってかびっくりしたわ
でもなんかこれ、<<class from>> がコンパイルで from になるんだけど、
from の状態でもっかい再解釈入るとエラーになっちまうのね
はじめから from of と書いてても勿論エラー
なんだか微妙な扱いだな…
run scriptの中に収めるとか、テキストで保存するとか工夫しないと使い辛い

406 :
そんな小難しいことしないで、なんで素直に、全てのObjectはCore classみたいののsub classとかにして…みたいに
綺麗にやらんのかいな、…
 曖昧な書き方がたくさんできて、実行時エラーみたいのでわけがさっぱりわからない、で躓いて無駄に敷居高くしてる言語だと思ってる。

407 :
>>402
>>404
超参考になった! さんくす
テンプレ入りさせてもいいんじゃないかと思うわ

408 :
アクティブなアプリケーションのキャレットがあるテキストエリアのテキストを取得したいんだけどなんかやり方あるかいな?
やりたいのはMS WordとかCotEditorとかから、ショートカット一発でキャレットのある場所の単語を切り出して辞書.appで検索したいんだけど。
テキストを選択するのが面倒なんだよね…

409 :
perl使って文字列置換すると改行コードがLF→CRになってしまいます。
デリミタ使うのを避けたくてperl使ったんですけど、
改行コードも変換されてしまって困りました。
最終的に改行コード変換するためにデリミタ使わないと無理ですか?
set LF to ASCII character (10)
set CR to ASCII character (13)
set str to "test000" & LF & "test111"
display dialog "Original text" & return & str & return & ">LF exists=" & (LF is in str) & " CR exists=" & (CR is in str)
set str to do shell script "perl -e '$_=$ARGV[0]; utf8::decode($_);s/test/テスト/g; print $_;' '" & str & "'"
display dialog "Replaced text=" & return & str & return & ">LF exists=" & (LF is in str) & " CR exists=" & (CR is in str)

410 :
そのスクリプトちゃんと読んでないけど without altering line endings ってのが
用語説明、TN2065

411 :
>>410
おぉ!できた!
ありがとー!!

412 :
バイナリファイルの末尾についたゴミを取ろうと考えているのですが
そういう処理はアップルスクリプト(のドロップレット)で可能でしょうか?
内容をチェックする必要はなく、機械的に一定の長さだけ切り取りたいのです

413 :
>>412
簡単簡単
シェルスクリプトをくるめばOK

414 :
>>412
普通にStandardAdditions.osaxでできるよ。
例えば末尾10byte削りたいなら。
set f to POSIX file "/path/to/file"
set fileLength to get eof of f
set eof of f to (fileLength - 10)

415 :
>>414
ありがとうございます
そのget eofあたりの操作が調べても判らなかったので大げさですが目ウロコです
(調べ方が下手なだけとも言えますが)
1つ1つバイナリエディタで削除したっていいよな?と考えているところでした、
本当に助かりました
最終的に下記の形のドロップレットになりました
on open of target_files
  repeat with thefiles in target_files
   set f to thefiles
   set fileLength to get eof of f
   set eof of f to (fileLength - 10)
  end repeat
end open

416 :
>>409
あ…automatorのrun shell scriptでperlで文字処理書いてたけど、
s/ / /で $ で行末とマッチしない気がして、うまくかけなくて(よって行頭の^も効かない)、
ごく自然に\Rでマッチさせるしかないか…って\R使ってたんだけど、Macのperlって改行がLFなのか?
ってかautomatorから渡される時は\rなのか。

417 :
でもVBAでやったほうがよくね?

418 :
スクリーンショットの動画版の作り方教えてください

419 :
tell application "QuickTime Player"
new screen recording
end tell

420 :
ABC順の用語辞書でもあったらいいのにな
AppleScriptLanguageGuideは探すのが大変だね

421 :
ねーねー
OSX10.8ってAppleScriptユーティリティー使えない?

422 :
つーかguiスクリプト10.8でイチからやろうとするとOSギャーギャー騒ぐ。
休み潰して会社にきたのにマジムカつく。

423 :
ある意味平日にこんなトラブルに巻き込まれなくて良かったが。

424 :
どなたか、、、。
Xcodeアプリで使うプロパティリストは10.8ではデフォルトでどこに格納されるのでしょうか?
アプリは動きますが設定ファイルがみつからないorz

425 :
>>424
>Xcodeアプリで使うプロパティリスト
とはなんじゃらほい。NSUserDefaultsなPreferencesとか?
~/Library/Containers/(Application identfier)/Data/Library/Preferences
にあったりなかったり

426 :
>>425
そこってFinderからいくところのライブラリだよね?
ターミナルからいってみたけどみあたらないよorz
10.5までの場合、ユーザーフォルダのライブラリフォルダのPreferenceにBundlefire名.plistであったんだけどユーザーフォルダ内のライブラリフォルダがなくなってしまった
勘弁してくれよアップル。

427 :
○bundle identifier名

428 :
>>426
>ユーザーフォルダ内のライブラリフォルダがなくなってしまった

>ターミナルからいってみた
はイコールではない。LibraryはFinderで単に不可視になっただけだから
find . -name (bundle identifier名.plist)で探してみたら。あるいは更新日でとか

429 :
>>428
そうですね。なんでまたそんな面倒なことをするのか。
外だったのでスマホからの書き込みで適当だったけど、applescriptユーティリティって
10.8でメニューバーに表示できないのかな。メニューからapplescriptが
実行できて、とても重宝していたんだけど。とりあえずFastScript入れたら
メニュー表示はできた。自作スクリプトが組み込めるのかはまだ試してない。
フォルダアクション設定もなんか変。AppleTalkもなんか変。もうやめてほしいよ本当に。

430 :
まあ... いろいろと勉強不足としか言いようが無いな。仕事なら転職をおすすめ

431 :
>>429
/Users/hogehoge/Library/Preferences の事なら、
10.6からLibraryフォルダが不可視になってる
Finderの移動メニューでoptionキー押したら出てくる
openコマンドで直接開いてもいいし、或いはchflagsでnohiddenに設定しておけば普通に辿れる
AppleScriptユーティリティは10.5だか6だかでえでぃたと統合された
エディタの環境設定見てみろ

432 :
Libraryが不可視になった方は10.7からの間違いだた
訂正>>431

433 :
>>431
ありがとー。なんとかなりそうな気配。感謝です。

434 :
とりあえず10.8でも自作アプリが動くようになった。
最後は謎の動作不良があり、
該当のnibファイル内のオブジェクトが壊れていたようで、
削除し、再度同じ名前で作ってやったら動いた。
他のバージョンのOSでは動いているのでとても不思議。
結局、アドビのアプリなどの細かい挙動は修正したけど、
applescriptの基本的な部分では修正の必要はなかった。

435 :
>>430
Applescriptが仕事の人っているの?
というか、ここ意外に日本語のコミュニティでApplescriptをよく扱ってるところあるのかな。
孤立していて情報がない。

436 :
DTP系の連中がJavaScriptに移行したからS/N比は向上した

437 :
>>435
仕事の一部で使う人は少なくないんじゃないか?
その質問はExcelのマクロが仕事の人っているの?と訊くのと似ている

438 :
AppleScriptが仕事云々じゃなくて、IT系全般に適性なさそうだから転職しろってことだろ

439 :
>>435
ノシ
まぁ珍しいだろうね
今の仕事クビになったら、他でありつけそうな気がしない

440 :
>>439
おーどんなことやってんの?

441 :
>>436
DTP系だけど、自動化しようとしたら結局アドビだけでなく総合的にデータを扱わないといけないから
AppleScriptの素養はないといけない。一方で、AppleScriptさえあれば、ほとんどJavaScriptはいらない。
Automatorは、、、、、、、糞以外のなにものでもない、ということにしておく。

442 :
他と連携するためにAppleScriptからAdobe JavaScriptを扱うかたち。
AdobeのはAppleScriptだけでやれないことが色々と。

443 :
>>440
あんま詳しく書くと身内バレするんで…
GUI Scripting主体だから、
ASとしては傍流なんじゃないかな

444 :
でもね、95年頃からアップルが昔抱えてた野望にオープンドックというのがあってだな
書類中心で全てのソフトを自動で動かすって寸法だったんだが
金がなくて頓挫したんだよなぁ
たしか98年くらいにそんなんなってた

445 :
>>444
なんかあったね。そういうの。でもここにいるようなかなりハイレベルな
使い方するような人たちには向かない技術だったし、そうでない人には
意味が分からない技術だったような気がする。
でも、ああいう発想力こそ大切なのかなあとも思うけど。
ところで、Xcodeで作ったAppl;eScriptアプリケーションで一連の処理をしている場合、
処理を途中でキャンセルするにはどうすればいいんだ?Guiスクリプティングで操作に
失敗したときにストップしたいんだけど。今はアプリをFinderから強制終了してる。

446 :
iTunesで再生中のものを、一定時間スキップするようなスクリプトはありますか?
再生中のものを10秒進める、60秒進めるとかをAppleScriptで制御したいです。

447 :
と思ったらググったら見つかったわ
30秒進める
tell application "iTunes" to set player position to (player position + 30)
30秒戻す
tell application "iTunes" to set player position to (player position - 30)

448 :
>>446
10秒進める。
tell application "iTunes"
if ((player position + 10) > 0) then
set player position to (player position + 10)
else
set player position to 0
end if
end tell

449 :
ドラッグアンドドロップでファイルパスをtable viewに表示し、設定したり、コピーしたりすることは
できるようになったけど、シフトなどの修飾キーを押してドロップしたときだけコピーをするようにし、
その際、ドロップするまでカーソルアイコンをプラスマークとかにしたい。どうすりゃいいの?

450 :
フォルダー名をTextEditに書き出したいのですがやり方を教えて下さい
これで、結果蘭にフォルダー名が表示されてます
set FolderPath to (choose folder with prompt "フォルダを選択")
set NameList to (list folder FolderPath)
set AppleScript's text item delimiters to return
set NameList to every item of NameList as string
最終的には、下のように、2階層のフォルダー名を全てTextEditに保存したいのです
AAA(一階層目のフォルダー名)
001(二階層目のフォルダー名)
002(二階層目のフォルダー名)
003(二階層目のフォルダー名)
004(二階層目のフォルダー名)
BBB(一階層目のフォルダー名)
011(二階層目のフォルダー名)
012(二階層目のフォルダー名)
013(二階層目のフォルダー名)
014(二階層目のフォルダー名)

451 :
>>450
再帰的にフォルダ内のフォルダを探るハンドラ作って、あとはリストにして、
それを書き込むな。私の場合は。
AppleScript's text item delimiters とかいらんでしょ。

452 :
>>450
2階層目までファイルが存在しないのであれば
Applescript使わずにFinderウィンドウをリスト表示にして全てを選択後→キー
もう一度全てを選択してコピー&TextEditにペーストとかでもいいかもね。
(choose folder使うくらいなら)
Applescript使うならロップレットにした方が使い勝手がよさそう

453 :
find コマンド使って結果をお好みに編集した方が早いんじゃないの?
って最後まで作ってなくて書くけど
set FolderPath to (choose folder with prompt "フォルダを選択")
set NameList to do shell script "find " &amp; quoted form of POSIX path of FolderPath &amp; " -type d -mindepth 1 -maxdepth 2"

454 :
アンパサンドが化けたw
&amp; はただの & への読み替えお願い

455 :
みなさんいらっしゃるじゃないですか。
こちらもぜひとも、、、、、、。

456 :
checkModifierKeysをインストールするのがいやでなければ、それを使えば、
shell からModifierKeysの状況を調べられる。
http://lists.apple.com/archives/applescript-users/2011/Aug/msg00027.html
など参照。

457 :
>>455
あっちと違って君の質問はほぼAS以外の領分なんで難しーのよ
マウスカーソルの状態判別は昔やってみた記憶があるけど、変更するのはやった事無いなあ

458 :
>>457
あー、そうですかこちらもかなり調べたんですが、マウスカーソルの件は
call method でカーソルのオブジェクト?をいじる方法があるみたいかな、と踏んではいます。
で、調べが進まないのは、ドラッグアンドドロップのルーチンの中でさらに
キーを押す/押さないで動作を変化させる、というのをどう組み合わせたらいいか分からんのです。
この際マウスカーソルの変化は置いとくとしても。

459 :
450です
>>451
再帰的、ハンドラ、
目にした事があるだけで、使い方はさっぱりです
--set AppleScript's text item delimiters to return
改行して表示したいので削除すると見にくいのですが…
>>452
3階層目までありました
→キー でこんな事できるのですね知りませんでした
Dropletにするつもりです
>>453
これがシェルスクリプトですか?
UNIXコマンド?
検索すると-type b c l f とありました
-type d -mindepth 1 -maxdepth 2
-mindepth 1 1階層目
-maxdepth 3 3階層目までありましたので3に変更しました

460 :
"/Users/xxxx/Desktop/選んだフォルダー名//1階層目フォルダー名/2階層目フォルダーA
/Users/xxxx/Desktop/選んだフォルダー名//1階層目フォルダー名/2階層目フォルダーA/3階層目フォルダー001
/Users/xxxx/Desktop/選んだフォルダー名//1階層目フォルダー名/2階層目フォルダーA/3階層目フォルダー002
/Users/xxxx/Desktop/選んだフォルダー名//1階層目フォルダー名/2階層目フォルダーB
/Users/xxxx/Desktop/選んだフォルダー名//1階層目フォルダー名/2階層目フォルダーB/3階層目フォルダー101
/Users/xxxx/Desktop/選んだフォルダー名//1階層目フォルダー名/2階層目フォルダーB/3階層目フォルダー102"
こんな感じに結果が表示されました
ここから
2階層目フォルダーA
3階層目フォルダー001
3階層目フォルダー002
2階層目フォルダーB
3階層目フォルダー101
3階層目フォルダー102
このように取り出すにはどうすればいいですか?

461 :
最初のは検索して
set FolderPath to (choose folder with prompt "フォルダを選択")
set NameList to (list folder FolderPath)
set AppleScript's text item delimiters to return
set NameList to every item of NameList as string
tell application "Finder"
set aText to (NameList & return)
set aTextFile to open for access ((desktop as text) & "test.txt") with write permission
set aEOF to get eof of aTextFile
try
write aText starting at (aEOF + 1) to aTextFile
on error aErrorText
display dialog aErrorText
end try
close access aTextFile
end tell
これで保存はできましたが、1階層目しか書き出せません
検索するにも用語すら解ってないので、ヒントだけでもお願いします

462 :
3階層目まで、と決まっているなら、
選択したフォルダの中にあるフォルダのフォルダ名をすべて取得
を3回繰り返せばいいだけだよ。
そして、その文字列変数を結合、構成して書き込むデータを作り、
ファイルに書き込むだけ。
delimitersとかまだ難しそうだから使わないほうがいい。
set EveryFile to every folder of 〜
set FileName to name of 〜
repeat with i 〜
if exists then 〜
それからデータ型のリストとエイリアス。基本中の基本だよ。
AppleScriptって普通に書くと本当に自然言語みたいだからまずは
なにがしたいのか図にまとめて、それから素直にやるのが吉。

463 :
tell application "Finder"
set theFolder1 to every folder of (choose folder)
if (count of theFolder1) is not 0 then
set theFolderList to ""
repeat with i in theFolder1
set theFolderList to theFolderList & name of i & return
set theFolder2 to every folder of i
if (count of theFolder2) is not 0 then
set theFolderList2 to {}
repeat with k in theFolder2
set theFolder3 to every folder of k
set theFolder3NameList to ""
repeat with m in theFolder3 --3階層目のフォルダリストをテキスト化
set theFolder3NameList to (theFolder3NameList & " " & name of m) & return
end repeat
set end of theFolderList2 to " " & name of k & return & theFolder3NameList as Unicode text
end repeat
repeat with h in theFolderList2
set theFolderList to theFolderList & h
end repeat
else
set theFolderList to theFolderList & name of i as alias as Unicode text
end if
end repeat
else
display dialog "フォルダはありません"
end if
end tell
theFolderList

464 :
あら、階層表現すんのにスペース加えたけどなくなっちゃうのね。
まるで汎用性はないが、これの繰り返しが習得の早道だと思うわ。

465 :
なんか気になってチェックしたら、大言壮語した割に間違えてたorz 直ったけど。どう直すかは頑張ってね〜
冬休みですもんね〜w

466 :
>>462
ありがとうございます
set EveryFile to every folder of 〜
set FileName to name of 〜
repeat with i 〜
if exists then 〜
これらから検索して参考になりそうなページを見つけ
なんとかできそうかなと思っておりましたら
その後、一からスクリプトを書いていただき、ありがとうございます
今確認しましたところ結果には希望の形で表示されておりますので
どこが間違っているのか、今の私では解りませんが
返された値をみると細かく表示されておりますのでひとつひとつ理解して行きたいとおもいます
repeat with i 〜
i以外でもいいのですね
今更ですが、スノレパのアイコン整頓のバグをなんとか改善したく検索すると
AppleScriptで出来ると知り、こんな便利なものがあるならもっと他にもできるかなと
調べだしたのが、2週間前です
色んなページのScriptをくっつけて、サイドバー非表示&緑のボタンクリックするScriptを
Sparkに登録して便利に使ってます
10年前に発売されたAppleScriptの本でも買って読んだ方がいいのでしょうか?
親切すぎる>>462様 有難うございました。

467 :
tell application "Finder" to if year of (current date) is 2013 then display dialog "あけおめ!"

468 :
>>467
内蔵電池が切れています><

469 :
>>467
こんなワンライナー書けるんだな。本年もよろしく。

470 :
Adobe イラストレーターで、「非表示のレイヤーを削除する」スクリプトを組もうとしています。
tell application "Adobe Illustrator"
set countLayers to count every layer of document 1
repeat with i from 1 to countLayers
if visible of layer i of document 1 is false then
set visible of layer i of document 1 to true
set locked of layer i of document 1 to false
delete layer i of document 1
end if
end repeat
end tell

このようなリピートループだと、レイヤーを削除すると
変数iの上限値が(実際のレイヤー数 - 削除されたレイヤー数)を上回ってしまい、
エラー終了してしまします。
ループの中で、iを-1してみたり countLayersを-1してみたのですが、
変数のスコープの外なのか上手く行かず...
どなたかお知恵を貸して下さい
スマートで無いですが、エラーを無視させる方法や、「iとcountLayersが等しくなったらループを終了する」処理もありがたいです

471 :
repeat with i from countLayers to 1 by -1

472 :
これだとrepeatもifも不要
tell application "Adobe Illustrator"
tell document 1
set delLayers to layers that visible is false
set visible of layers to true
set locked of layers to false
delete delLayers
end tell
end tell
全レイヤーのロック外れちゃうけど
set visible of delLayers to true
set locked of delLayers to false
だとエラーになる

473 :
tell application "Adobe Illustrator"
tell document 1
set delLayers to layers whose visible is false
repeat with i in delLayers
set visible of i to true
set locked of i to false
end repeat
delete delLayers
end tell
end tell
repeat使っちゃったけどこれならいいんじゃないかな?

474 :
>>471
なるほど過ぎて目からウロコでしたw
ありがとうございました!
>>472-473
この場合、delLayersに代入されるのは数列なのでしょうか?
こんな使い方が有ったとは初めて知りました。
#プログラムは素人な物で、言い方が間違ってたらゴメンナサイ
条件にマッチするレイヤー等の情報を集めて、後で処理するのは
様々な場面で便利そうですね。勉強になりました。ありがとうございます!!

475 :
>>474
寡聞にしてイラレのapplescriptは知らないが、オブジェクトの複数形だから、
every layer of document 1 と同じじゃないかな。つまり、レイヤーのリスト。
レイヤーのリストがどんなものかはapplescriptエディタで実行してみればわかる。
とか? 

476 :
>>474
delLayersに代入されるのは>>475の言うとおりレイヤーそのもののリスト。
例えばその後に
set hiddenLayer1 to item 1 of delLayers
とやると変数hiddenLayer1に不可視レイヤーの1つめが代入される。(不可視レイヤーが存在するのが前提)
whose 〜(that 〜も全く同じ機能)はフィルタ参照と言って
アプリケーション側のオブジェクトを変数に代入するときに抽出条件を付けられる。
(アプリケーション側がフィルタ参照に対応してないとダメなようだけど)
受け渡す物を絞り込んだ分動作が高速になる。

477 :
さて、プログラムの中にある頻用するサブルーチンのハンドラを別ファイルにまとめて、
使用時にload scriptすることにした。
だが、ここで問題が。
いつもは思いつきで適当に my〜、〜of meを混ぜて書いてしまったり、ハンドラの引数に
またハンドラが書かれていたりするので簡単な検索置換では修正できない。
スクリプトは行数にして全体で8000行くらいあります。移動する予定のハンドラは40個くらいです。
A.1行1行まじめに確認しながら修正する。
B.AppleScriptでなんらかのスクリプトを作り、処理する。
C.○○という高機能エディタでああしてこうして〜以下略
D.そんなのはRubyかPrerlのワンライナーでイチコロ
どうするのが一番「面白い」でしょうねえ。

478 :
○○という高機能エディタをAppleScriptで操作してああしてこうして〜
って感じになるだろうから、B+Cになるんじゃないかな。
もしくは、AppleScriptの「do shell script」でRubyかPerlのコードを実行して〜
みたいな、B+Dか。
AppleScript的には、B+Cが面白いんじゃないかと。

479 :
>>478
ご回答ありがとうございます。考えてみたら、けっこう簡単だな。できた。頭の中では。
掃除して、風呂入ってビールでも飲みながら遊んでみますw ありがとうございます。
検索置換系の高機能エディタのおすすめあります?

480 :
>>479
sed

481 :
>>480
おお勉強意欲が湧いてきた! 素人ですまんw 午後から本気だす。

482 :
お騒がせしました。
mi.appで手動て30分くらいでだいたいできました。
スレチだけど、正規表現でキャプチャーグループで検索置換できるのは
試した中ではこれしかなかった。KEditorがAppleScriptに対応しているが、
キャプチャーグループに対応してない。
D案も少しやってみたけど、 ' のエスケープがよくわからないのとともに、
対象テキストをどうエスケープすればいいか検討がつかない。1字ずつ
チェックしてエスケープすんの?

483 :2013/01/16
デジカメデータを外付HDから何度か移動しているうちに
なぜかファイルの"作成日"と"変更日"が移動した日になってしましました
作成日はDeveloper Toolsでないと書き換えできない様なので
変更日をExifの撮影日に書き換えようと下記スクリプトを書きましたが
上手くいきません
on open DropObj
tell application "Finder"
repeat with ObjFiles in DropObj
do shell script "/usr/bin/exiftool " & DropObj's POSIX path
set modification date of file DropObj to do shell script "/usr/bin/exiftool -DateTimeOriginal" & DropObj's POSIX path
end repeat
end tell
end open
宜しくお願い致します。
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【Mac用】マッドアングラーな書き込みスレ part6 (725)
Macでゲーム phase 22 (298)
【Mac版】Adobe Photoshop総合スレ Part.1 (234)
MacでOpenOffice.org part3 (450)
Parallelsで様々なOSをうごかそう Part33 (418)
Mac 購入相談スレッド Part25 (296)
--log9.info------------------
【春日部】B_Otakuの試乗記について語ろう7【無職】 (460)
【DQN】今日マジでムカついたあの車【Part106】 (842)
お前ら教習所で何時間オーバーした? 24時間目 (299)
C1本気組専用 Ver.171 久々の祭開催!? (775)
【新春早々】朝から晩までみんカラ118【大暴走】 (336)
【中国】激安海外製HID 19灯目【超PIAA?】 (770)
ランフラットタイヤ (255)
日本でMT設定がある車を売ってくれ Part36 (507)
【USDM】北米仕様【US-JDM】 (822)
姫路ナンバーの運転マナー (629)
しょせん車ではバイクに勝てないニダpart93 (407)
走行距離10万`を超えた車を語る【35年目】 (689)
男の健常者のAT限定免許はクソハゲウジムシ part10 (459)
洗車剤・コーティング剤総合83 (547)
最も快適なコンパクトカーは何なんだ 9台目 (417)
【六甲】兵庫の走り屋事情4【ドリフト】 (368)
--log55.com------------------
ラオス決壊ダムを施工した韓国SK建設、ダム建造経験が皆無だった 設計業者も水力発電所に関して素人 [478973293]
山根明会長がテレビ生放送条件に説明へ [319726179]
女子の点数を下げて、男子を上げた東京医大。「だって、点数通りだと女子の合格者だらけになるんだもの!」 [792523236]
ミスマガジングランプリの沢口愛華ちゃん(15)ヤバすぎる!こんなのが高1の同じクラスの前の席にブラの線透かせてたらどうなるよ! [254471822]
東京に住むメリットってなんかある? なんでもいいから教えて [324064431]
【自滅】はあちゅうが世間から猛烈に嫌われ、長期間絶え間なく徹底的に叩かれまくってる理由、判明する [621795666]
【速報】ボクシング連盟会長、山根明入院 [762190804]
大阪城・たこ焼き屋が、5億円/3年も爆売出来た理由 山口組系のテキ屋だった 橋下市長でも排除出来ず [115345285]