GO BACK

初心者のためのAppleScript教室


「特殊な構文について」


■エラー処理を行なう


AppleScriptには、HyperTalkなどには見られない特別な構文がいくつかあります。その代表ともいえるのが、エラー処理の構文「try」です。これは、エラーが発生しそうな場所に設定し、エラーが起きたときの処理を行なうためのものです。


try
 …… 命令を記述 ……
on error
 …… エラー処理 ……
end try

「try」以降の部分でエラーが起きると、AppleScriptは「on error」へとジャンプします。そしてそこに書かれているエラー処理のスクリプトを実行し、「end try」の続きへと進みます。

 例えば、ダイアログ関係の命令があります。AppleScriptでは、ダイアログでキャンセルボタンを押すと、ユーザーによるキャンセルというエラーが発生したと認識され、スクリプトは中断してしまいます。これを防ぐのも、この構文を使います。


try
	display dialog "入力して!" default answer ""
on error
	display dialog "キャンセルされました。"
end try

このようにすると、「入力して!」というダイアログでユーザーがキャンセルボタンを押すと、「キャンセルされました」と表示されます。

 この「try」は、他に細かなパラメータを備えていますが、ちょっと難しいのでここでは割愛します。


■「idle」ハンドラについて


これは構文ではありませんが、覚えておくと重宝するので、まとめて説明しておきます。

 スクリプト編集プログラムで作成できるAppletでは、保存の際のオプション「実行後、自動的に終了しない」を使うことで、起動しっぱなしのAppletが作れます。このAppletで利用できるのが「idle」ハンドラです。

 これは、何のスクリプトも動作していないときに一定感覚で発生するハンドラです。


on idle
 …… 実行する命令 ……
 return《整数》
end idle

このような形をしています。最後の「return《整数》」というのは、次にidleイベントが発生し、このハンドラが呼び出される時間間隔を設定するものです。例えば「1を返す」とすれば、1秒後にアイドル状態ハンドラが呼び出されます。

 idleハンドラの動きがわかるよう、簡単な実験をしてみましょう。


on idle
	beep
	return 10
end idle

 これを自動的に終了しないアプリケーションとして保存し、実行してみて下さい。10秒ごとにビープ音がなりますよ。returnの数字をいろいろと変えて動作を調べると面白いでしょう。

 もう少し、実用的なものとして、「開いているウィンドウをグリッド表示する」というスクリプトを考えてみましょう。


on idle
	tell application "Finder"
		set selLoc to insertion location
		if selLoc ュ desktop then
			try
				set posData to position of window of selLoc
				set item 1 of posData to (((item 1 of posData) + 5) div 10 * 10)
				set item 2 of posData to (((item 2 of posData) + 5) div 10 * 10)
				set position of window of selLoc to posData
			end try
		end if
	end tell
	return 1
end idle

 これを実行後終了しないアプリケーションとして保存します。そして起動させたままにしておくと、選択したウィンドウの位置を10ドットごとにグリッド調整してくれます。

 実際に使ってみると、return 1と指定してあっても、処理が実行されるまでに若干の時間がかかることがわかります。バックグラウンドでidleを使って動かすと、そうテキパキとした動作はされないのです。そのあたりの「動作ののんびり具合」をよく考えて使うようにするとよいでしょう。

GO NEXT


GO HOME