Written in Japanese(UTF-8)
2026.2.15
INASOFT


/トップ/キーボードシミュレータ ダウンロード/WebHelp/ヘルプトップ

スクリプトでキーボードシミュレートを自由にカスタマイズするためのFR-Script解説

スクリプト入力画面(FR-Script入力画面モード)

キーボードシミュレートするキーや文字列をスクリプト指定で制御するための機能です。

入力モードを選択するラジオボタンで「スクリプト入力モード」を選ぶと、入力した文字列がスクリプト(FR-Script)として扱われ、「入力開始」ボタンの押下でスクリプトが実行されるようになります。

なお、スクリプトが無限ループするなどして完了しない場合、「中止」ボタンを押すと中止できます。本プログラム自体が終了した場合は、スクリプトを実行しているスレッドを強制終了します。
スクリプト入力モードを利用する場合は、「入力を○○回繰り返す」の指定は無視されます。ループ制御はスクリプト内で指定してください。

文法ルールは、「いじくるつくーる」に搭載されていたR-Scriptと似たようなものとなっており、軽量版です(FR-ScriptのFはFeatherの略です)。詳細な文法解説は後述します。

スクリプトのサンプル

以下に、FR-Scriptのサンプルを示しますので、これを参考に独自の動きを構築してみてください。

(1) ランダムな数値を3文字入力する。

 KeybdEvent()は指定された仮想キーコードを押し離しする組み込み関数であり、第2引数は、キーボードを 1 = 押す、0 = 離す ことのシミュレーションを意味します。
 その他の組み込み関数は、スクリプト仕様の関数リファレンスをご参照ください。

srand(GetCurrentSecond());
i = rand() % 10
KeybdEvent(VK_0+i, 1)
KeybdEvent(VK_0+i, 0)
Sleep(20)
i = rand() % 10
KeybdEvent(VK_0+i, 1)
KeybdEvent(VK_0+i, 0)
Sleep(20)
i = rand() % 10
KeybdEvent(VK_0+i, 1)
KeybdEvent(VK_0+i, 0)
Sleep(20)

(2) Aを10回押す。

 KeybdEvent()で利用できるキーコードは、仮想キーコードと特殊入力一覧を参照してください。

i = 0
while(i < 10) {
    KeybdEvent(VK_A, 1)
    KeybdEvent(VK_A, 0)
    Sleep(20)
    ++i
}
次の書き方もできます。
for(i=0 , i<10, ++i) {
    KeybdEvent(VK_A, 1)
    KeybdEvent(VK_A, 0)
    Sleep(20)
}

(3) 「管」の文字を10回入力する。

 SendInputUnicode() は、指定された1文字をアクティブなプログラムに流し込む組み込み関数です。

i = 0
while(i < 10) {
    SendInputUnicode("管", 1)
    SendInputUnicode("管", 0)
    Sleep(20)
    ++i
}
次の書き方もできます。
for(i=0 , i<10, ++i) {
    SendInputUnicode("管", 1)
    SendInputUnicode("管", 0)
    Sleep(20)
}


FR-Script スクリプト仕様

FR-Scriptは、数値と文字列を直感的に扱える軽量なスクリプト言語です。コールバック(CB)を利用して、スクリプト実装元のプログラム機能を呼び出す他、時刻取得・乱数の取得・Windows APIを利用したダイアログ表示や環境変数操作にも対応しています。

1. 基本仕様

・変数とデータ型

変数名および後述の関数名は、アンダーバー(_)またはアルファベットで始まり、数字・アンダーバー(_)・アルファベットが続くというルールで付けます。英大文字・小文字を区別しません。
なお、初期代入変数として、数値変数YesおよびisNTには、数値1が最初から設定されています。

・即値

 基本的に数値は10進数で指定します。32bitで表現可能な範囲(-21474836482147483647)を扱えます。0xで始まると16進数、0bで始まると2進数が指定できます。
 True1False0を意味します。

