スクリプト2(変数)


◆ 変数とは?

変数とはデータを保存しておける入れ物です。スクリプトの中では頻繁に変化する文字列や数字を扱いたいときがあります。 それを保存し管理するための入れ物だと思ってください。この入れ物は単なる文字列として表現されます。

※変数はどのプログラミング言語にも出てくる重要なものです。このサイトでは詳しく説明できないので他の言語(C言語など)の 変数を解説したサイトを見たほうがいいと思います。


◆ 変数の作り方

ではその変数はどうやって作るのでしょうか。多くのプログラミング言語にはデータ型(整数型や浮動小数点型など)というものがあります (よくわからなければ聞き流してください)。例えばC言語で変数を作る(宣言)するときは「int Var」などと書きます(Varというのが変数となります)。 しかしPowerProにはデータ型がありません。ではどうやって変数を作るのでしょうか。

PowerProで変数を作るときはスクリプトの中でキーワード以外の文字列を使えばいいだけです。例えば「hensuu」という名前の 変数を作ってその変数に「test」という文字列を入れたいと思ったとすると

hensuu = "test"

このようになります。早い話が変数を作って何か文字列または数字を入れたいと思ったときに変数名を書けばいいというだけです。 他の言語のように前振りは必要ありません(globalやlocalなどを使って明示的に宣言することもできますがここでは触れません) 。ちなみに何気なく「hensuu = "test"」のように「=(イコール)」を使いましたが、このイコールは左辺のものに右辺のものを入れる(代入する)こと を意味します。なのでこの例の場合はhensuuという変数に「test」という文字列が入ることになります。

ただし基本的には変数を初期化しないと変数は作れません。つまり「変数 = 〜」と書いて変数を作ります。例えば次のように変数名だけを書くとエラーになります。

;これはエラー
hensuu

このように書くと「hensuu」がファイルコマンドと間違えられるからです。

あと変数名にはいくつかルールがあります。まず変数名に使えるのは英数字、アンダースコア( _ )のみです。日本語は使えません。ちなみに大文字、小文字は区別されません。 また変数名の一番最初の文字はアルファベットでなければいけません。例えば「a0」は使えますが「0a」は使えません。あと23文字以内であることです。

さらにキーワードは使えません。キーワードとはrandomやnot、anywindowなどのPowerProの特別な文字列のことです。変数として使えないキーワードについては ヘルプの「Variables」などを見てください。


◆ 代入

PowerProの変数に代入できるものは文字列だけです。例えば先の例では「test」という文字列を代入しました。つまり文字列を代入するときは

hensuu = "mojiretsu"

となります。文字列を代入するときは必ずダブルクォーテーションで囲んでください。もし囲わずに

hensuu = mojiretsu

と書いてしまうと「mojiretsu」が変数として扱われてしまいます。この前に「mojiretsu」という変数が使われていなければここで 「mojiretsu」という変数が作られてしまうということです。ぜひ注意してください。ちなみにこのようにできてしまった変数は 「""」(何もない文字列)で初期化されます。

それでは数字は変数に代入できないのか?というとそんなことはありません。例えば次のように数字を代入することができます。

Var = 37

こうすると変数Varには37が入ることになります。しかし実際PowerProでは代入した数字は文字列として扱われます。 つまり変数Varには「37」ではなく「"37"」が入っていることになるのです。この違いがわかるでしょうか。 かなりわかりにくいですね。しかしわからなくても問題ないので気にしなくていいです。

少し話が逸れますが変数に入れた37が文字列「"37"」になってしまうのなら足し算などの計算はできないのか?というとそんなことはありません。 実はPowerProのスクリプトでは数字だけの文字列、例えば"37"などは自動的に判別され数字として扱うことができるのです。 つまり数字だけの文字列は数字でも文字列でも両方で扱うことができるということです。 例を出してみましょう。

Var1 = "-5" + "12"
Var2 = "-5" ++ "12"

この二つの式のうち上の式の「+」は数学と同じ足し算を意味します。文字列同士を足すので不思議な感じがしますが普通に計算できます。 つまりVar1は「-5 + 12」で"7"という文字列が代入されるということです。 下の式の「++」は2つの文字列をくっつける役割をします。つまりVar2には「"-512"」という文字列が代入されるのです。 この違いをよく比べてみてください。 このように数字だけの文字列は数字としても扱うことができるのです。また上の式のように計算するときは普通に

