2026.3.15
INASOFT
/トップ/マウスのお供 ダウンロード/WebHelp/ヘルプトップ
メモ表示を自由にカスタマイズするためのFR-Script解説
メモ欄に表示する文字列をスクリプト指定で制御するための機能です。
設定ダイアログのメモ タブで、「メモ欄への入力をスクリプト(FR-Script)として扱い、スクリプトで表示する文字列を作成する」にチェックを入れると、メモ欄に入力した文字列がスクリプト(FR-Script)として扱われ、表示更新のタイミングでスクリプトが実行されるようになります。
設定ダイアログをOKボタン or 適用ボタンを押したタイミングから、スクリプトの実行が始まります。(すでにスクリプトの実行中の場合は、強制停止してから実行となります)
基本的には、CB.SetOutputText() に入れた数値 or 文字列が記憶され、次回タイミングで表示されるようになります。表示更新毎にスクリプトの実行開始を試行しますが、ループ制御をしているなど、前回のスクリプト実行が終了していない場合は、そのまま処理が継続されます。そのため、スクリプトの中でループ制御とSleepを駆使し、変数の内容を維持しつつ文字列を決めることもできます。
スクリプトのパースエラー、0除算が実行された場合など、エラーが発生した場合は、エラー文字列がメモ欄に表示されるようになります。
なお、スクリプトが無限ループするなどして完了しない場合、スクリプトの書き換えを行ってOKボタン / 適用ボタンをを押したタイミングで中断指示が送信されます。マウスのお供自体が終了した場合は、スクリプトを実行しているスレッドを強制終了します。
文法ルールは、「いじくるつくーる」に搭載されていたR-Scriptと似たようなものとなっており、軽量版です(FR-ScriptのFはFeatherの略です)。詳細な文法解説は後述します。
スクリプトのサンプル
以下に、FR-Scriptのサンプルを示しますので、これを参考に独自の動きを構築してみてください。
(1) ランダムな数値を次々表示する。
CB.SetOutputText()で指定した数値は、そのまま10進数で表示されます。
srand(GetCurrentSecond());
loop {
CB.SetOutputText(rand())
Sleep(500)
}
(2) 固定の文字列を表示する。
CB.SetOutputText()で指定した文字列についても、そのまま表示されます。
CB.SetOutputText("スクリプトで作ったメモ")
(3) 現在時刻の秒の2倍を表示する。
a = GetCurrentSecond() b = a * 2 CB.SetOutputText(b)
(4) 今年の干支を表示する。
year = GetCurrentYear()
n = year % 12
if (n == 0) {
eto = "申"
}
else if (n == 1) {
eto = "酉"
}
else if (n == 2) {
eto = "戌"
}
else if (n == 3) {
eto = "亥"
}
else if (n == 4) {
eto = "子"
}
else if (n == 5) {
eto = "丑"
}
else if (n == 6) {
eto = "寅"
}
else if (n == 7) {
eto = "卯"
}
else if (n == 8) {
eto = "辰"
}
else if (n == 9) {
eto = "巳"
}
else if (n == 10) {
eto = "午"
}
else {
eto = "未"
}
CB.SetOutputText("今年" + year + "年は、" + eto + "年です。")
(5) CPU利用率を、頭に0を付けた3桁で表示する。
CB.FormatCPUToString()は、「表示形式」で指定可能なCPU利用率や空きメモリ等の要素を取り扱うためのコールバック関数です。元々、空き桁がスペースで補完されているので、TrimLeft()で取り除いています。
a = CB.FormatCPUToString("{c}")
b = trimleft(a)
c = padleft(b,3,"0")+"%"
CB.SetOutputText(c)
(6) 現在の年を昭和だと何年かを調べて表示します。
CB.FormatDateTimeToString()は、「表示形式」で指定可能なシステム日時の要素を取り扱うためのコールバック関数です。元々、空き桁がスペースで補完されているので、TrimLeft()で取り除いています。
a = CB.FormatDateTimeToString("yyyy")
y = ToInt(TrimLeft(a))
sy = y - 1925
CB.SetOutputText("昭和" + sy + "年")
(7) プライマリモニタの横幅・高さを表示する。
w = GetSystemMetrics(16)
h = GetSystemMetrics(17)
CB.SetOutputText("w = " + w + ", h = " + h)
(8) メモの表示は行わず、50秒(50000ミリ秒)ごとに、マウスを右上(8ミッキー)に動かし、すぐに左下(8ミッキー)に動かす(マウスふるふる相当の機能を行わせる)
while(true) {
MoveMouse(8, -8)
MoveMouse(-8, 8)
Sleep(50000)
}
組込関数MoveMouse(dx, dy)は、マウスカーソルを右にdx、下にdy移動させます(ミッキー単位)。左・上に移動したい場合は、負の値を指定します。これは、元々は「マウスふるふる」用に準備した関数ですが、マウスふるふるでも使えたら何か興味深いことができるかと考え、組込関数に移動しました。
(9) 10秒おきにクリップボードの内容(プレーンテキスト)をバルーン(トースト)を表示する。
CB.ShellNotify(text, flag)は、textの内容をバルーン(トースト)で表示するコールバック関数です。flagを指定すると 1:情報アイコン(i)、2:警告アイコン(!)、3:エラーアイコン(×)、0:アイコンなし(省略時のデフォルト) が表示できます。
loop {
CB.ShellNotify(GetClipboardText(), 0)
Sleep(10000)
}
(10) スクリプトが実行されるごとに数値をカウントアップし、その数値をバルーン(トースト)表示する。
通常、変数の内容はスクリプト終了時にクリアされますが、setenv(), getenv()を使って環境変数に変数内容を保存しておくことにより、次回のスクリプト実行時に値を持ち越しています。マウスのお供を終了させると、環境変数もクリアされます。
a = 0+getenv("num")
++a
CB.ShellNotify(a)
setenv("num",""+a)
FR-Script スクリプト仕様
FR-Scriptは、数値と文字列を直感的に扱える軽量なスクリプト言語です。コールバック(CB)を利用して、スクリプト実装元のプログラム機能を呼び出す他、時刻取得・乱数の取得・Windows APIを利用したダイアログ表示や環境変数操作にも対応しています。
1. 基本仕様
・変数とデータ型
変数名および後述の関数名は、アンダーバー(_)またはアルファベットで始まり、数字・アンダーバー(_)・アルファベットが続くというルールで付けます。下位互換性のために最後に$を付けることもできますが、現在では特に意味を持ちません。英大文字・小文字を区別しません。特に宣言などは必要なく使用できます。すべての変数はグローバル変数となります。
代入可能な型は、数値、文字列、およびこれらの配列です。配列の添え字は[n]で表します。nは0以上の数値です。変数の初期値は0となります。
配列は、x[n] = p の形で代入を行うことで、代入と共に、0 〜 n を添字が使える配列が準備されます。
初期代入変数としてTRUE=1, ISNT=1, YES=1, MAXINTEGER=2147483647, MININTEGER=-2147483648, VK_***(仮想キーコードの各値) があります。英大文字・小文字は区別されません。これらと同じ名前の変数に代入しようとすると、代入した値が優先されます。
CB、制御文で使用するキーワードなどは、変数名としては使用できません。
・即値
基本的に数値は10進数で指定します。32bitで表現可能な範囲(MININTEGER 〜 MAXINTEGER)を扱えます。0xで始まると16進数、0bで始まると2進数が指定できます。
・文字列リテラル
ダブルコーテーション "..." またはシングルコーテーション '...' で囲みます。
- エスケープシーケンス:
\n(改行),\t(タブ),\\,\"などが利用可能です。 - RAW文字列:
@を頭に付けると、\をそのまま文字として扱います。
例:@"C:\Users\Documents"(Windowsのパス指定に便利です)
スクリプトの処理系は、外部とのやり取りには文字コードにUTF-16LEを用いますが、内部的には文字コードにUTF-8を用います。
・コメント
#, //, ; で始まる行は、行末までコメント(何も行わない)となります。
2. 演算子
| 演算子 | 動作 |
|---|---|
+ | 数値同士は加算、文字列が含まれる場合は連結します。 |
- | 数値同士を減算します。 |
* | 数値同士を乗算します。 |
/ | 数値同士を除算します。0で割るとエラーになり、処理を停止します。 |
% | 数値同士を除算した余りを求めます。0で割るとエラーになり、処理を停止します。 |
** | x**yで、xのy乗を計算します。x**0(0**0を含む)は1になります。 |
= | 変数代入を行います。 |
+= , -= | 加算・減算しつつ変数代入を行います。 1増加・1減少させたい場合の書き方として、 a++, a--,++a,--aという書き方もできます。ただし、 a++, a--の場合は、加算・減算前の値が評価結果となります。 |
<< , >> | 左シフト、右シフト。 |
| , & | ビットOR, ビットAND。 |
*= , /= , %= ,<<= , >>= ,|= , &= , ^= ,**= | 各演算を行いつつ変数代入します。 |
?: | 条件演算子。(cond) ? t_expr : f_expr の形式で用いて、condが真ならばt_exprが評価され結果となり、偽ならばf_exprが評価され結果となります。例: b = (a==5)?3:7 … a=5ならば3が、a≠5ならば7がbに代入される。 |
! , ~ | 論理否定, ビット否定。 |
|| , && | if文の中で条件式をOR, ANDする場合に使用。 |
== , != | 比較。型が異なる場合は文字列に変換して比較します。 |
=== , !== | 厳密な比較。型が異なる場合は不一致とみなします。 |
< , > , <= , >= | 数値は大小比較、文字列は辞書順で比較します。型が異なる場合は偽となります。 |
(...) | 優先順位を高めて式を評価します。 |
関数名() | 組込関数(後述)を呼び出します。 |
CB.関数名() | 呼び出し元アプリケーションへのコールバック関数呼び出しです。 呼び出し元アプリケーションごとの独自の機能を提供できます。 (例:マウスのお供…マウスのそばに表示する文字列を決める機能、CPU利用率等の情報の取得機能の提供等) |
計算結果がオーバーフローしてもエラーにはなりません。
3. 制御構造 (IF-ELSE, WHILE, FOR, REPEAT-UNTIL, EXIT)
条件分岐は IF - ELSE IF - ELSE を使用します。IFの後ろの式が真の場合は直後のブロックを実行し、偽の場合はELSE IFの式を評価し、…、いずれの条件も真にならなかった場合はELSEの後ろのブロックを実行します。ELSE IF, ELSEのブロックは省略可能です。
if (score >= 80) {
msg = "合格!"
}
else {
msg = "がんばりましょう"
}
繰り返しは WHILE を使用します。WHILEの後ろの式が真の状態の場合に、後ろのブロック内を実行します。ブロックの最後まで実行すると、再び式の評価が再び行われ、…、とループします。WHILE(TRUE)と書くと無限ループになりますが、WHILE(TRUE) の特別な書き方として LOOPという書き方も可能です。
// i=0〜9の間ループする
i = 0
while(i < 10) {
TextOut("" + i)
++i
}
// 無限ループになります
i = 0
loop {
TextOut("" + i)
++i
}
繰り返しは FOR を使用することもできます。FOR (式1 , 式2 , 式3)の形になります。最初に「式1」が評価(変数初期化を想定)され、式2が真の状態の場合に、後ろのブロック内を実行します。ブロックの最後まで実行すると、式3(変数のインクリメントを想定)が評価され、再び式2の評価が再び行われ評価結果が真ならば、…、とループします。
なお、式1〜式3は省略することができ、式2を省略すると常に真(無限ループ)となります。
// i=0〜9の間ループする
for(i=0, i<10, ++i) {
TextOut("" + i)
}
// 無限ループになります
i=0
for(,,) {
TextOut("" + i)
}
for直後の括弧内の式は、C言語のようなセミコロン区切りではなく、カンマ区切りとなります。
WHILE, LOOP, FOR から抜けるには、式の評価が偽になる場合の他、BREAK を使います。条件評価にすぐに戻る場合は CONTINUE を使います。
i = 0
loop {
TextOut("" + i)
++i
// 現在時刻の秒の部分が30を超えたらループを抜けます
if (GetCurrentSecond() > 30) {
break
}
}
TextOut("ループを抜けました")
i = 0
while(i < 100) {
TextOut("" + i)
// 現在時刻の秒の部分が30未満の時は、++iを実行せずに条件評価まで戻ります
if (GetCurrentSecond() < 30) {
continue
}
++i
}
i = 0
while(true) {
TextOut("" + i)
// 現在時刻の秒の部分が30を超えたらループを抜け、スクリプト自体も直ちに終了します
if (GetCurrentSecond() > 30) {
exit
}
++i
}
TextOut("ここには来ません")
ループ継続判断を後から行う方式として、REPEAT-UNTIL を使用することもできます。まずはブロック内の実行が行われ、その後に行われる式の評価が真ならばループから抜けます。
// i=0〜5の間ループする
i = 0
repeat {
TextOut("" + i)
++i
} until (i == 5)
スクリプトの終端に達するか、EXITが実行されると、スクリプトを終了します。既定では、変数はすべてクリアされて、次回実行時には残りません。必要な場合は後述の DEFINE("KeepVar",1) で変数のクリアが行われないようにするか、setenv(), getenv()を使って環境変数へ退避してください。環境変数は、プログラムの実行中は残ります。
制御文で使われるキーワードは、英大文字・小文字は区別されません。
4. 組込関数リファレンス
4-1. 制御・日時・乱数
| 関数名 | 説明 |
|---|---|
Sleep(n) | nミリ秒だけスクリプトの処理を停止します。0を指定すると、他のスレッドに一瞬だけ処理を譲ってすぐに戻ります。 |
GetCurrentYear() | 現在のローカル日時の、年・月・日・曜日・時(24h表記)・分・秒・ミリ秒を返します。 曜日は、0=日曜日, 1=月曜日, … , 6=土曜日を意味します。 ミリ秒とは、1000ミリ秒=1秒です。 |
srand([n]) | 数値nで疑似乱数を初期化します。nを省略した場合は、OS起動時からの経過時間(ミリ秒)を使います。 |
rand() | 疑似乱数を返します。 |
GetFR_ScriptVersion() | FR-Scriptのバージョン番号を数値で返します。(ver.X.YY.ZZ ⇒ XYYZZ) |
DEFINE(item, n) | インタプリタの動作設定です。文字列itemで示される項目について設定します。DEFINE("MustVarDef", 1) … 未代入の変数が参照されたらエラーにします。DEFINE("KeepVar", 1) … スクリプト終了時に変数をクリアしません。 |
4-2. 文字列・変換関数
| 関数名 | 説明 |
|---|---|
strlen(s) | 文字列sのバイト数を返します。 |
strupr(s) | アルファベットを大文字に変換した文字列を返します。 |
strlwr(s) | アルファベットを小文字に変換した文字列を返します。 |
strstr(s, t) | 文字列sの中から文字列tを探し、見つかった位置(バイト)を返します。見つからなかった場合は-1を返します。 |
strstri(s, t) | strstr()の英大文字・小文字を区別しない版です。 |
strcmp(s, t) | 文字列sと文字列tを比較し、同じならば0、辞書順でsの方が小さければ負の数、辞書順でsの方が大きければ正の数を返します。 |
strcmpi(s, t) | strcmp()の英大文字・小文字を区別しない版です。 |
left(s, n) | 先頭から n バイト抜き出します。 |
right(s, n) | 末尾から n バイト抜き出します。 |
mid(s, n, m),substr(s, n, m) | n バイト目から m バイト抜き出します。 |
toStr(n) | 数値を10進数文字列に変換します。 |
toStr16(n), toStr2(n) | 数値を16進数文字列, 2進数文字列に変換します。 |
toInt(s) | 文字列を数値に変換します。 |
GetAsciiCode(s, n) | 文字列sのnバイト目の文字コードを返します。nが範囲外の場合は-1を返します。 |
AsciiCode(n) | 文字コードnの1バイトからなる文字列を返します。 |
Replace(s, r1, r2) | 文字列sの中からr1を探し、r2に置換した文字列を返します。 |
PadLeft(s, n[, t]) | 文字列sがn桁以上になるように、文字列の左側に文字tを補完した文字列を返します。tを省略した場合はスペースとなります。 |
PadRight(s, n[, t]) | 文字列sがn桁以上になるように、文字列の右側に文字tを補完した文字列を返します。tを省略した場合はスペースとなります。 |
TrimLeft(s[, t]) | 文字列sの左側から、tで指定された文字群を取り除いた文字列を返します。tを省略した場合はスペースとなります。 |
TrimRight(s[, t]) | 文字列sの右側から、tで指定された文字群を取り除いた文字列を返します。tを省略した場合はスペースとなります。 |
ConvChar(s, f) | 文字列sの中の文字について、fで示される特定の変換を行います。fはビットごとのフラグであり、次の意味を持ちます:CC_HIRA_KATA (0x00000010) … ひらがな→カタカナ … ひらがなを対応する全角カタカナに変換します。CC_KATA_HIRA (0x00000020) … カタカナ→ひらがな … 上記の逆操作です。CC_KATA_FL_HF (0x00000040) … カタカナ:全角→半角 … 全角カタカナを、対応する半角カタカナに変換します。ただし、小さい「ヮ」については対応する半角文字が存在しないため、大きい「ワ」に対応する半角文字に変換します。CC_KATA_HF_FL (0x00000080) … カタカナ:半角→全角 … 上記の逆操作です。CC_ALPHA_FL_HF (0x00000100) … 英字:全角→半角 … 全角アルファベットを対応する半角アルファベットにします。CC_ALPHA_HF_FL (0x00000200) … 英字:半角→全角 … 上記の逆操作です。CC_NUM_FL_HF (0x00000400) … 数字:全角→半角 … 全角数字(0〜9のみ。丸で囲ったりしたものや漢数字・ローマ数字などは対象外)を対応する半角数字にします。CC_NUM_HF_FL (0x00000800) … 数字:半角→全角 … 上記の逆操作です。CC_SYM_FL_HF (0x00001000) … 記号:全角→半角 … 下記の全角記号を、対応する半角記号に変換します。→ ! ” # $ % & ’ ( ) * + , − . / : ; < = > ? @ [ ¥ ] ^ _ ` { | } 〜 「 」 。 、CC_SYM_HF_FL (0x00002000) … 記号:半角→全角 … 上記の逆操作です。CC_FALPHA_UP_LO(0x00004000) … 英字(全角):大文字→小文字 … 全角アルファベットの大文字を、対応する全角小文字に変換します。CC_FALPHA_LO_UP(0x00008000) … 英字(全角):小文字→大文字 … 上記の逆操作です。CC_HALPHA_UP_LO(0x00010000) … 英字(半角):大文字→小文字 … 半角アルファベットの大文字を、対応する半角小文字に変換します。CC_HALPHA_LO_UP(0x00020000) … 英字(半角):小文字→大文字 … 上記の逆操作です。CC_CTRL_ESC (0x00040000) … コントロールコード可視化(エスケープ文字) … コピーされた文字列の中にコントロールコード(NULL文字除く)があったら、C言語方式の記法に置き換えます(\, ", 'はそのまま)CC_ESC_CTRL (0x00080000) … コントロールコード化(エスケープ文字利用) … 上記の逆操作です。つまり、文字列にコントロールコードを埋め込みます。CC_CTRL_CARET (0x00100000) … コントロールコード可視化(キャレット記法) … コピーされた文字列の中にコントロールコード(NULL文字除く)があったら、^A 〜 ^Z の記法に置き換えます(^ 自体はそのまま)CC_CARET_CTRL (0x00200000) … コントロールコード化(キャレット記法) … 上記の逆操作です。つまり、文字列にコントロールコードを埋め込みます。CC_TAB_4SP (0x00400000) … TAB→4スペースに変換 … TABを4桁単位のスペースに置換します。CC_TAB_8SP (0x00800000) … TAB→8スペースに変換 … TABを8桁単位のスペースに置換します。 |
Regex_Match(s, r1 [, opt]) | 文字列sが、正規表現r1にマッチしたら1を返し、マッチしなければ0を返します。optに "i" を指定すると、英大文字・小文字を区別しなくなります。 |
Regex_Replace(s, r1, r2 [, opt]) | 文字列sの中から、正規表現r1にマッチする箇所を探し、文字列r2に置き換えた結果の文字列を返します。optに "i" を指定すると、英大文字・小文字を区別しなくなります。 |
Regex_Search(s, r1 [, opt][, startpoints_array, length_array]) | 文字列sの中から、正規表現r1にマッチする箇所を調べ、マッチした個数を返します。optに "i" を指定すると、英大文字・小文字を区別しなくなります。startpoints_array, length_arrayは、詳細な結果を得たい場合に、結果を格納する配列変数の名前を文字列として指定します。startpoints_arrayには、マッチする部分までのバイト数、length_arrayには、マッチする部分の長さが、それぞれ見つかった順に配列の要素として格納されます。 |
4-3. 配列
| 関数名 | 説明 |
|---|---|
ArraySize(a), Len(a) | 文字列aで示される変数名の配列の、要素数を返します。(例:ary[5]=1として確保 ⇒ ArraySize("ary") ⇒ 6を返す) |
MultiLineToStringArray(a) | 文字列aで示される変数名の複数行文字列を、行ごとの配列に変換します。 |
ArrayToMultiLineString(a[, crlf]) | 文字列aで示される変数名の文字列配列を、複数行文字列変数に変換します。crlfには改行コードを指定できます。省略時は "\r\n" です。 |
SortArray(a) | 文字列aで示される変数名の配列(文字列を想定)を昇順ソートします。 |
SortArrayDesc(a) | 文字列aで示される変数名の配列(文字列を想定)を降順ソートします。 |
UniqArray(a) | 文字列aで示される変数名の配列(文字列を想定)をuniq(連続した重複文字列を除去)します。 |
DelEmptyArray(a) | 文字列aで示される変数名の配列(文字列を想定)の中に空文字列があれば、その要素を除去し、配列を減らします。 |
4-4. システム・UI関数
| 関数名 | 説明 |
|---|---|
getenv(name) | 環境変数の値を取得します。 |
setenv(name, value) | 環境変数nameに値valueを設定します。環境変数の設定はこのプログラム内のみで有効であり、他のプログラムには影響しません。 また、環境変数は、スクリプト終了後も維持され、呼び出し元となるプログラム終了後に消滅します。 |
TextOut(msg[, title]) | メッセージボックスを表示します。 |
Question(msg[, title]) | はい(戻り値=1) / いいえ(戻り値=0) の選択ダイアログを表示します。 |
Question_OkCancel(msg[, title]) | OK(戻り値=1) / キャンセル(戻り値=0) の選択ダイアログを表示します。 |
Question_YesNoCancel(msg[, title]) | はい(戻り値=1) / いいえ(戻り値=0) / キャンセル(戻り値=-1) の選択ダイアログを表示します。 |
Error(msg[, title]) | エラー(×),警告(!),情報(i)アイコン付きのメッセージボックスを表示します。 |
MessageBeep(n) | システムの一般的な警告音に定義されたサウンド等を鳴らします。 ( n:0…一般警告音, 0x10…エラー音, 0x20…問合せ音, 0x30…警告音, 0x40…情報音)いずれも、鳴らせない場合は一般警告音またはビープ音が鳴ります。 |
SetClipboardText(text) | クリップボードにtextを設定します。成功した場合は1、失敗した場合は0を返します。 |
GetClipboardText() | クリップボード内容がプレーンテキストとして読み取れれば、その内容を返します。失敗した場合は空文字列を返します。 |
GetSystemMetrics(n) | GetSystemMetrics APIを、与えられた引数で呼び出し、その結果を返します。(例: n=67…セーフモード起動時は1、16…プライマリモニタの横幅(ピクセル単位)、17…プライマリモニタの高さ(ピクセル単位)、19…マウスが接続されていたら1、75…ホイール付きマウスだったら1、0x1000…リモート接続状態ならば1) |
GetActiveWindowTitle() | 現在アクティブなウィンドウのタイトルを取得し、その内容を返します。権限不足などで取得に失敗した場合は空文字列を返します。 取得した文字列が空文字の場合もあるため、必ずしも空文字が失敗を意味するとは限りません。 |
4-5. マウス・キーボードイベント関数
| 関数名 | 説明 |
|---|---|
GetCursorPosX() | 現在のマウスカーソルの座標(x, y)のうちxを返します。 |
GetCursorPosY() | 現在のマウスカーソルの座標(x, y)のうちyを返します。 |
SetCursorPos(x, y) | マウスカーソルの位置を座標(x, y)に設定します。 |
MoveMouse(dx, dy) | マウスカーソルを右に dx、下に dy 移動させます(ミッキー単位)。左・上に移動したい場合は、負の値を指定します。 |
MouseWheel(n) | マウスホイールを n だけ回転させたことにします。 |
MouseButtonLeft(p) | それぞれマウスの左ボタン・右ボタン・中央ボタンが、p = 1:押し、p = 0:離し したことにします。 |
MouseButtonX1(p) | マウスのX1・X2が、p = 1:押し、p = 0:離し したことにします。X1・X2ボタンは、ブラウザの「戻る」「進む」が割り当てられることが多いボタンです。 |
KeybdEvent(vkeycd, p) | vkeycdに指定した仮想キーコードのキーについて、p = 1:押し、p = 0:離し します。vkeycdには、VK_***の指定が利用できます。 |
SendInputUnicode(c, p) | cで指定した文字(Unicode 1文字)について、p = 1:押し、p = 0:離し します。 |
GetKeyState(c) | cで指定した仮想キーコードのキーの状態を返します。負の値の時にはキーが押されていることを意味します。VK_NUMLOCKなどのトグルキーの場合は、ONの状態で最下位ビットが1になります。 |
GetIMEState() | 現在アクティブなウィンドウでIMEがONならば1、そうでないなら0を返します。状態取得の過程でエラーが発生した場合は -1 が返ります。 アクティブなウィンドウに対する権限が不足する場合など、必ずしも正しい情報が得られるとは限りません。 |
SetIMEState(p) | 現在アクティブなウィンドウでIMEの状態の変更を試みます。p = 1:ON、p = 0:OFF です。アクティブなウィンドウに対する権限が不足する場合など、必ずしも設定が成功するとは限りません。戻り値が正確な成否を表すとも限りません。 |
GetKeyInputDeviceList(a) | 現在接続されているすべてのキーボードデバイス名を取得し、文字列aで示される変数名の配列(文字列配列)に格納します。例: GetKeyInputDeviceList("keybdlist") … 配列keybdlistに、キーボードデバイス名が格納されます。 |
※[...] … 省略可能な引数であることを示します。
組込関数名の英大文字・小文字は区別されません。
下位互換性のため、組込関数名の後ろに$をつけることができますが、現在では単に無視されます。
5. ユーザー定義関数
// ユーザー定義関数
func get_sum(a, b, c) {
d = a + b + c
return d
}
// rに6が代入される
r = get_sum(1, 2, 3)
FUNCキーワードから続く一連のブロックでユーザー定義関数を定義できます。関数名の命名ルールは変数名と同じです。英大文字・小文字は区別されません。RETURNで関数から抜けるとともに、結果としての値を返却できます。
関数内で使われる変数であっても、グローバルスコープの扱いとなりますが、引数は、この関数内のみのローカルスコープとなります。
呼び出し時の引数の数と、関数定義時の引数の数が違う場合は、少ない方が有効となります。引数には数値・文字列を指定できます。配列は指定できません。
ユーザー定義関数から、自身または別のユーザー定義関数を呼び出すこともできますが、呼び出しが重ねられる回数は512回に制限されます。それを超えるとエラーになります。
6. サンプルコード
// ユーザーへの挨拶と環境変数の表示
user = getenv("USERNAME")
IF (Question(user + "さん、環境を表示しますか?", "確認")) {
path = getenv("PATH")
Information("PATHの内容: " + left(path, 50) + "...", "システム情報")
}
7. その他
構文エラーがある場合や、ゼロ除算・関数名が見つからないなどの場合は、エラーが発生した行番号がメッセージダイアログで表示されます。
エラーにならないバグの解析には、
TextOut()やMessageBeep()を活用してください。
FR-Scriptについて:
このスクリプト言語は、いじくるつくーる(Rnsf ver.7)に搭載されていたR-Scriptの軽量版となります。
GOTO, GOSUB,ラベル などの一部機能や、大部分の関数(ファイル・レジストリ操作系・ダイアログ構築系・DLL呼び出し等)は省かれています。一方で、キーボード・マウス操作のシミュレート、クリップボード(テキスト)操作を実現する組込関数の利用や、コールバックによるスクリプト呼び出し元アプリケーションによる機能提供が可能です。
FR-Scriptの初期構築、このマニュアルの初期作成について:
FR-Scriptのインタプリタの初期構築、および、このマニュアルの初期作成は、生成AIによるプログラミング手法の確立を目的に、テキストで書かれた文法書を、生成AIのGeminiに渡して作成したコード(lex, yacc, C++)をベースに、作者の手により手直し、あるいは、生成AIとの相談による修正を経て、作成されました。極めて素早い期間での構築が可能となりました。
設定 - メモ タブ
目次へ
※このページは、ソフトウェアに付属のヘルプファイルをWeb用に再構築したものです。大部分に自動変換を施しているため、一部は正しく変換しきれずに表示の乱れている箇所があるかもしれませんが、ご容赦下さい。また、本ドキュメントはアーカイブドキュメントであり、内容は、右上の作成日付の時点のものとなっております。一部、内容が古くなっている箇所があるかと思いますが、あらかじめご了承下さい。
※このページへは、自由にリンクしていただいてかまいません。
■このページに関するご意見をお待ちしております → フィードバックページ

FR-Script解説