・文字列リテラル

 ダブルコーテーション "..." またはシングルコーテーション '...' で囲みます。

 スクリプトの処理系は、外部とのやり取りには文字コードにUTF-16LEを用いますが、内部的には文字コードにUTF-8を用います。

・コメント

 #, //, ; で始まる行は、行末までコメント(何も行わない)となります。



2. 演算子

演算子動作
+数値同士は加算、文字列が含まれる場合は連結します。
-数値同士を減算します。
*数値同士を乗算します。
/数値同士を除算します。0で割るとエラーになり、処理を停止します。
%数値同士を除算した余りを求めます。0で割るとエラーになり、処理を停止します。
=変数代入を行います。
+= , -=加算・減算しつつ変数代入を行います。
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, 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
while(i < 10) {
    TextOut("" + i)
    ++i
}
// 無限ループになります
i = 0
loop {
    TextOut("" + i)
    ++i
}

繰り返しは FOR を使用することもできます。FOR (式1 , 式2 , 式3)の形になります。最初に「式1」が評価(変数初期化を想定)され、式2が真の状態の場合に、後ろのブロック内を実行します。ブロックの最後まで実行すると、式3(変数のインクリメントを想定)が評価され、再び式2の評価が再び行われ評価結果が真ならば、…、とループします。

for(i=0, i<10, ++i) {
    TextOut("" + i)
}

for直後の括弧内の式は、C言語のようなセミコロン区切りではなく、カンマ区切りとなります。

WHILE, LOOP, FOR から抜けるには、式の評価が偽になる場合の他、BREAK を使います。条件評価にすぐに戻る場合は CONTINUE を使います。

スクリプトを直ちに終了させる場合は、EXIT を使います。

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("ここには来ません")

ここで登場したキーワード(IF, ELSE, WHILE, LOOP, FOR, BREAK, CONTINUE, EXIT)および、TRUE, FALSEは、変数名としては使えません。



4. 組み込み関数リファレンス

制御・日時・乱数

関数名説明
Sleep(n)nミリ秒だけスクリプトの処理を停止します。0を指定すると、他のスレッドに一瞬だけ処理を譲ってすぐに戻ります。
GetCurrentYear()
GetCurrentMonth()
GetCurrentDay()
GetCurrentDayOfWeek()
GetCurrentHour()
GetCurrentMinute()
GetCurrentSecond()
GetCurrentMilliSeconds()
現在のローカル日時の、年・月・日・曜日・時(24h表記)・分・秒・ミリ秒を返します。
曜日は、0=日曜日, 1=月曜日, … , 6=土曜日を意味します。
ミリ秒とは、1000ミリ秒=1秒です。
srand([n])数値nで疑似乱数を初期化します。nを省略した場合は、OS起動時からの経過時間(ミリ秒)を使います。
rand()疑似乱数を返します。
GetFR_ScriptVersion()FR-Scriptのバージョン番号を数値で返します。(ver.X.YY.ZZXYYZZ)
GetSystemMetrics(n)GetSystemMetrics APIを、与えられた引数で呼び出し、その結果を返します。
(例:67…セーフモード起動時は1、16…プライマリモニタの横幅(ピクセル単位)、17…プライマリモニタの高さ(ピクセル単位)
  19…マウスが接続されていたら1、75…ホイール付きマウスだったら1)

文字列・変換関数

関数名説明
strlen(s$)バイト数を返します。
strupr$(s$)アルファベットを大文字に変換した文字列を返します。
strlwr$(s$)アルファベットを小文字に変換した文字列を返します。
strstr(s$, t$)文字列s$の中から文字t$を探し、見つかった位置(バイト)を返します。見つからなかった場合は-1を返します。
strstri(s$, t$)strstr()の英大文字・小文字を区別しない版です。
left$(s$, n)先頭から n バイト抜き出します。
right$(s$, n)末尾から n バイト抜き出します。
mid$(s$, n, m),substr$(s$, n, m)
substring$(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$を省略した場合はスペースとなります。

システム・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$])
Warning(msg$[, title$])
Information(msg$[, title$])
エラー(×),警告(!),情報(i)アイコン付きのメッセージボックスを表示します。
MessageBeep(n)システムの一般的な警告音に定義されたサウンド等を鳴らします。
(n:0…一般警告音, 0x10…エラー音, 0x20…問合せ音, 0x30…警告音, 0x40…情報音)
いずれも、鳴らせない場合は一般警告音またはビープ音が鳴ります。

