INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2026-03-09 00:00

■マウスふるふる・マウスのお供(各ベータ版)のFR-Scriptのバージョンをver.1.5にしたので更新点の詳細

2026年 3月 9日(月) 0:00:00



RSSRSS配信中
https://www.inasoft.org/



先日、FR-Scriptの進化計画を書いたわけですが、そこらへん、Geminiに手伝ってもらいながら諸々を更新して、「マウスふるふる ver.1.27.01β」「マウスのお供 ver.1.68.01β」を公開しました。

高負荷がかかったり、アプリを巻き込んで異常終了するようなスクリプトを指定してしまった場合、スクリプトを修正したり取り消したりすることもできなくなってしまうため、常にプログラム開始後10秒間はスクリプトの実行を保留するようにします。

ただ、10秒間で修正は難しいので、スクリプトの実行を止めたい場合は、10秒の間に、通知領域アイコンの右クリックメニューから、「一時的に機能オフにする」(マウスふるふるの場合)、「表示を隠す」(マウスのお供の場合)を選び、ゆっくり時間を確保して修正を行うという使い方を想定しています。

また、マウスのお供で、時計の表示形式にf~fffを指定しているときに、スクリプトを使うと、スクリプトが凄まじい頻度で実行を繰り返すことになるため、スクリプトの実行は1秒に1回以下に留めるように調整しています。

あとは、FR-Script ver.1.5ということで、大幅更新を行っています。具体的には、

  • 文字列変数/関数に$を付けなければならない仕様を撤廃。($を付けても良いが、単に文字の一部として解釈され、意味を持たない仕様に修正)
  • 変数名の大文字・小文字を区別するようにした。(スクリプト言語のキーワード・組込関数名・初期代入変数は大文字・小文字を区別しない。ユーザー定義関数は大文字・小文字を区別する)
  • TRUE/FALSEを初期代入変数に格下げ。
  • x**y, x**=y で、xy(xy乗)を計算できるようにした。
  • for(,,)により無限ループができるように修正(C/C++言語のfor(;;)の真似)
  • Repeat-Untilの追加(R-Scriptより)
  • 配列変数の追加(a[5]=1 のように代入を書くと、a[0]~a[5]の6個の変数が使えるようになる)
  • ユーザー定義関数(func)の追加。
  • 初期代入変数を、通常変数の後に検索するように修正。組込関数のサーチをバイナリサーチで行うように修正。これにより、実質的に実行速度向上できるようにした。
  • 組込関数の追加。

組込関数については、配列変数関連、実行動作設定関連、NumLockLock関連、コピペテキスト修飾除去関連で、ガッツリ追加をしています。また、文字列を返す関数について、関数名の後ろに$を付けなくてもよいようにしています(作者自身が付け忘れることによるエラーを多発させてイライラしているため。下位互換性確保のために$を付けても良いが、$は単純に無視される。過去仕様を引きずるよりも実をとりました)

具体的に、追加した関数は下記の通り。追加解説は、赤文字で【解説】として加えています。