Var1 = -5 + 12

としても計算できます。

数字と文字列の違いがわからんという人もいるかと思いますがここはそれがわからなくても計算などは普通にやってくれればできるので今回の話は適当に聞き流してくれてもいいです。 (しかし少し高度なことをしようとするときは多少意識する必要があります)


◆ 変数を扱うための準備

これから変数を使っていくのに一つ設定をしなければなりません。とりあえずこれから言う設定は必ず設定しておいてください。

PowerProの設定ダイアログを出しSetupタブの「Advanced setup」を開いてください。Charactersタブの「Expression in () follows:」 のところに下図のように「&」を指定して置いてください。



これを設定しないと変数がうまく処理できません。


◆ 変数を実際に使う

それでは実際に変数をBuilt-in コマンドなどと組み合わせてみましょう。まず下のスクリプトを見てください。

Var = "Test Message"
*Message Var

最初にVarという変数に「Test Message」という文字列を代入していますね。そのあと*Messageコマンドでその変数に入れた文字列を表示しています。 *Messageコマンドの構文は

 *Message [自動で閉じるまでの秒数(数字、省略可)...] [表示する文字列...]

となります。このスクリプトを実行するとメッセージウィンドウに「Test Message」と表示されるはずです。実際に実行してみましょう。



するとどうでしょう。おかしいですね。メッセージには変数名である「Var」としか表示されていません。

実はこのとき*Messageコマンドで「Var」は変数としてではなく単なる「Var」という文字列として処理されてしまったのです。

それじゃあ変数の中身を表示するにはどうするんだ?そのためには「&( )」を使います。具体的にスクリプトを書くと次のようになります。

Var = "Test Message"
*Message &(Var)

今度は変数Varを&( )で囲っていますね。これを実行してみましょう。



今度はちゃんと変数の中身が表示され「Test Message」となっていますね。

このように変数の中身を取り出すときは「&(変数)」と書きます。これは非常に重要で特にBuilt-in コマンドと組み合わせるときに必要です。 ちなみにこの「&」は前の「◆ 変数を扱うための準備」で指定した「&」です。これを「$」などと指定すれば変数の中身を取り出すときは「$(変数)」 と指定することになります。しかしこのサイトでは「&」と指定してやっていくことにします。

これがわかればスクリプトの一番最初に出したスクリプト例を理解することができます。もう一度そのスクリプトを見てみましょう。

"C:\Windows\notepad.exe"
*Window Trans 80 =notepad
x = random 1024
y = random 768
*Window Position &(x) &(y) = = =notepad

このスクリプトは最初に言ったように「メモ帳を起動した後メモ帳を透明化してさらにメモ帳のウィンドウをランダムに移動させる」というスクリプトです。

まず3行目と4行目に注目してください。ここで説明した変数xとyを作って「random 1024」と「random 768」をそれぞれ代入しています。 この「random n」(nは正数)というのは「0〜(n-1)の間でランダムに数字を生成する」という意味です。なので「x = random 1024」は「0〜1023の 間でランダムに数字を生成してその数字を変数xに代入する」ということになります。つまり変数x、yの中身は実行するたびに変わるかもしれないということですね。

5行目を見てください。ここに先ほど説明した&( )が変数に使われています。先に*Window Position コマンドの構文を見ておきましょう。 このコマンドは指定したウィンドウを指定した位置に幅、高さも変えて移動させるコマンドです。

 *Window Position x y width height target
 (x、y:スクリーン座標位置、width:ウィンドウの幅、height:ウィンドウの高さ、target:ターゲットウィンドウ)

このようにPositionの後に順にパラメータを指定します。上のスクリプトを見るとスクリーン座標位置が&(x)と&(y)となります。 ここで変数が使われていますね。「*Window Postion x y = = =notepad」としてしまうとエラーになります。 変数x、yの中身を取り出さなければなりません。だから&( )で囲われいているのです。

さて*Window Positionのパラメータを見るとウィンドウの幅、高さの部分に当たるところにどちらも「=」が指定されています。 これは「値を変更しない」ときに指定するものです。今回はウィンドウを移動させるだけが目的なので幅、高さは変えません。 だからパラメータに「=」を指定します。

最後の「=notepad」はターゲットです。2行目の*Window Trans コマンドでも「=notepad」とありますが同じです。 このようなターゲットの指定方法はのちにもっと詳しく説明しようと思うのでここではメモ帳をターゲットにするときはこうするとだけ思ってください。