マウス・キーボードイベント関数

関数名説明
GetCursorPosX()現在のマウスカーソルの座標(x, y)のうちxを返します。
GetCursorPosY()現在のマウスカーソルの座標(x, y)のうちyを返します。
SetCursorPos(x, y)マウスカーソルの位置を座標(x, y)に設定します。
MoveMouse(dx, dy)マウスカーソルを右に dx、下に dy 移動させます(ミッキー単位)。左・上に移動したい場合は、負の値を指定します。
MouseWheel(n)マウスホイールを n だけ回転させたことにします。
MouseButtonLeft(p)
MouseButtonRight(p)
MouseButtonMiddle(p)
それぞれマウスの左ボタン・右ボタン・中央ボタンが、p = 1 押し、p = 0 離し したことにします。
MouseButtonX1(p)
MouseButtonX2(p)
マウスのX1・X2が、p = 1 押し、p = 0 離し したことにします。
X1・X2ボタンは、ブラウザの「戻る」「進む」が割り当てられることが多いボタンです。
KeybdEvent(keycode, p)keycodeに指定したキーコードのキーについて、p = 1 押し、p = 0 離し します。キーコードには、VK_***の指定が利用できます。
SendInputUnicode(c$, p)c$で指定した文字(Unicode 1文字)について、p = 1 押し、p = 0 離し します。

[...] … 省略可能な引数であることを示します。
組み込み関数名の英大文字・小文字は区別されません。



5. サンプルコード

// ユーザーへの挨拶と環境変数の表示
user$ = getenv$("USERNAME")
IF (Question(user$ + "さん、環境を表示しますか?", "確認")) {
    path$ = getenv$("PATH")
    Information("PATHの内容: " + left$(path$, 50) + "...", "システム情報")
}


6. その他


デバッグのヒント:
 構文エラーがある場合や、ゼロ除算・関数名が見つからないなどの場合は、エラーが発生した行番号が表示されます。

FR-Scriptについて:
 このスクリプトは、いじくるつくーる(Rnsf ver.7)に搭載されていたR-Scriptの軽量版となります。for, goto, 配列, 条件演算子などの一部機能や、大部分の関数(ファイル・レジストリ操作系・ダイアログ構築系・DLL呼び出し・正規表現等)は省かれています。ただし、コールバックによるスクリプト呼び出し元アプリケーションによる機能提供が可能です。

FR-Scriptの構築、このマニュアルの作成について:
 R-Scriptのインタプリタの作成、および、このマニュアルの作成は、生成AIによるプログラミング手法の確立を目的に、テキストで書かれた文法書を、生成AIのGeminiに渡して作成したコード(lex, yacc, C++)をベースに、作者の手により手直し、あるいは、生成AIとの相談による修正を経て、作成されました。極めて素早い期間での構築となりました。

 目次へ
※このページは、ソフトウェアに付属のヘルプファイルをWeb用に再構築したものです。大部分に自動変換を施しているため、一部は正しく変換しきれずに表示の乱れている箇所があるかもしれませんが、ご容赦下さい。また、本ドキュメントはアーカイブドキュメントであり、内容は、右上の作成日付の時点のものとなっております。一部、内容が古くなっている箇所があるかと思いますが、あらかじめご了承下さい。
※このページへは、自由にリンクしていただいてかまいません。

■このページに関するご意見をお待ちしております → フィードバックページ

/トップ/キーボードシミュレータ ダウンロード/WebHelp/ヘルプトップ