Safari 3.0.4(523.12PPC) Mac OS X 10.4.11 カレントページのリンクを順にTABで開く (最大5個だけ開く、delay 3 / 重複もマーカーも見境無しに新規TABで開く) ---------------- tell application "Safari" set theWindow to front window set theTab to current tab of theWindow set linkNum to do JavaScript "document.links.length" in theTab
if linkNum > 5 then set linkNum to 5 end if
repeat with index from 0 to linkNum - 1 set aJSS to ("document.links[" & index as string) & "].href" set aLink to do JavaScript aJSS in theTab tell theWindow make new tab with properties {URL:aLink} end tell delay 3 end repeat end tell ---------------- window に tel l すると make new tab できるんだ
on adding folder items to of this_folder after receiving theItems theNameToDialog(theItems) end adding folder items to
on theNameToDialog(theList) repeat with aItem in theList if character -1 of (aItem as text) is ":" as Unicode text then tell application "Finder" set theItems to (items of aItem) end tell theNameToDialog(theItems) end if display dialog aItem as Unicode text end repeat end theNameToDialog
tell application "Mail" set aMessages to selected messages of message viewer 1 set aMessage to reply item 1 of aMessages set subject of aMessage to "something" set content of aMessage to "some content" end tell
tell application "Terminal" do shell script "ls" end tell ではスクリプトエディタの標準出力に結果が返ってきます。 do script "ls" とすると、Terminal.app上で実行されますが、 必ず新規のウインドウ上になってしまいます。
tell application "Terminal" tell window 0 of application "Terminal" do shell script "ls" end tell end tell のようにしても結果は同じでした。 OSは10.5.1を利用しています。 すみませんがお願いします。
>>27 >>16の記述一カ所間違いを見つけた。気づいとるかもしれんが if character -1 of (aItem as text) is ":" as Unicode text then のところを if character -1 of (aItem as Unicode text) is ":" as Unicode text then になおしといてくれ
tell application "Camino" set TandU to title of current tab of window 1 set TandU to TandU & return set TandU to TandU & URL of current tab of window 1 set the clipboard to TandU end tell
>>42 用語に混乱が見られるんだが、たとえば set the_app to "Safari" as unicode text tell application "System Events" to set visible of application process the_app to false これで、アプリケーションメニューの「なになにを隠す」を実行したと同じ操作になる。
いましがたクラッシュレポーター送信したんですが、どうもdisplay alertでgiving upを使い、 かつボタンが1つでそれがキャンセルボタンだと、100%クラッシュするようですね。 display alertっつうぐらいだから、キャンセルボタンをデフォルトボタンにしたいけど、拒否 されるので、キャンセルボタンのみのダイアログを作ったら、この事故に遭遇しました。 検証コード: -- This works. --display dialog "cancel button 1 + giving up" buttons {"1"} cancel button 1 giving up after 60
-- This also works. display alert "cancel button 1 + giving up" buttons {"1", "2"} cancel button 1 giving up after 60 -- 次のダイアログが死亡フラグ -- But this makes the script editor ***CRASH***. display alert "cancel button 1 + giving up" buttons {"1"} cancel button 1 giving up after 60
set theSource to {"a", "b", "b", "c"} set theDest to {} repeat with theItem in theSource if theDest does not contain theItem then set theDest to theDest & theItem end if end repeat theDest
プログラミング初心者ですが、よく理解できない状況を見つけましたので質問させて下さい。 Mac OS X 10.4.11 スクリプトエディタ2.1.1で set f to resource path of main bundle としてアプリケーションバンドルとして保存しようとすると、
この identifier の後に property を書くことはできません
と言われ resource path がハイライトされてsyntax error になります
set f to (resource path of main bundle)
では
“,” があるべきところですが property が見つかりました。
でpathのみのハイライトで、同様にエラーです。
set f to path to me ならばちゃんと保存も出来てパスも帰ってくるので、 これを使って.app:以降のパスを入れたら目的は果たせそうなのですが、 バンドル内部のパスを取得する方法として、 広範に紹介されているらしい最初の構文がなぜ私の環境で構文エラーになるのか、 気持ちが悪いのでもしどなたか御指導いただけましたら幸いです。
>>96 set my_path to (path to me) set scpt_path to (path to resource "main.scpt" in bundle my_path in directory "Scripts") as Unicode text set icon_path to (path to resource "applet.icns" in bundle (path to me)) display dialog scpt_path with icon icon_path
tell application "Finder" display dialog "1: class of selection = " & class of selection display dialog "2: class of (get selection) = " & class of (get selection) end tell
my OpenWithBundleIdentifier(my GetBundleIdentifierForProtocol("http")) on OpenWithBundleIdentifier(string_identifier) do shell script "open -b '" & string_identifier & "' > /dev/console" end OpenWithBundleIdentifier on GetBundleIdentifierForProtocol(string_protocol) tell application "System Events" set plistAlias to (file "com.apple.LaunchServices.plist" of preferences folder) as alias end tell set plistPath to (POSIX path of (plistAlias as Unicode text)) tell application "System Events" set plistFile to (property list file plistPath) set handlerArray to (value of property list item "LSHandlers" of contents of plistFile) -- record の list になる repeat with n from 1 to (count of handlerArray) try if (|LSHandlerURLScheme| of item n of handlerArray) is equal to string_protocol then return |LSHandlerRoleAll| of item n of handlerArray end if end try end repeat end tell return "" end GetBundleIdentifierForProtocol
>>147 on open dropList dropHandler(dropList) display dialog dropList as Unicode text end open to dropHandler(dropList) tell application "Finder" set dropList to selection sort dropList by name end tell end dropHandler
UI Elements Scripting ("System Events")でgetしたstatic textから実際のtextを 得るにはどうすればいいのでしょうか。
具体的にはこのような感じです。 tell application "System Events" tell process "Safari" tell UI element 1 of scroll area 1 of group 3 of window 1 set theStr to static text 1 of group 7 end tell end tell end tell
このtheStrは static text "theSampleString" of group 7 of UI element 1 of scroll area 1 of group 3 of window "Connection Status - PPPoE" of application process "Safari" of application "System Events"
の形で得られます。ここから "theSampleString" を得たいのです。 theStr as text, theStr as unicode text, contents of theStr あるいはcontents of (static text 1 of group 7)、すべてダメです。
@ Mac OS X 10.4.11 , AppleScript 1.10.7 , Safari 3.0.4
--本当はここに(オープンハンドラの前に)runハンドラを作っておいた方がいいと思う。デバッグの時のために。 on open dropList set dropList to dropHandler(dropList) of me --同じスクリプトの中のをを呼び出す時は一応付けるようにしている of me 解ってないけど。あと返しの受け皿を。 -->>161さん of me とかの本当の意味をもう少し詳しく教えてほしいです。間違えてつかってた? display dialog dropList as Unicode text --これじゃ見にくいよね、repeeat でまわして item i of dropList & return でlogをとったほうがよいとおもう。 end open
to dropHandler(dropList) tell application "Finder" --set dropList to selection --これがいらないっていわれてるやつ。いらないです。 set dropList to sort dropList by name --ソートしたのをセットしなおさないといけないです。 --あ、同じ変数じゃだめ?いけるよね?あれ?これってリスト?オブジェクト? end tell return dropList --値を返してあげましょう end dropHandler
on open dropList set dropList to dropHandler(dropList) --はい、リターンの受け皿です。ハンドラの戻り値は変数にセットするのです。 display dialog dropList as Unicode text end open
to dropHandler(dropList) tell application "Finder" --sort dropList by name --ここが間違えています。ソートした受け皿も必要なのです set dropList2 to sort dropList by name --なんかこわいから2をつけました。いや、いらないと思うけど回してないから。 end tell return dropList2 --これでいいです。返して上げたい変数を入れます。2に変えています弱虫です。 end dropHandler
on open dropList set dropList to dropHandler(dropList) of me repeat with i in dropList display dialog i as string buttons {"OK"} default button 1 end repeat end open
to dropHandler(dropList) tell application "Finder" set dropList to sort dropList by name end tell return dropList end dropHandler
-- on clicked theObject if name of theObject is "btnA" then display dialog "A" attached to window 1 else if name of theObject is "btnB" then display dialog "B" attached to window 1 end if end clicked
on dialog ended theObject with reply withReply (* "btnA"を押したらdialog"A"を、"btnB"を押したらdialog"B"を表示する *) (* でもって"A"のOKを押した時と"B"のOKを押した時で違う処理をしたい *) end dialog ended --
ボタンだったらInterface Builderで作成する際に名前付けておけば、 on clickedでやってるみたいに区別できるけど、 dialogに名前をつける方法が全く見当付かないんだよね
-- on clicked theObject if name of theObject is "btnA" then display dialog "A" buttons {"Cancel", "OK"} attached to window 1 else if name of theObject is "btnB" then display dialog "B" buttons {" Cancel ", " OK "} attached to window 1 end if end clicked
on dialog ended theObject with reply withReply if button returned of withReply is "OK" then (* AのOKの後処理 *) else if button returned of withReply is " OK " then (* BのOKの後処理 *) end if end dialog ended --
on clicked theObject if name of theObject is "btnA" then set lastDialog to "A" display dialog "A" attached to window 1 else if name of theObject is "btnB" then set lastDialog to "B" display dialog "B" attached to window 1 end if end clicked
on dialog ended theObject with reply withReply if lastDialog is "A" then (* Aの後処理 *) else if lastDialog is "B" then (* Bの後処理 *) end if set lastDialog to "" end dialog ended --
on open of target_files tell application "Finder" repeat with theFolder in target_files set theNumber to count items of folder theFolder set name of theFolder to (name of theFolder) & " (" & theNumber & ")" end repeat end tell end open
to trimSting(theStr) set blankcha to {" ", tab, return, ASCII character 10} repeat with l from 1 to length of theStr if character l of theStr is not in blankcha then exit repeat end repeat if l is length of theStr then -- 空白文字しかない return "" else repeat with r from length of theStr to l by -1 if character r of theStr is not in blankcha then exit repeat end repeat return text from l to r of theStr end if end trimSting
--- set testStr to " ねこ cat " & return & " " trimSting(testStr)
to trimSting(theStr) set keeper to ASCII character 0 set blankcha to {" ", tab, return, ASCII character 10, keeper} set theStr to theStr & keeper repeat with l from 1 to length of theStr (以下同じ)
Word 2004でマクロを使って文字置換をしていたのに、Word 2008ではマクロが使えない(作れない)ので困っています。 カタカナをひらがなに一括変換したり、漢数字をアラビア数字にまとめて直したりするには、Applescriptを使うしかないのでしょうか。参考になりそうなサイトでもあれば教えてください。
tell application "Finder" activate end tell tell application "System Events" click menu item "メニューを消去" of menu "最近使った項目" of menu item "最近使った項目" of menu "Apple" of menu bar 1 of process "Finder" end tell
tell application "Finder" set theName to name of this_item set theNewName to my RemoveIt(my GetNFC(theName)) (* set name of this_item to theNewName *) end tell
to GetNFC(theItem) set theScript to ("echo " & (quoted form of theItem) & "| iconv -f UTF-8-MAC -t UTF-8") return (do shell script theScript) end GetNFC to RemoveIt(theItem) set theScript to ("echo " & (quoted form of theItem) & "| sed -e 's/‐ニコニコ動画(RC2)//' -e 's/ニコニコ動画(RC2)‐//' ") return (do shell script theScript) end RemoveIt
to RemoveIt(theItem) set theCurrent to AppleScript's text item delimiters set AppleScript's text item delimiters to ("‐" & "ニコニコ動画(RC2)") set newItem to (text items of theItem) set AppleScript's text item delimiters to theCurrent set newItem to newItem as Unicode text return newItem endRemoveIt
set JS_path to "Macintosh HD:Applications:Adobe Illustrator CS3:Presets.localized:Scripts.localized:ドキュメントを Flash として書き出し.jsx" set FileHandler to open for access JS_path try set JS to read FileHandler from 4 on error close FileHandler end try close FileHandler tell application "Adobe Illustrator" do javascript JS end tell
>>272 Illustrator CS3 の do javascript は do javascript anything : javascript code or file to execute ってかいてるからファイルを直接指定すれば良いんでないの? パスを(なんらかの方法で)取得して as alias すれば、 そのまま do javascript で動いたけど? おれなんか勘違いしてる?
tell application "Adobe Illustrator" tell document 1 set x to count path items repeat with y from 1 to x tell path item y if class of fill color is {class:CMYK color info, cyan:100.0, magenta:0.0, yellow:0.0, black:0.0} then set fill color to {class:CMYK color info, cyan:100.0, magenta:100.0, yellow:0.0, black:0.0} end if if fill color is {class:CMYK color info, cyan:0.0, magenta:100.0, yellow:0.0, black:0.0} then set fill color to {class:CMYK color info, cyan:100.0, magenta:100.0, yellow:0.0, black:0.0} end if if fill color is {class:CMYK color info, cyan:0.0, magenta:0.0, yellow:100.0, black:0.0} then set fill color to {class:CMYK color info, cyan:100.0, magenta:100.0, yellow:0.0, black:0.0} end if if fill color is {class:CMYK color info, cyan:0.0, magenta:0.0, yellow:0.0, black:100.0} then set fill color to {class:CMYK color info, cyan:100.0, magenta:100.0, yellow:0.0, black:0.0} end if end tell end repeat end tell end tell
と、濃度100%のpath itemであれば置き換わるのですが、ここで if class of fill color is {class:CMYK color info, cyan:10.55, magenta:20.12, yellow:13.2, black50.1} then のように、濃度指定に小数点が加わったpath itemが置き換わりません。 試しに get fill color of selection で色情報 を取得した結果、 {class:CMYK color info, cyan:10.549998283386, magenta:20.120000839233, yellow:13.199996948242, black:50.09999871254} をそのまま置換対象に指定してもダメでした。 色の指定方法になにかコツでもあるのでしょうか? というか、ライブカラーがAppleScriptから使えれば・・・
tell application "Safari" to activate tell application "System Events" tell process "Safari" click menu item "新規タブ" of menu "ファイル" of menu bar 1 end tell end tell
tell application "Safari" to activate tell application "System Events" tell process "Safari" click menu item "New Tab" of menu "File" of menu bar 1 end tell end tell
tell application "Terminal" set a to ASCII character 34 set b to "defaults write " & a & "Apple Global Domain" & a & " AppleScrollBarVariant DoubleBoth"
do script with command b
end tell
AppleScriptの勉強というわけでないなら、 Terminalを立ち上げて、以下をコピペしてreturnした方が早い。 defaults write "Apple Global Domain" AppleScrollBarVariant DoubleBoth これで同じことになる。
こんなソフトを探しています Part 30より 画面の選択した部分をフローティングウィンドウのスティッキーズにするスクリプト
57 名前: 名称未設定 Mail: sage 投稿日: 2008/03/14(金) 13:49:25 ID: Z7/qqbMh0 >>41-42 昔作ったやつだwナツカシスw てなわけで改良してみた。 do shell script "screencapture -s -i -t png -c" tell application "Stickies" activate end tell tell application "System Events" try set wflag to do shell script "defaults read com.apple.stickies ¥"WindowFlags¥"" on error set wflag to "0” end try keystroke "n" using command down keystroke "v" using command down if wflag is "0" or wflag is "4" then keystroke "f" using {command down, option down} end if end tell
on open (theItemsDropped) set theItemsList to "" repeat with anItem in theItemsDropped set theItemsList to theItemsList & (anItem as Unicode text) & return end repeat display dialog theItemsList end open
set startupdisk to (path to startup disk) as Unicode text set kp to startupdisk & "System:Library:Components:Kotoeri.component:Contents:Support:KotoeriPreferences.app" activate application kp
tell application "System Events" tell process "KotoeriPreferences" repeat while not (exists window 1) end repeat click radio button "入力操作" of tab group 1 of window 1 if (value of pop up button 3 of tab group 1 of window 1) is "ローマ字入力" then click pop up button 3 of tab group 1 of window 1 click menu item "かな入力" of menu 1 of pop up button 3 of tab group 1 of window 1 else click pop up button 3 of tab group 1 of window 1 click menu item "ローマ字入力" of menu 1 of pop up button 3 of tab group 1 of window 1 end if delay 1 click button 1 of window 1 end tell end tell
tell application "TextEdit" set thewords to a reference to words of document 1 set cword to "文字列" repeat with aword in thewords if aword as Unicode text is cword then set color of aword to {65535, 0, 0} end repeat end tell
tell application "Adobe Illustrator" tell document 1 set NewText to make new text frame at it with properties {contents:"さんぷる", kind:point text, position:{100, 800}} end tell end tell
tell application "Adobe Illustrator" tell document 1 apply paragraph style paragraph style "段落スタイル1" to paragraph 1 of selection with clearing overrides end tell end tell
cf. apply, apply paragraph style, apply character style
tell application "Adobe Illustrator" tell document 1 set NewText to make new text frame at it with properties {contents:"さんぷる", kind:point text, position:{100, 800}} apply paragraph style paragraph style "標準段落スタイル" to paragraph 1 of NewText with clearing overrides end tell end tell
参考: apply, apply paragraph style, apply character style
OS 10.5用 ダウンロードしたファイルを初めて開くときのセキュリティ警告属性をなくすフォルダアクションスクリプト
on adding folder items to action_folder after receiving action_items repeat with an_item in action_items tell application "System Events" set item_name to (display name of an_item) set item_path to (POSIX path of an_item) end tell set attr_list to (do shell script "xattr -l '" & item_path & "'") if (attr_list as string) contains "com.apple.quarantine" then do shell script "xattr -d 'com.apple.quarantine' '" & item_path & "'" --一応通知はしておく display alert "ファイル「" & item_name & "」のダウンロードファイル属性を除去しました" message "開く時は注意して下さい" buttons {"OK"} default button 1 as warning end if end repeat end adding folder items to
property isRunning : false set an to "DigitalTV Recorder" set interval to 10
on idle if (isRunning and (not my findProcess(an))) then set isRunning to false tell application "System Events" sleep end tell end if if (my findProcess(an)) then set isRunning to true end if return interval end idle
on findProcess(pname) tell application "System Events" to return exists (every process whose name is pname) end findProcess
property isRunning : false set an to "DigitalTV Recorder" set interval to 10
on idle if (isRunning and (not my findProcess(an of me))) then set isRunning to false tell application "System Events" sleep end tell end if if (my findProcess(an of me)) then set isRunning to true end if return interval of me end idle
on findProcess(pname) tell application "System Events" to return exists (every process whose name is pname) end findProcess
以下のスクリプト、display dialogが3回ともtrueになってしまいます。 4行目の {i} を {i as string} とすると false,true,true となってくれます。 これはAppleScriptのバグと考えていいのでしょうか Mac OS 10.5.2 (Intel)
set searchString to "11" set loopList to {"11", "22", "33"} repeat with i in loopList set strList to {i} as list --4行目 display dialog ((searchString is not in (every item of strList)) as string) end repeat
>>402 それでも動きますね。 >>403 当方10.5です。まだキャストしないといけないパターンはあるようですね。ちなみに (class of searchString) as string (class of {item 1 of strList}) as string はどちらもtextでした。
ちなみに以下の書き方でも false,true,true となってくれました。
set searchString to "11" set loopList to {"11", "22", "33"} repeat with i from 1 to (count of loopList) -- repeat with i in loopList から変更 set strList to {item i of loopList} as list display dialog ((searchString is not in strList) as string) end repeat
実行環境の内部的な動きを予測するに、repeat with i in loopList だと、 strListに入るのが「"11"の参照の参照」になってしまうからかな、とか思いますが。 一応バグレポートは出してみようと思います。
>>400 >set strList to {i} as list --4行目 ↓ set strList to contents of {i} as list --4行目 というのが一番本質的な修正だと思います。 元のスクリプトだと、strListに入ってるのは参照で、searchStringは実体なので 型が合わずに比較がfalseになります。 contents of で参照から実体を取り出せます(正確にはcontentsは参照型のプロパティの一つ)。
set theList to {1, 2, 3} repeat with i in theList display dialog (i = 2) end repeat 極端な話、これだけでも、思うようには動きません。 i = 2 を contents of i = 2 にするとうまくいきます。
contents of という記述を知りませんでした。調べてみたら reference to なんてのもありますね。 参照とかそういうの意識しなくていい言語かと勝手に思ってましたが、 そういう命令が用意されてるんでしたらそういう訳にはいきませんね。 (ちゃんとLanguage Guide読まにゃ・・・)
set strList to {i} だと参照のlistになって、 set strList to i as list だと実体のlistになるってのも微妙な気が・・・
on open (DropItem) repeat with i in DropItem set pPath to POSIX path of i as string set the clipboard to pPath as string
tell application "Finder" set BB to i as string set newName to my gsub("/", "_", pPath) set name of folder BB to newName end tell end repeat end open
on gsub(src, dst, txt) set oldDelimiters to AppleScript's text item delimiters try set AppleScript's text item delimiters to my u(src) set parsedTxt to every text item of my u(txt) set AppleScript's text item delimiters to my u(dst) set replacedTxt to parsedTxt as string set AppleScript's text item delimiters to oldDelimiters on error set AppleScript's text item delimiters to oldDelimiters end try return replacedTxt end gsub
>>407 繰り返しの各回最初に set i to item n of theList ではなく、 set i to a ref to (item n of theList) が省略されていると思いねぇ つまりi には実体の数字ではなく、 item n of {1, 2, 3} という参照が順に設定される これは「repeat with A in B 〜 end repeat」の仕様だから、 バグレポート出したって意味ないよ
contents of 〜 は参照の実体を返すものだから通るのは当然、 ってかその為に用意されてるんだから
> set strList to {i} だと参照のlistになって、 > set strList to i as list だと実体のlistになるってのも微妙な気が・・・
{item 1 of theList} と item 1 of theList as list の違い
tell application "TextEdit" if (count of windows) > 0 then set travelDistance to 500 set {a, b, c, d} to bounds of window 1 set bounds of window 1 to {a - travelDistance, b, c - travelDistance, d} end if end tell
tell application "System Events" tell application process "LocationFree Player" kestroke "f" using command down tell window 1 set {x, y} to position as list set position to {x - 500, y} end tell kestroke "f" using command down kestroke "s" using command down end tell end tell
on getDVDState() tell application "DVD Player" to set res to dvd state if (my u(res) is equal to my u("scanning")) then tell application "System Events" tell application process "DVD Player" tell menu 1 of menu bar item "制御" of menu bar 1 set fwd to enabled of menu item "順方向にスキャン" set rew to enabled of menu item "逆方向にスキャン" if (fwd and (not rew)) then return "rewind" else if (rew and (not fwd)) then return "forward" end if end tell end tell end tell else return res end if end getDVDState
set hankatatext to "ヴガギグゲゴザジ"----半角カタカナテキスト
set hankatatable to " !?-アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ" set zenkakutable to " !?−アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ" set zenkakutext to "" considering case repeat with x in hankatatext set y to 1 set convtext to x as string if convtext is in hankatatable then repeat with x in hankatatable if convtext contains (item y of hankatatable) then set convtext to (item y of zenkakutable) as string exit repeat end if set y to y + 1 end repeat end if set zenkakutext to zenkakutext & convtext end repeat end considering zenkakutext --全角に変換されたテキスト
set hankatatable to "ヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ !?-アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ" set zenkakutable to "ヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ !??アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ" set zenkakutext to "" considering case repeat with x in hankatatext set y to 1 set convtext to x as string if convtext is in hankatatable then repeat with x in hankatatable if convtext contains (item y of hankatatable) then set convtext to (item y of zenkakutable) as string exit repeat end if set y to y + 1 end repeat end if set zenkakutext to zenkakutext & convtext end repeat end considering
set hankatatext to "ヴガギグゲゴザジ" ----半角カタカナテキスト
set hankatatable to " !?-アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ" set zenkakutable to " !?−アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ" set zenkakutext to hankatatext repeat with i from 1 to (count of character of hankatatable) set zenkakutext to f_Replace(zenkakutext, (character i of hankatatable), (character i of zenkakutable)) end repeat zenkakutext --全角に変換されたテキスト
on f_Replace(theText, theOldWord, theNewWord) set theDefDel to AppleScript's text item delimiters
set AppleScript's text item delimiters to theOldWord set theTextItemList to (every text item of theText) as list
set AppleScript's text item delimiters to theNewWord set theRes to every item of theTextItemList as text
set AppleScript's text item delimiters to theDefDel
set hantext to text returned of (display dialog "半角カナ→全角カナ" default answer "") --テスト用ダイアログ --set hantext to "半角テキスト" --これは例。文字列は任意で。 set hantable to "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッー。、「」" set hantable2 to "ヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ" set zentable to "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォャュョッー。、「」" set zentable2 to "ヴ ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ " set zentext to "" set dakusyori to 0 set i to 1 considering case repeat (count hantext) times set y to 1 set convtext to item i of hantext as Unicode text
--濁点の処理 if i < (count hantext) then if (convtext is in hantable) and ((item (i + 1) of hantext) is "゙" or (item (i + 1) of hantext) is "゚") then repeat with x in hantable2 if convtext contains (item y of hantable2) then set convtext to (item y of zentable2) as Unicode text if item (i + 1) of hantext is "゚" then set convtext to (item (y + 10) of zentable2) as Unicode text set dakusyori to 1 exit repeat end if set y to y + 1 end repeat end if end if
--濁点が連続したときの処理 if convtext is "゙" or convtext is "゚" then if dakusyori is 1 then set convtext to "" set dakusyori to 0 else if convtext is "゙" then set convtext to "゛" if convtext is "゚" then set convtext to "゜" set dakusyori to 0 end if end if
--通常 if convtext is in hantable then repeat with x in hantable if convtext contains (item y of hantable) then set convtext to (item y of zentable) as Unicode text exit repeat end if set y to y + 1 end repeat end if
set zentext to zentext & convtext set i to i + 1 end repeat end considering display dialog "" default answer zentext buttons {"Cancel", "Copy"} default button 2 --全角に変換されたテキスト。
set hankatatext to "ヴガギグゲゴザジ" ----半角カタカナテキスト set zenkakutext to do shell script "php -r '$text = $argv[1]; $text = mb_convert_kana( $text, \"KV\", \"UTF8\"); print $text;' " & quoted form of hankatatext log zenkakutext
set hankatatext to "ヴガギグゲゴザジ"----半角カタカナテキスト
set hankatatable to " !?-アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ" set zenkakutable to " !?−アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョヴガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポ" set zenkakutext to "" considering case repeat with x in hankatatext set y to 1 set convtext to x as string if convtext is in hankatatable then repeat with x in hankatatable if convtext is in (item y of hankatatable) then set convtext to (item y of zenkakutable) as string exit repeat end if set y to y + 1 end repeat end if set zenkakutext to zenkakutext & convtext end repeat end considering zenkakutext --全角に変換されたテキスト
で、こんなことをする必要があるそうで。 to GetNFC(theItem) set theScript to ("echo " & (quoted form of theItem) & " | iconv -f UTF-8-MAC -t UTF-8") return (do shell script theScript) end GetNFC
tell application "Finder" set fullName to name of item 1 of (selection as list) set lastLetter to item -1 of fullName offset of lastLetter in fullName count of fullName end tell
便乗よいでしょうか?以下のようなスクリプトが正常に動かないのもUnicodeの不具合? タブやリターンをas Unicode text で変数にいれても、アスキーナンバーで設定しても同じ。 データセットやってなかったけど、0の数が違うだけで同じだよね?
choose file with prompt "please select at tab stop Text. with UTF-8 of 16" without invisibles
set myTextFile to open for access file TextFileName repeat try set end of returnTextList to read myTextFile before return using delimiter {",", tab} as Unicode text --set end of returnTextList to read (myTextFile as Unicode text) before return using delimiter {",", tab} on error errMsg number errNo close access myTextFile if errNo is -39 then set errorFlag to false exit repeat --return {returnTextList, TextFileName} else set errorFlag to true end if exit repeat end try end repeat log returnTextList --あきらめてデリミタで処理
on run tell application "System Events" to frontmost of application process "Finder" if not result then return tell application "System Events" keystroke "c" using command down end tell set beforeString to the clipboard if (clipboard info for "class txtn") is {} then return set afterString to half2full(beforeString) set the clipboard to afterString tell application "System Events" keystroke "v" using command down keystroke return end tell end run
on half2full(beforeString) return "ガギグゲゴ" --半角⇒全角の変換処理は省略 end half2full
>>485 だけだとわかんないですよね。デバッグ用の切り出しのコピ。 英語がめちゃくちゃなのはスルーしてください。ASSでユニコードがデバッグできんのが悪い!!!と言うことで。 try set end of returnTextList to read myTextFile before return using delimiter {",", tab} on error errMsg number errNo
if UTF16ON is 0 then set rerunText to read myTextFile as --《class utf8 --》 -->about FileMaker Pro export UTF-8 else if UTF16ON is 1 then set rerunText to read myTextFile as Unicode text -->about FileMaker export ProUTF-16 end if で、仕方がないからこうやってテキストで取り込んで、Winの時とLFの時の処理してデリミタです。 今の私ならなんとかなるかな?と思いrun scriptの中身開けていろいろやってみたけど、だめでした。
on run argv set argvs to "" repeat with aVal in argv set argvs to argvs & " " & (aVal as Unicode text) end repeat do shell script "./program" & argvs end run
--ここから set vol to "" tell application "iTunes" repeat with i from 0 to 100 set sound volume to i set temp to sound volume if not i = temp then set vol to vol & i & "→" & temp & ", " end if end repeat end tell display dialog vol --ここまで
set vol to "" set correct to {0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1} tell application "iTunes" set StandardVolume to sound volume repeat with i from 0 to 10 set x to item (i + 1) of correct set sound volume to i + x set temp to sound volume set vol to vol & i & "→" & temp & ", " end repeat set sound volume to StandardVolume end tell display dialog vol
set folder1 to alias "任意の場所" set folder2 to alias choose folder
tell application "Finder" make new alias file at folder1 to (files of folder2 whose file type = "InDd") make new alias file at folder1 to (files of folder2 whose file type = "IDd3") make new alias file at folder1 to (files of folder2 whose file type = "IDd4") make new alias file at folder1 to (files of folder2 whose file type = "Xdoc") end tell
set folder0 to (choose folder) my do_something(folder0)
to do_something(thefolder) tell application "Finder" set theList to files of thefolder repeat with aFile in theList -- ファイルに関する処理 --ここに実際の処理がはいる display dialog (aFile as Unicode text) --サンプル end repeat set theList to folders of thefolder repeat with aFolder in theList -- フォルダに関する処理 my do_something(aFolder) -- 再帰! end repeat end tell end do_something
set theAliasFolder to alias "hoge:hoge" set theFolder to choose folder tell application "Finder" set theFiles to (every file of entire contents of theFolder) whose name ends with ".jpg" make new alias file at theAliasFolder to theFiles end tell
set theAliasFolder to alias "エイリアスを保存するフォルダ:" set theFolder to choose folder tell application "Finder" set theFiles1 to ((every file of entire contents of theFolder) whose file type = "IDd3") set theFiles2 to ((every file of entire contents of theFolder) whose file type = "IDd4") set theFiles3 to ((every file of entire contents of theFolder) whose file type = "Xdoc") set theFiles4 to ((every file of entire contents of theFolder) whose file type = "InDd") make new alias file at theAliasFolder to theFiles1 make new alias file at theAliasFolder to theFiles2 make new alias file at theAliasFolder to theFiles3 make new alias file at theAliasFolder to theFiles4 end tell
tell application "Finder" set thefile to item 1 in disk "NO NAME" set the name of thefile to "Book1.xls" end tell tell application "Microsoft Excel" set thesheet to worksheet of thefile set the name of thesheet of thefile to "Book1" end tell
tell application "Finder" set thefile to item "Book1.xls" in disk "NO NAME" end tell tell application "Microsoft Excel" open thefile set name of active sheet to "Book1" close thefile saving yes end tell
とやると
"Book1.xls" of disk "NO NAME" は close メッセージを認識できません。
>>564 ごめん。プログラムうまく動かなくて気が立ってた。最低だ。 set rPath to every folder of dPath -->括弧つけ過ぎ、よけいに読みにくいかも。 set hoge to item 1 of rPath as alias こう書いてみて。一つのオブジェクトでもListだよ?いつからだったかな?Xから?最初から?
to do_something(thefolder) tell application "Finder" set theList to files of thefolder repeat with aFile in theList -- ファイルに関する処理 set theAliasFolder to alias "エイリアスを保存するフォルダ:" make new alias file at theAliasFolder to (files of thefolder whose file type = "InDd") make new alias file at theAliasFolder to (files of thefolder whose file type = "IDd3") make new alias file at theAliasFolder to (files of thefolder whose file type = "IDd4") make new alias file at theAliasFolder to (files of thefolder whose file type = "Xdoc") end repeat set theList to folders of thefolder repeat with aFolder in theList -- フォルダに関する処理 my do_something(aFolder) -- 再帰! end repeat end tell end do_something
tell application "System Events" tell process "SystemUIServer" tell first menu bar set menuExtraList to every menu bar item repeat with aExtra in menuExtraList try tell aExtra click try tell front menu tell menu item "ログインウインドウ..." to click return 0 end tell on error click end try end tell end try end repeat end tell end tell beep end tell
>>597 ありがとうございます。 それですと The destination "MacOS" is missing or unavailable. Please select another destination. と言われてしまうので、 たぶん「to」を使って解凍先を書いてあげないとダメなのかな?って思いました。
Applescript初心者です。 tell application "Finder" set i to icon of ("/Developer" as POSIX file) end tell 「Finder でエラーが起きました:&1 を取り出すことはできません。」 とエラーが出てしまうのですが、icon of ではアイコンを取り出すことはできないのでしょうか。
iTunesスレで紹介されていたものを試してみたのですが set a to properties of audio CD playlist 1 of (source 1 where kind is audio CD) としたところディスクリプタ・タイプが一致しませんというエラーが出ました。 OS9での知識ですがproperties ofでたいてい属性が取得できたと記憶していて 試しにFilemakerを対象にset a to (properties of cell 1 of current record)としてみたら エラーは出ないけど何も帰ってきませんでした。 それぞれname of 等だとちゃんと値が帰ってきます。 どこがいけないのでしょうか。 OS X 10.4.9 / iTunes 7.2
tell application "Finder" set menuHight to 22 set displayBounds to bounds of window of desktop set displayPosition to {item 1 of displayBounds, (item 2 of displayBounds) + menuHight} set displaySize to {item 3 of displayBounds, (item 4 of displayBounds) - menuHight} end tell
そんな話では無いと思うけど... 適当なアプリを起動してWindowのサイズを取得した方が手っ取り早い。 tell application "TextEdit" set zoomed of front window to true set theDesktopSize to bounds of front window quit end tell theDesktopSize
tell application "System Events" set frontmost of it to false set aApp to (name of every process whose frontmost is true) as text tell process aApp tell window 1 set position to {0, 22} set size to {1024, 768} end tell end tell end tell
tell application "iTunes" set seltrack to a reference to selection repeat with x in seltrack set theTitle to name of x as text set thePath to location of x set posixPath to POSIX path of thePath do shell script "/opt/local/bin/faad ¥"" & posixPath & "¥" -o ~/tmp.wav" do shell script "/opt/local/bin/lame ~/tmp.wav ~/Music/mp3/¥"" & theTitle & ".mp3¥"" do shell script "rm ~/tmp.wav" end repeat end tell
tell application "iTunes" set seltrack to a reference to selection repeat with x in seltrack set theTitle to name of x as text set thePath to location of x set thePath to POSIX path of thePath
tell application "GrowlHelperApp" notify with name "Start encoding" title theTitle description theTitle & "をエンコーディング中" application name "aac2mp3" end tell
do shell script "/opt/local/bin/faad ¥"" & thePath & "¥" -o ~/tmp.wav" do shell script "/opt/local/bin/lame ~/tmp.wav ~/Music/mp3/¥"" & theTitle & ".mp3¥"" do shell script "rm ~/tmp.wav" end repeat tell application "GrowlHelperApp" notify with name "End encoding" title "エンコーディング終了" description "エンコーディング終了" application name "aac2mp3" end tell end tell
>>644 事前にGrowlに通知を登録しています。これは以下のコード。一度だけ実行すれば登録されます tell application "GrowlHelperApp" set the allNotificationsList to {"Start encoding", "End encoding"}
set the enabledNotificationsList to {"Start encoding"}
register as application "aac2pm3" all notifications allNotificationsList default notifications enabledNotificationsList icon of application "Script Editor" end tell
iTunes で現在聞いている曲の情報を取得してテキストで保存したいと思っています。 同様の目的で作られた Now Playing.app というフリーソフトのパッケージの中にあった applescript で目的の情報が取得できるということは分かったのですが、 それを「テキストで保存する」という部分の処理を、applescript でどう書けばいいのかが分かりません。 上記のスクリプトを少しだけ自分流に書き直したのが以下ですが、 tell application "iTunes" return (name of current track) & " | " & (album of current track) & " | " & (artist of current track) & " | " & (genre of current track) & " | " & (comment of current track) & " | " & (rating of current track) & " | " as text end tell これで、例えば "If The Moon Turns Green | The Great American Songbook | Carmen McRae | Jazz | | 0 | " といった結果を得られるんですが、それをテキストデータとして保存したいのです。 どう書けばいいんでしょうか?
tell application "iTunes" set a to (name of current track) & " | " & (album of current track) & " | " & (artist of current track) & " | " & (genre of current track) & " | " & (comment of current track) & " | " & (rating of current track) & " | " as text do shell script "echo ¥"" & a & "¥" >> ~/test.txt" end tell
tell application "iTunes" return (name of current track) & " | " & (album of current track) & " | " & (artist of current track) & " | " & (genre of current track) & " | " & (comment of current track) & " | " & (rating of current track) & " | " as text do shell script "echo " & quoted form of a & " >> /Users/ore/test.txt" end tell
>>668 return (name of current track) & " | " & (album of current track) & " | " & (artist of current track) & " | " & (genre of current track) & " | " & (comment of current track) & " | " & (rating of current track) & " | " as a とするといい? んですかね?
tell application "iTunes" set a to (name of current track) & " | " & (album of current track) & " | " & (artist of current track) & " | " & (genre of current track) & " | " & (comment of current track) & " | " & (rating of current track) & " | " as text do shell script "echo " & quoted form of a & " >> ~/tmp/currentTune.log" end tell
これ、日本語に訳すと a を to ( ... ) のテキストとしてセットし、 echo で a の形式を持ったものを quote した形で、 ~/tmp/currentTune.log として出力、 を、iTunes に告げよ。 という意味ですよね。違うかな?
display dialog "スリープしますか?" buttons {"キャンセル", "OK"} default button 2 giving up after 10 if sAns = "OK" then tell application "System Events" to sleep end if
display dialog "スリープしますか?" buttons {"キャンセル", "OK"} default button 2 giving up after 10 if gave up = true then tell application "System Events" to sleep end if if gave up = false then set sAns to button returned of result if sAns = "OK" then tell application "System Events" to sleep end if end if
set a to button returned of (display dialog "スリープしますか?" buttons {"キャンセル", "スリープしない"} default button 2 giving up after 10) if a is "スリープしない" then return tell application "System Events" to sleep
set aAns to (display dialog "スリープしますか?" buttons {"キャンセル", "OK"} default button 2 giving up after 10)
if gave up of aAns then tell application "System Events" to sleep else if text returned of aAns = "OK" then tell application "System Events" to sleep end if
システム環境設定のサウンド設定で 出力先を内部オーディオとUSBとを トグルで切り替えるアップルスクリプトが作りたいんですが どうしたらいいでしょう tell application "System Preferences" set current pane to pane "サウンド" tell application "System Events" tell application process "System Preferences" set shoOn to checkbox 1 of group 1 of window "サウンド" if value of shoOn is 1 then click shoOn end if end tell end tell end tell で消音をオフにするのはできたんですが 選択のところをどう記述するのかが分からないです
on open fileList tell application "Finder" repeat with i in fileList set filePath to quoted form of POSIX path of (i as alias) set newPath to quoted form of (POSIX path of (desktop as alias) & "decoded-" & name of i) do shell script "perl -ne '$_ =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;print $_' " & filePath & " > " & newPath end repeat end tell end open
perl -ne '$_ =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;print $_' ¥ '/Users/USERNAME/Music/iTunes/iTunes Music Library.xml' ¥ > '/Users/USERNAME/Desktop/iTunes Music Library.decoded.xml' && iconv -f UTF-8 -t UTF-8-MAC ¥ '/Users/USERNAME/Desktop/iTunes Music Library.decoded.xml' ¥ | iconv -f UTF-8-MAC -t UTF-16LE > '/Users/USERNAME/Desktop/iTunes Music Library.decoded.utf16.xml'
デスクトップに iTunes Music Library.decoded.xml というファイルの他に iTunes Music Library.decoded.utf16.xml というファイルを作成します。こちらのほうは Windows に持って行っても文字化けしないはずです。 コードとしてはむちゃくちゃ(もっときれいに書ける)のような気がします。
on open fileList tell application "Finder" repeat with i in fileList set filePath to quoted form of POSIX path of (i as alias) set newPath to quoted form of (POSIX path of (desktop as alias) & "decoded-" & name of i) set newNewPath to quoted form of (POSIX path of (desktop as alias) & "decoded-utf16-" & name of i) do shell script "perl -ne '$_ =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg;print $_' " & filePath & " > " & newPath & " && iconv -f UTF-8 -t UTF-8-MAC " & newPath & " | iconv -f UTF-8-MAC -t UTF-16LE > " & newNewPath end repeat end tell end open
tell application "Camino" tell front window repeat with caminoTab in tabs tell application "Safari" tell front window set safariTab to make new tab set URL of safariTab to URL of caminoTab end tell end tell end repeat end tell end tell
tell application "Finder" set theFolder to folder "Documents" of home select files 1 thru 4 of theFolder set theList to selection set theNbr to count theList repeat with i from 1 to theNbr set theFile to item i of theList tell application "Adobe Acrobat Professional" activate open file (theFile as string) end tell end repeat end tell
set RefreshFlag to false tell application "iTunes" updateAllPodcasts delay 30 --ポッドキャストの更新チェックの待ち時間(秒)登録してるポッドキャストの数に応じて変更 tell application "System Events" tell process "iTunes" tell outline 1 of scroll area 1 of splitter group 1 of splitter group 1 of window 1 set SourceLists to name of static text 1 of rows repeat with i in SourceLists if i starts with "ダウンロード" and i ends with "項目" then set RefreshFlag to true end repeat repeat set SourceLists to name of static text 1 of rows set DLendFlag to true repeat with i in SourceLists if i starts with "ダウンロード" and i ends with "項目" then set DLendFlag to false end repeat if DLendFlag then exit repeat delay 2 --ダウンロードが終了したかどうかのチェック間隔(秒) end repeat end tell end tell end tell if RefreshFlag then update (sources whose kind is iPod) end tell --同期終了が認識できないのでejectは手動で
>>749 そのウインドウ出した状態で tell application "System Events" tell process "hogehoge" tell window 1 get UI elements end tell nd tell end tell 的な感じで操作したいUI elementsを探っていく
set answerList to {"グー", "チョキ", "パー"} set cpuAnswer to some item of answerList log cpuAnswer
display dialog "じゃん、けん、ポン!" buttons answerList set yourAnswer to button returned of result log yourAnswer
if cpuAnswer is yourAnswer then set endMessage to "あいこでした" else if (cpuAnswer is "グー") and (yourAnswer is "パー") then set endMessage to "あなたの勝ちです!" else if (cpuAnswer is "チョキ") and (yourAnswer is "グー") then set endMessage to "あなたの勝ちです!" else if (cpuAnswer is "パー") and (yourAnswer is "チョキ") then set endMessage to "あなたの勝ちです!" else set endMessage to "あなたの負けです…" end if
set {G, C, P} to {"グー", "チョキ", "パー"} set cpuAnswer to some item of {G, C, P} log cpuAnswer
display dialog "じゃん、けん、ポン!" buttons {G, C, P} set yourAnswer to button returned of result log yourAnswer
if cpuAnswer is yourAnswer then set endMessage to "あいこでした" else if {{cpuAnswer, yourAnswer}} is in {{G, P}, {C, G}, {P, C}} then set endMessage to "あなたの勝ちです!" else set endMessage to "あなたの負けです…" end if
>>764 ありがとうございます。AppleScript's text item delimitersでぐぐってみて 「iTunesの選択した曲の名前欄を参照して":"を改行に置き換えてコメント欄に書き込む」 というスクリプトを書いてみました。
tell application "iTunes" set theTracks to selection set TID to AppleScript's text item delimiters set FI to fixed indexing set fixed indexing to true try repeat with aTrack in theTracks tell aTrack set AppleScript's text item delimiters to ":" set aList to every text item of name set AppleScript's text item delimiters to return set aText to aList as string set lyrics to aText end tell end repeat end try set fixed indexing to FI set AppleScript's text item delimiters to TID end tell
set oldDelim to AppleScript's text item delimiters set AppleScript's text item delimiters to ASCII character colSep set theList to {} repeat set pos to offset of ASCII character rowSep in theContent set theText to text 1 thru (pos - 1) of theContent set theRow to every text item of theText if theList is {} then set theList to theRow else set theList to {theList, theRow} end if if pos is 0 then exit repeat end if set theContent to text (pos + 1) thru end of theContent end repeat set AppleScript's text item delimiters to oldDelim return theList end Csv2List
tell application "Finder" set a to every process repeat with b in a if visible of b is true then if name of b is not "HideApl" then set visible of b to false end if end if end repeat end tell
--- メインスクリプト --- set theNumber to "+81xxxxxxxxxx" (* 電話番号 *) set theCount to 1 (* 電話をかける回数 *) set theFilePath to "~/Music/alarm.mov" (* 再生するサウンドファイル *)
(*prepare to play the sound*) set volume 7 do shell script "open " & theFilePath tell application "QuickTime Player" stop document 1 end tell
tell application "Skype" (* repeat the number of times I set up there *) repeat with i from 1 to theCount
(* call to the target *) set theCall to send command "CALL " & theNumber script name "My Other Script" set theID to word 2 of theCall
(* wait during the darget answer to the call *) set theStatus to "ROUTING" repeat while (theStatus is "ROUTING") delay 1 set theStatus to getStatus(theID) of me end repeat
(* call for 30 secounds. if someone answered, exit repeat *) repeat with j from 1 to 6 delay 5 set theStatus to getStatus(theID) of me if theStatus is "INPROGRESS" then (* play sound *) tell application "QuickTime Player" set current time of document 1 to 0 play document 1 repeat while current time of document 1 is not max time loaded of document 1 delay 5 end repeat end tell exit repeat else if theStatus is "BUSY" then exit repeat end if end repeat
(* finish calling *) set theCall to send command "SET CALL " & theID & " STATUS FINISHED" script name "My Other Script" end repeat end tell
on getStatus(anID) tell application "Skype" set aCall to send command "GET CALL " & anID & " STATUS" script name "My Other Script" set aStatus to word 4 of aCall end tell return aStatus end getStatus --- ここまで ---
--- アラーム設定(別スクリプト) --- set theResult to display dialog "What time do you want to send this message?" default answer "07:00" buttons {"Okay", "Cancel"} default button 2 set theTime to text returned of theResult set theButton to button returned of theResult if theButton is equal to "Okay" then do shell script "echo " & quote & "open /Users/saiga/Development/AppleScript/automail.app" & quote & " | at " & theTime end if --- ここまで ---
--- アラーム設定(別スクリプト) --- set theCurrentTime to do shell script "date +%H:%M" set theResult to display dialog "What time do you want to call?" default answer theCurrentTime buttons {"Okay", "Cancel"} default button 2 set theTime to text returned of theResult set theButton to button returned of theResult if theButton is equal to "Okay" then do shell script "echo " & quote & "open ~/Development/AppleScript/autocall.app" & quote & " | at " & theTime end if --- ここまで ---
tell application "Safari" set open_URL to "http://www.apple.com/jp/" set target_window to missing value set connected to false repeat until connected -- URLを開く if target_window is missing value then -- 新規ウインドウで make new document with properties {URL:open_URL} set target_window to window 1 else -- 既存のウインドウで set (URL of document of target_window) to open_URL end if -- 読み込み完了まで待つ repeat while ((name of target_window) ends with "を読み込み中") delay 0.5 end repeat -- ウインドウタイトルに"sorry"が含まれていれば失敗とする set connected to (((name of target_window) does not contain "sorry") as boolean) -- リロード連打になるので30秒待つ if not connected then delay 30 end repeat end tell
tell application "Safari" open location "https://mixi.jp/" delay 1 do JavaScript "document.forms[0].email.value='*********.co.jp'" in document 1 do JavaScript "document.forms[0].password.value='****'" in document 1 delay 1 do JavaScript "document.forms[0].submit()" in document 1 --ログインここまで
set keyword to "テスト" set mymail to "youremail" set mypass to "yourpassword"
set stype to "dialy" (* community diary album video review music news web *) set enckeyword to my eucstring(keyword) set loginurl to "https://mixi.jp/login.pl?email=" & mymail & "&password=" & mypass & "&next_url=/home.pl" set searchurl to "http://mixi.jp/search_redirect.pl?search_type=" & stype & "&search_encode=euc-jp&search_keyword=" & enckeyword
tell application "Safari" make new document set URL of document 1 to loginurl my waitfor("[mixi]") set URL of document 1 to searchurl end tell
on waitfor(s) tell application "Safari" repeat while my u((do JavaScript "document.title" in document 1)) is not equal to (my u(s)) delay 0.5 end repeat end tell end waitfor
on u(s) return s as Unicode text end u
on eucstring(s) return do shell script "ruby -r kconv -r uri -e ¥"puts URI.encode(¥¥¥"" & s & "¥¥¥".toeuc)¥"" end eucstring
>>847 ほんとうに「using "XXX(アプリ名)"」と書いてありますか? 私の手元にある『AppleScript Programming for MacOS X』(掌田津耶乃著)には 「open 《開くファイルの参照》 using 《開くアプリケーションの参照》」 「open 《ファイルの参照》 using 《アプリケーションファイルの参照》」 と書いてありますよ。実例として tell application "Finder" open file "text.txt" of folder "Documents" of home ツ using application file "TextEdit.app" of folder "Applications" of startup disk end tell というのがあげられています。 ポイントは「アプリケーション名」ではなく「アプリケーションの参照」であることです。 要するにアプリケーションの在処をAppleScriptの文法に沿ってちゃんと記述してね、ということ。 上の例でしたら起動ディスクからのフォルダ階層を逐一記述していく形、 using the path to application の場合は、標準フォルダもしくはアプリケーションのパスを 取得するための「Path To コマンド」を使ったものです。 http://docs.info.apple.com/jarticle.html?path=AppleScript/2.1/jp/as189.html
ところで、 この書き方は tell application "Finder" open file "text.txt" of folder "Documents" of home ツ using application file "TextEdit.app" of folder "Applications" of startup disk end tell 純正のアプリじゃないと動かないですよね?
tell application "Finder" set theFile to file "test.pdf" of desktop open theFile using application file "Adobe Acrobat Professional" of folder "Adobe Acrobat 8 Professional" of folder "Applications" of startup disk end tell
>>862 もしそれが一行になってるなら、こういう感じで除去してしまえば? set newComment to do shell script "echo " & quoted form of oldComment & " | grep -v 'Adjusted by iVolume ../../.... ..:..:..'"
tell application "iTunes" if selection of front browser window is {} then display alert "Select track(s) to process." as critical buttons "Cancel" else set selectedTracks to selection set TID to AppleScript's text item delimiters set FI to fixed indexing set fixed indexing to true try repeat with aTrack in selectedTracks tell aTrack set oldComment to comment set newComment to do shell script "echo " & quoted form of oldComment & " | grep -v 'Adjusted by iVolume ../../.... ..:..:..'" se
tell application "iTunes" if selection of front browser window is {} then display alert "Select track(s) to process." as critical buttons "Cancel" else set selectedTracks to selection set TID to AppleScript's text item delimiters set FI to fixed indexing set fixed indexing to true try repeat with aTrack in selectedTracks tell aTrack set oldComment to comment set newComment to do shell script "echo " & quoted form of oldComment & " | grep -v 'Adjusted by iVolume ../../.... ..:..:..'" se
set comment to newComment end tell end repeat end try set fixed indexing to FI set AppleScript's text item delimiters to TID display alert "Process was completed." as critical buttons "OK" end if end tell
>>862 grepを使いこなすのはかなり難しそうなので とりあえず>>864さんのアドバイスを取り入れて コメント欄が「Adjusted by iVolume」で始まってたら (/とか:とかは単語の区切りと認識されるので) 先頭から9単語を削除するスクリプト
tell application "iTunes" if selection of front browser window is {} then display alert "Select track(s) to process." as critical buttons "Cancel" else set selectedTracks to selection set TID to AppleScript's text item delimiters set FI to fixed indexing set fixed indexing to true try repeat with aTrack in selectedTracks tell aTrack if comment starts with "Adjusted by iVolume" then set aComment to comment as text set aText to text from word 10 to end of aComment set comment to aText end if end tell end repeat end try set fixed indexing to FI set AppleScript's text item delimiters to TID display alert "Process was completed." as critical buttons "OK" end if end tell
tell application "System Events" to set runningApps to name of every application process whose background only is false if "BathyScaphe" is in runningApps then display dialog "BathyScaphe is running, try later." buttons {"OK"} default button 1 else do shell script "find $HOME/Library/Caches/BathyScaphe/ -type f -delete" end if
tell application "iTunes" if selection of front browser window is {} then display alert "Select track(s) to process." as critical buttons "Cancel" else set FI to fixed indexing set fixed indexing to true set selectedTracks to selection try repeat with aTrack in selectedTracks tell aTrack set fileLocation to (the location of aTrack) -- ここまでで変数「fileLocation」に選択したトラックの場所が入ります -- 書式は"ディスク名:Users:ユーザー名:Music:iTunes:iTunes Music:アーティスト名:アルバム名:曲名.拡張子" -- ここから「fileLocation」を"ディスク名:Users:ユーザー名:Music:iTunes:iTunes Music:アーティスト名:アルバム名:アルバム名.jpg"に変換すれば -- set artowork to (fileLocation の場所にある画像) を実行 -- さらに「fileLocation」を"ディスク名:Users:ユーザー名:Music:iTunes:iTunes Music:アーティスト名:アルバム名:曲名.txt"に変換して -- set lyrics to (fileLocation の場所にあるテキスト) を実行でいいんじゃないんですかね end tell end repeat end try set fixed indexing to FI display alert "Process was completed." as critical buttons "OK" end if end tell
>>911 ここに「歌詞ファイルは音楽ファイルと同じファイル名で拡張子だけを ".txt" に変えた テキストファイルとして同じフォルダに保存」されていたら表示する というアップルスクリプトがあったよ。 http://www2.airnet.ne.jp/~kenshi/mac07.html これと>>913を組み合わせれば set lyrics to (歌詞ファイル) が作れるんじゃない? んで、それをちょっと改造すれば set artowork to (fアートワークファイル) も作れるよね
on replace(src, tgt, rpc) -- 文字列を置換する関数 set AppleScript's text item delimiters to tgt set txtlist to text items of src set AppleScript's text item delimiters to rpc set ret to txtlist as string return ret end replace try tell application "iTunes" if selection of front browser window is {} then display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"} else set TID to AppleScript's text item delimiters -- text item delimiters を保存 set FI to fixed indexing -- fixed indexing を保存 set fixed indexing to true -- fixed indexing を true にセット set selectedTracks to selection -- 選択中のトラックを取得
try repeat with aTrack in selectedTracks set file_location to (the location of aTrack) -- 処置するトラックの場所を取得 set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定 set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割 set file_name to (the item (the count of file_list) of file_list) -- ファイル名だけを取り出す set AppleScript's text item delimiters to "." -- テキストを . で分割するように設定 set text_list to text items of file_name -- ファイル名を本体と拡張子に分割 set file_suffix to (the item (the count of text_list) of text_list) -- ファイルの拡張子だけを取り出す。 if file_suffix is "" then text_filename to file_name & ".txt" -- 拡張子が無い場合は ".txt" を付けるだけ。 else set text_filename to replace(file_name, "." & file_suffix, ".txt") -- 拡張子がある場合はそれを ".txt" で置き買える。 end if
set (the item (the count of file_list) of file_list) to text_filename set AppleScript's text item delimiters to ":" set text_filename to file_list as string -- 歌詞ファイルの完全パスを構築する open for access file text_filename set text_file to read file text_filename tell aTrack set lyrics to text_file end tell close access file text_filename end repeat end try set fixed indexing to FI -- fixed indexing を保存した値に戻す set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す display alert "作業を完了しました。" buttons {"OK"} end if end tell end try
2. システム環境設定を起動してGUIスクリプティングで値を設定・取得 --Set value: set brightness_level to 0.5 -- 0.0 is Min. and 1.0 is Max. tell application "System Preferences" set current pane to pane "com.apple.preference.displays" tell application "System Events" to tell process "System Preferences" set value of slider 1 of group 2 of tab group 1 of window 1 to brightness_level end tell quit end tell
--Get value: tell application "System Preferences" set current pane to pane "com.apple.preference.displays" tell application "System Events" tell process "System Preferences" set brightness_level to value of slider 1 of group 2 of tab group 1 of window 1 display dialog brightness_level end tell end tell quit end tell
tell application "iTunes" if selection of front browser window is {} then return tell first item of selection set origQStr to artist & " " & name end tell end tell set escQStr to do shell script "echo " & quoted form of origQStr & " | perl -MURI::Escape -ne 'chomp; print uri_escape $_'" open location "http://images.google.co.jp/images?hl=ja&q=" & escQStr
tell application "iTunes" if selection of front browser window is {} then display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"} else set TID to AppleScript's text item delimiters -- text item delimiters を保存 set FI to fixed indexing -- fixed indexing を保存 set fixed indexing to true -- fixed indexing を true にセット set selectedTracks to selection -- 選択中のトラックを取得 try repeat with aTrack in selectedTracks tell aTrack set file_location to (the location of aTrack) -- 処置するトラックの場所を取得 set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定 set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割 set file_name to (the item (the count of file_list) of file_list) -- ファイル名だけを取り出す set AppleScript's text item delimiters to "." -- テキストを . で分割するように設定 set text_list to text items of file_name -- ファイル名を本体と拡張子に分割 set file_suffix to (the item (the count of text_list) of text_list) -- ファイルの拡張子だけを取り出す。 if file_suffix is "" then text_filename to file_name & ".txt" -- 拡張子が無い場合は ".txt" を付けるだけ。
else set AppleScript's text item delimiters to "." & file_suffix set text_list to text items of file_name set AppleScript's text item delimiters to ".txt" set text_filename to text_list as string -- 拡張子がある場合はそれを ".txt" で置き買える。 end if set (the item (the count of file_list) of file_list) to text_filename set AppleScript's text item delimiters to ":" set text_filename to file_list as string -- 歌詞ファイルの完全パスを構築する set text_file to (open for access file text_filename) -- 歌詞ファイルが無い場合は作成 set lyrics to read text_file close access text_file end tell end repeat end try set fixed indexing to FI -- fixed indexing を保存した値に戻す set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す display alert "作業を完了しました。" buttons {"OK"} end if end tell
tell application "iTunes" if selection of front browser window is {} then display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"} else set TID to AppleScript's text item delimiters -- text item delimiters を保存 set FI to fixed indexing -- fixed indexing を保存 set fixed indexing to true -- fixed indexing を true にセット set selectedTracks to selection -- 選択中のトラックを取得 try repeat with aTrack in selectedTracks tell aTrack set file_location to (the location of aTrack) -- 処置するトラックの場所を取得 set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定 set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割 set (the item (the count of file_list) of file_list) to "album.txt" -- ファイル名を album.txt に変更 set text_filename to file_list as string -- テキストファイルの完全パスを構築する set (the item (the count of file_list) of file_list) to "album.jpg" -- ファイル名を album.jpg に変更 set art_filename to file_list as string -- 画像ファイルの完全パスを構築する
set text_file to read (open for access file text_filename) -- テキストファイルを開く set lyrics to text_file -- 歌詞欄にテキストファイルを読み込む close access text_file -- テキストファイルを閉じる set art_file to read (open for access file art_filename) as picture -- 画像ファイルを開く set data of artwork 1 to art_file -- アートワーク欄に画像ファイルを読み込む close access art_file -- 画像ファイルを閉じる end tell end repeat %
end try set fixed indexing to FI -- fixed indexing を保存した値に戻す set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す display alert "作業を完了しました。" buttons {"OK"} end if end tell
set (the item (the count of file_list) of file_list) to "album.txt" -- ファイル名を album.txt に変更 set (the item (the count of file_list) of file_list) to "album.jpg" -- ファイル名を album.jpg に変更
tell application "iTunes" if selection of front browser window is {} then display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"} else set TID to AppleScript's text item delimiters -- text item delimiters を保存 set FI to fixed indexing -- fixed indexing を保存 set fixed indexing to true -- fixed indexing を true にセット set selectedTracks to selection -- 選択中のトラックを取得
try repeat with aTrack in selectedTracks tell aTrack set file_location to (the location of aTrack) -- 処置するトラックの場所を取得 set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定 set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割 set (the item (the count of file_list) of file_list) to album & ".txt" -- ファイル名を「アルバム名.txt」に変更 set text_filename to file_list as string -- テキストファイルの完全パスを構築する set text_file to (open for access file text_filename) -- テキストファイルを開く set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む close access text_file -- テキストファイルを閉じる end tell end repeat end try set fixed indexing to FI -- fixed indexing を保存した値に戻す set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す display alert "作業を完了しました。" buttons {"OK"} end if end tell
set (the item (the count of file_list) of file_list) to album & ".jpg" -- ファイル名を「アルバム名.jpg」に変更 set art_filename to file_list as string -- 画像ファイルの完全パスを構築する set art_file to read (open for access file art_filename) as picture -- 画像ファイルを開く set data of artwork 1 to art_file -- アートワークに画像ファイルを読み込む close access art_file -- 画像ファイルを閉じる
>944 >『選択した曲と同一フォルダ内にある「.txt」の付いたファイルを歌詞へ登録』 tell application "iTunes" if selection is {} then error "えらんでください" set sndFileList to location of selection repeat with aFile in sndFileList tell application "Finder" set theFolder to folder of aFile set textFilePath to (files of theFolder where (its name ends with ".txt")) -- textFilePath に拡張子が".txt"のfileの参照のリストが入る。 -- ファイルがなかったとき{}。 -- 複数あったときの処理はどうする? set jpegFilePath to (files of theFolder where (its name ends with ".jpg")) -- jpegについても同様 end tell end repeat end tell
選択した曲と同一フォルダ内にある「album.txt」を歌詞へ登録』 tell application "iTunes" if selection of front browser window is {} then display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"} else set TID to AppleScript's text item delimiters -- text item delimiters を保存 set FI to fixed indexing -- fixed indexing を保存 set fixed indexing to true -- fixed indexing を true にセット set selectedTracks to selection -- 選択中のトラックを取得 try repeat with aTrack in selectedTracks tell aTrack set file_location to (the location of aTrack) -- 処置するトラックの場所を取得 set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定 set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割 set (the item (the count of file_list) of file_list) to "album.txt" -- ファイル名を album.txt に変更 set text_filename to file_list as string -- テキストファイルの完全パスを構築する set text_file to (open for access file text_filename) -- テキストファイルを開く set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む close access text_file -- テキストファイルを閉じる end tell end repeat end try set fixed indexing to FI -- fixed indexing を保存した値に戻す set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す display alert "作業を完了しました。" buttons {"OK"} end if end tell
上記スクリプトのどの部分を入れ替えると 『選択した曲と同一フォルダ内にある「.txt」の付いたファイルを歌詞へ登録』 になるのかな。。 tell application "iTunes" if selection is {} then error "えらんでください" set sndFileList to location of selection repeat with aFile in sndFileList tell application "Finder" set theFolder to folder of aFile set textFilePath to (files of theFolder where (its name ends with ".txt"))
読み込むファイル名を指定している箇所のキモだけ解説しますと set file_location to (the location of aTrack) ここで処置する曲(トラック)のファイルの場所のフルパスをfile_locationに入れて set AppleScript's text item delimiters to ":" set file_list to text items of (file_location as string) ここでfile_locationを":"で区切ってバラバラにしたものをfile_listに入れて set (the item (the count of file_list) of file_list) to album & ".txt" ここでfile_listの最後の項目を「その曲(トラック)のアルバム名.txt」に変更して set text_filename to file_list as string ここでバラバラにfile_listを":"で区切ったフルパスに戻してtext_filenameに入れてます。
先程OSX10.5+iTunes8環境で『テキストを歌詞に登録』を実行してみたところ テキストの冒頭がTo the...なのですが,登録された歌詞を見てみると oT とだけ登録されてました..冒頭の二文字だけでしかも逆になってる?? 10.5だとまた違うんでしょうね。
>>948さんの.txtを含む書類を認識させたスクリプトを何とか間に入れたいですがまだ成功せず。。 アートワークは何故登録されないんでしょうかね。 >>943のサイトを見ると set art_file to read (open for access file art_filename) as picture set data of artwork 1 to art_file なぜこれでペーストされないんでしょうね。。 プレビューで開いてアートワークにコピペでは貼り付けれるのに。。
>>956 いろんな箇所をいじってみたら set art_file to read (open for access file art_filename) as JPEG picture set data of front artwork to art_file でアートワークが登録されました! アドバイス有り難うございました。
皆様ご迷惑おかけしました。アートワークは諦めます。。 せめて登録するテキストを同一フォルダ内の「".txt"が含まれているもの」にする記述を教えていただけないでしょうか? set sndFileList to location of selection repeat with aFile in sndFileList tell application "Finder" set theFolder to folder of aFile set textFilePath to (files of theFolder where (its name ends with ".txt")) どうやってこれを入れたらいいやら。。
tell application "iTunes" if selection of front browser window is {} then display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"} else set TID to AppleScript's text item delimiters -- text item delimiters を保存 set FI to fixed indexing -- fixed indexing を保存 set fixed indexing to true -- fixed indexing を true にセット set selectedTracks to selection -- 選択中のトラックを取得 try repeat with aTrack in selectedTracks tell aTrack set file_location to (the location of aTrack) -- 処置するトラックの場所を取得 set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定 set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割 set (the item (the count of file_list) of file_list) to "album.txt" -- ファイル名を album.txt に変更 set text_filename to file_list as string -- テキストファイルの完全パスを構築する set text_file to (open for access file text_filename) -- テキストファイルを開く set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む close access text_file -- テキストファイルを閉じる end tell end repeat end try set fixed indexing to FI -- fixed indexing を保存した値に戻す set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す display alert "作業を完了しました。" buttons {"OK"} end if end tell
作成していただいた上記スクリプトに>>969さんらの tell application "Finder" set theFolder to folder of aFile set textFilePath to (files of theFolder where (its name ends with ".txt")) set text_file to textFilePath as alias をどこかの行と置換して set text_file to (open for access file text_filename) set lyrics to read text_file close access text_file ここ辺りに繋げるようにすればいいんですよね。。
難しいですね・・ tell application "iTunes" set sndFileList to location of selection repeat with aFile in sndFileList tell application "Finder" set theFolder to folder of aFile set textFilePath to (files of theFolder where (its name ends with ".txt")) set text_file to first item of textFilePath as alias end tell -----ここまででフォルダ内の.txtが指定されてますが・・ tell application "iTunes" set text_file to (open for access file text_file) -- テキストファイルを開く set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む close access text_file -- テキストファイルを閉じる end tell end repeat display alert "作業を完了しました。" buttons {"OK"} end tell
アートワークの登録は何とかreadしてset dataまで行ったんですが結果、登録できないです・・ close accessがあるとset fixed indexing to trueになり削除するとfalstになります。 readでJPEGが開き、やっと set data of artwork 1 of file track id 2166 of user playlist id 1580 of source id 39 to <data まで来たんですが登録されないんですよね。。
tell application "iTunes" set TID to AppleScript's text item delimiters -- text item delimiters を保存 set FI to fixed indexing -- fixed indexing を保存 set fixed indexing to true -- fixed indexing を true にセット set selectedTracks to selection -- 選択中のトラックを取得 try repeat with aTrack in selectedTracks tell aTrack set file_location to (the location of aTrack) -- 処置するトラックの場所を取得 set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定 set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割 set (the item (the count of file_list) of file_list) to "album.jpg" -- ファイル名を album.jpg に変更 set art_filename to file_list as string -- 画像ファイルの完全パスを構築する set artworkData to read (open for access file art_filename) as JPEG picture -- 画像ファイルを開く set data of artwork 1 to artworkData -- アートワーク欄に画像ファイルを読み込む end tell end repeat end try set fixed indexing to FI -- fixed indexing を保存した値に戻す set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す end tell