以上でスクリプトの意味が大体わかったでしょうか。早速実行したいのですが実は一つコマンドが抜けています。それは*Waitコマンドです。 これは時間を置くコマンドなのですがメモ帳を起動した後に入れます。ここでなぜ時間を置くかというとメモ帳が起動しきっていなのに *Window Transコマンドが実行される可能性があるからです。もし起動していないのにコマンドを実行すると、透明化するウィンドウがない!というわけでエラーになってしまいます。 だから*Waitコマンドをはさみます。スクリプトは最終的に次のようになります。

"C:\Windows\notepad.exe"
*Wait ready
*Window Trans 80 =notepad
x = random 1024
y = random 768
*Window Position &(x) &(y) = = =notepad

*Wait readyは直前のプログラムが起動するまで待つコマンドです。これでスクリプトができました。早速実行してみてください (Win2000/XP以外のユーザは3行目の透明化処理を削除して実行してください)。 しかし下手するとメモ帳のウィンドウが完全に画面外に出てしまう可能性もあります。そうならないようにrandomの後の数字は 画面のサイズに合わせて適当に設定してください。(全く役に立たないスクリプトですね。)

あと注意してほしいのは変数の中身を処理したいときはいつでも&( )で囲えばいい、というわけではありません。囲わなくてもいい場合が いくつかあり、式の中やIf文の条件式の中などでは&( )で囲う必要ありません。例えば

x = "Test"
y = x ++ "Script"
; yの中身は"TestScript"

は正しいのですが

x = "Test"
y = &(x) ++ "Script"
; &( )で囲わなくてよい

は間違いです。


◆ 情報を知るためのキーワード

ここは変数とは少し違う話になりますが変数と似ています。PowerProはスクリプトで使うためのシステムの情報を提供してくれる キーワードを持っています。具体的にはマウスの位置(xmouse、ymouse)やメモリ残量率(pmem)、現在アクティブなウィンドウのキャプション(caption)などを格納しているキーワードです。 ここでは全て説明できないのでどのようなキーワードがあるのかはヘルプの「Expressions」を見てください。

具体的にマウスの位置をメッセージに表示してみましょう。マウスの位置が入っているキーワードはxmouseymouseです。xmouse、ymouseは それぞれ画面の水平方向、垂直方向のマウスの位置を格納しています。次のスクリプトを使ってみましょう(スクリプトといっても1行ですが)。

*Message "&(xmouse), &(ymouse)"

xmouseとymouseの中身を表示したいのですから&( )で囲っていますね。ちなみにダブルクォーテーションで囲っているのは、 &(xmouse)が*Messageコマンドの第一のパラメータである「閉じるまでの秒数」と間違えられるのを防ぐためです。 このスクリプトを実行してみましょう。



このように表示されるはずです。もちろんマウスの位置によって数字は変わります。ただしこれらのキーワードは変数と違って 読み取り専用なので代入はできません。

このような使い方ではまったく役に立ちませんがこれらのキーワードは条件判断などで使って真価を発揮します。 ぜひどんなキーワードでどんな情報を知ることができるかを調べてみてスクリプトの中で使ってみてください。


◆ デバッグウィンドウ

スクリプトを組んでいてちゃんとスクリプトがうまくいっているかを確かめたいときがあります。そのとき使われるのがデバッグウィンドウです。 デバッグ、といってもたいそうなことができるわけではなく単に文字列を表示させるだけの機能です。

デバッグウィンドウを表示するには *Script Debug コマンドを使います。具体的に使ってみましょう。

*Script Debug Success!

例えばここまでくれば成功することになるだろう、と思ったところに上の文を入れます。そして実行すると



このようなウィンドウが表示され「Success!」と表示されていますね。これで成功したことがわかります。

もちろん単なる固定的な文字列だけでなく変数の中身も表示できます。例えば

x = "Debug"
y = x ++ "Test"
*Script Debug 変数xは &(x)、変数yは &(y)です。
z = 12
*Script Debug &(z)

これを実行すると



となります。注意してほしいのは早く実行された*Script Debugのほうが下のほうに表示されるということです。 この例では変数xやyより変数zのほうがデバッグウィンドウ内の上に表示されていますね。


とりあえず以上で変数の解説は終わりにします。


スクリプト1へ  トップへ  スクリプト3へ