DEFINE(item, n)インタプリタの動作設定です。文字列itemで示される項目について設定します。
DEFINE("MustVarDef", 1) … 未代入の変数が参照されたらエラーにします。
DEFINE("KeepVar", 1) … スクリプト終了時に変数をクリアしません。
strcmp(s, t)文字列sと文字列tを比較し、同じならば0、辞書順でsの方が小さければ負の数、辞書順でsの方が大きければ正の数を返します。
strcmpi(s, t)【解説】単に実装し忘れていたことに気づいたというものになります。R-Scriptの頃は、===で大文字・小文字を区別しない比較をしていましたが、FR-Scriptでは、型を含めた厳密な比較という意味になってしまっていたため。
strcmp()の英大文字・小文字を区別しない版です。
ConvChar(s, f) 【解説】拙作「コピペテキスト修飾除去」をスクリプトで実装するとしたら…という妄想の末に搭載を決定した機能になります。
文字列sの中の文字について、fで示される特定の変換を行います。fはビットごとのフラグであり、次の意味を持ちます:
0x00000010 … ひらがな→カタカナ … ひらがなを対応する全角カタカナに変換します。
0x00000020 … カタカナ→ひらがな … 上記の逆操作です。
0x00000040 … カタカナ:全角→半角 … 全角カタカナを、対応する半角カタカナに変換します。ただし、小さい「ヮ」については対応する半角文字が存在しないため、大きい「ワ」に対応する半角文字に変換します。
0x00000080 … カタカナ:半角→全角 … 上記の逆操作です。
0x00000100 … 英字:全角→半角 … 全角アルファベットを対応する半角アルファベットにします。
0x00000200 … 英字:半角→全角 … 上記の逆操作です。
0x00000400 … 数字:全角→半角 … 全角数字(0~9のみ。丸で囲ったりしたものや漢数字・ローマ数字などは対象外)を対応する半角数字にします。
0x00000800 … 数字:半角→全角 … 上記の逆操作です。
0x00001000 … 記号:全角→半角 … 下記の全角記号を、対応する半角記号に変換します。→ ! ” # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ ¥ ] ^ _ ` { | } ~ 「 」 。 、
0x00002000 … 記号:半角→全角 … 上記の逆操作です。
0x00004000 … 英字(全角):大文字→小文字 … 全角アルファベットの大文字を、対応する全角小文字に変換します。
0x00008000 … 英字(全角):小文字→大文字 … 上記の逆操作です。
0x00010000 … 英字(半角):大文字→小文字 … 半角アルファベットの大文字を、対応する半角小文字に変換します。
0x00020000 … 英字(半角):小文字→大文字 … 上記の逆操作です。
0x00040000 … コントロールコード可視化(エスケープ文字) … コピーされた文字列の中にコントロールコード(NULL文字除く)があったら、C言語方式の記法に置き換えます(\, ", 'はそのまま)
0x00080000 … コントロールコード化(エスケープ文字利用) … 上記の逆操作です。つまり、文字列にコントロールコードを埋め込みます。
0x00100000 … コントロールコード可視化(キャレット記法) … コピーされた文字列の中にコントロールコード(NULL文字除く)があったら、^A ~ ^Z の記法に置き換えます(^ 自体はそのまま)
0x00200000 … コントロールコード化(キャレット記法) … 上記の逆操作です。つまり、文字列にコントロールコードを埋め込みます。
0x00400000 … TAB→4スペースに変換 … TABを4桁単位のスペースに置換します。
0x00800000 … TAB→8スペースに変換 … TABを8桁単位のスペースに置換します。
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で示される変数名の配列(文字列を想定)の中に空文字列があれば、その要素を除去し、配列を減らします。
GetActiveWindowTitle()【解説】NumLockLock相当の機能をスクリプトで実装するとしたら…という妄想の末に追加した関数です。
現在アクティブなウィンドウのタイトルを取得し、その内容を返します。権限不足などで取得に失敗した場合は空文字列を返します。
取得した文字列が空文字の場合もあるため、必ずしも空文字が失敗を意味するとは限りません。
GetKeyState(c)cで指定した仮想キーコードのキーの状態を返します。負の値の時にはキーが押されていることを意味します。
VK_NUMLOCK(NumLockキー)などのトグルキーの場合は、ONの状態で最下位ビットが1になります。
GetIMEState()現在アクティブなウィンドウでIMEがONならば1、そうでないなら0を返します。状態取得の過程でエラーが発生した場合は -1 が返ります。
アクティブなウィンドウに対する権限が不足する場合など、必ずしも正しい情報が得られるとは限りません。
SetIMEState(p)現在アクティブなウィンドウでIMEの状態の変更を試みます。p = 1:ON、p = 0:OFF です。
アクティブなウィンドウに対する権限が不足する場合など、必ずしも設定が成功するとは限りません。戻り値が正確な成否を表すとも限りません。
GetKeyInputDeviceList(a)現在接続されているすべてのキーボードデバイス名を取得し、文字列aで示される変数名の配列(文字列配列)に格納します。

それからもう一つ。C/C++言語のfor(;;)の真似をして、for(,,)により無限ループができるように修正しています。

C/C++言語では、if, while, do-whileの条件式を省略することはできませんが、for()の3式は省略することができます。このうち、2番目の条件式を省略すると「真とみなす」というルールがあり(あまり自然な発想ではないと思っていますが)、常にループ(return/break/gotoで外に出ない限りは)という状態になります。これを真似たものです。

どうも、forの1番目の初期化式、3番目のインクリメントを書く式の部分を省略すると何もしないというのは、直感的に理解できるのですが、2番目の式を省略すると「真とみなす」というのは、どうも直感的な感じがしないんですよね。ただ、慣例としてそうなっているので、FR-Scriptでも取り入れます。

ちなみに、なんか直感的な感じがしないので、あらためて、C言語の解説でどう書いてあるのかを見てみることにしました。

■The C for Statement

The for statement lets you repeat a statement or compound statement a specified number of times. The body of a for statement is executed zero or more times until an optional condition becomes false. You can use optional expressions within the for statement to initialize and change values during the for statement's execution.

iteration-statement:
for ( init-expression opt; cond-expression opt; loop-expression opt)statement

指定回数の繰り返しをしたい場合に使う事(逆にwhileは回数不明の場合に使うことが基本になる)、statementの中で繰り返し条件に使っている変数は変更可能なことが書かれています。

で、2番目のcond-expressionoptと書いてあるので、省略可能という扱いです。で、これの解説は、

If cond-expression is omitted, cond-expression is considered true, and execution proceeds exactly as described in the previous paragraph. A for statement without a cond-expression argument terminates only when a break or return statement within the statement body is executed, or when a goto (to a labeled statement outside the for statement body) is executed.

というわけで、自然な帰結と言うよりは、特殊な流れとしてあえて実装されているという感じが読み取れるかなぁといったところでしょうかね。

一部解説を省略しましたが、the previous paragraphには、cond-expressionが真(true, nonzero)のときに、statementが実行されるという、当然のことが書かれています。



目次 | ←前へ / 2026-03-09 00:00


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはX等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3490457 (+0781)[+0907]

Copyright© 2010-2026 INASOFT