エミュレータ起動後のキー入力エミュレーション
エミュレータの設定を書き換えて起動
エミュレータ起動後にマウス・キーボード入力を発行します。
これによりコマンドライン非対応なエミュレータで DiskB を Bドライブにセットするなど泥臭いことを可能にします。
但しエミュレータの終了検知方法で「シグナル状態で検知 Type2」及び「ウィンドウのタイトルで検知」を選択した場合は、エミュレータの起動に関わらず発行します。この場合、必要であれば <IF_APP> や WAIT 等で発行のタイミングを調節して下さい。
!! これは危険な設定になり得ます !!
キー入力のエミュレーションは、タイミングのズレやコマンドミスで、思わぬ動作を引き起こす可能性があります。
特にファイラー等のアプリケーションが起動している状態では、意図しないキー操作が実行され、大切なファイルを失う可能性もあります。
十分注意して自己責任で実行してください。
キー入力はコマンドで表記します。
コマンド | 動作 |
---|---|
WAITxxx | xxxミリ秒待ちます |
WLxxx | 以降キー動作毎にデフォルト50 + xxxミリ秒待ちます |
0〜9A〜Z | 各キーを押して離す(1文字1コマンドです) |
*+,-./[\]^: | 各キーを押して離す(1文字1コマンドです) |
F1〜F24 | 各ファンクションキーを押して離す |
Tab | Tabキーを押して離す |
Home | Homeキーを押して離す |
End | Endキーを押して離す |
Apps | アプリケーションキーを押して離す |
Alt | Altキーを押して離す |
UP | 上矢印キーを押して離す |
DOWN | 下矢印キーを押して離す |
LEFT | 左矢印キーを押して離す |
RIGHT | 右矢印キーを押して離す |
Enter | Enterキーを押して離す |
Space | Spaceキーを押して離す |
ESC | ESCキーを押して離す |
MOUSE[_LCR],x[%],y[%][,[=:]座標基準] | マウスカーソルの移動、及びクリック MOUSE で移動のみ行います。 MOUSE_L/MOUSE_C/MOUSE_R で、それぞれ移動後に左/中/右クリックします。 x,y は座標基準左上からの座標をピクセルで指定します。もしくは末尾に%を付けてパーセント指定も可能です。 座標基準はウィンドウ名またはモニタ番号(1〜)を指定ます。先頭に=を付加すると名前と一致するウィンドウを、:を付加するとその名前を含む最初に見つかったウィンドウを、それぞれ基準にします。(=は省略できます) 座標基準の指定先が存在しなければ移動やクリックは実行されません。 座標基準を省略するとモニタ1(プライマリモニタ)が基準となります。 →設定例 |
AltDown | Altキーを押す |
AltUp | Altキーを離す |
ShiftDown | Shiftキーを押す |
ShiftUp | Shiftキーを離す |
CtrlDown | Ctrlキーを押す |
CtrlUp | Ctrlキーを離す |
$で始まる文字列 | 対応する置換定数の置換結果をペースト |
<INILOAD:"file","section","key"> | 外部iniファイルの指定したセクションとキーの指す値をコマンドとしてインクルード →設定例 |
<MULTIPLE_DISKS> | 以降は複数枚組イメージの場合のみコマンドを実行 →設定例 |
</MULTIPLE_DISKS> | <MULTIPLE_DISKS>の効果を終了 |
<GOTO:ラベル名> または<→ラベル名> |
<:ラベル名>位置へジャンプ |
<:ラベル名> | <GOTO:ラベル名>からのジャンプ先 |
<IF_APP:ウィンドウ名> <IF_APP=ウィンドウ名> |
起動ウィンドウ名を検索して分岐 起動中のウィンドウをウィンドウ名で検索し、存在すれば以降のコマンドを実行、存在しなければ次の</IF_APP>までジャンプします。</IF_APP>が見つからない場合はここで終了します。 ※= は一致、 : は含むウィンドウ名を検索します。 ※ウィンドウ名に含まれるスペースは有効です。 ※入れ子には出来ません。 →設定例 |
</IF_APP> | <IF_APP〜>からのジャンプ先 |
<IF_SCREENCHG:n[%][,m]> | 画面の変化を調査して分岐 画面が n パーセント以上変化したら以降のコマンドを実行、変化しなければ次の</IF_SCREENCHG>までジャンプします。</IF_SCREENCHG>が見つからない場合はここで終了します。 調査するモニタ番号(1〜)を m に指定できます。省略するとモニタ1(プライマリモニタ)が対象となります。 ※%記号は省略できます。 ※入れ子には出来ません。 ※比較元となる画面状態は本コマンドが最初に実行されたタイミング、または<MEM_SCREEN>による任意のタイミングで記憶されます。 →設定例 |
</IF_SCREENCHG> | <IF_SCREENCHG:〜>からのジャンプ先 |
<MEM_SCREEN[:m]> | <IF_SCREENCHG:〜>の比較元画面を記憶する 比較元画面を任意のタイミングで記憶する場合に使用します。 記憶するモニタ番号(1〜)を m に指定できます。省略するとモニタ1(プライマリモニタ)が対象となります。 |
<SET_FOREGROUND:ウィンドウ名> <SET_FOREGROUND=ウィンドウ名> |
ウィンドウをフォアグラウンドに設定 ウィンドウ名を持つウィンドウを検索してアクティブにします。 ※= は一致、 : は含むウィンドウ名を検索します。 ※ウィンドウ名に含まれるスペースは有効です。 |
※ 上記以外の認識できない文字は無視します。
※ 終端は ; か 改行で終わらせてください。
※ 簡易的なデバッグ実行はINIファイルオプションを参照して下さい。
これをチェックすると、ROM(DISK)イメージが1つの場合、キー入力は発動しません。
主に複数枚のイメージを起動時に渡せない PC 用エミュレータを想定しています。
例えば、M88 では起動オプションでドライブ1のファイル名を渡せますので、1枚組のゲームでは起動オプションに $image と書いておけば事足ります。
n枚組のゲームの時だけ、ドライブ2に2つ目のイメージファイルを渡したい場合に、このスイッチをチェックしておくことでキー入力が発動します。
例)エミュレータ起動後に ALT、右、下、下、エンター、 2つ目のイメージファイルフルパスをペースト、エンター ↓ alt;right;down;down;enter $image2;enter
待機 と キー発行
エミュレータ起動後に2秒待ってから、ALT+エンター を発行します。
wait2000;altdown;enter;altup;
ウィンドウ名"hoe hoe"のウィンドウの左上へカーソルを移動します。
MOUSE,0,0,hoe hoe
ウィンドウ名に"hoe hoe"を含むウィンドウの左上から右へ100pixel, 下へ300pixel の位置を左クリックします。
MOUSE_L,100,300,:hoe hoe
プライマリモニタの画面中心を中クリックします。
MOUSE_C,50%,50%
セカンダリモニタの右上へマウスカーソルを移動します。
MOUSE,100%,0,2
2枚組以上を判定します。
「2つ以上のイメージがあったときに発動する」チェックボックスと同様の効果が得られます。
<multiple_disks> alt;right;down;down;enter $image2;enter
ディスク枚数に関わらず実行できるスクリプトを書けます。
wait2000 <multiple_disks> alt;right;down;down;enter $image2;enter </multiple_disks> altdown;enter;altup
外部iniファイルの指定した値をインクルードします。
<INILOAD: "iniファイルパス", "セクション名", "キー名">
# C:\hoge.ini の内容が以下の場合 # [asagi] # w=wait3000 <iniload:"C:\hoge.ini","asagi","w">;ENTER; ↓ wait3000;ENTER; # 値が読み込めなかった場合はヌルを返します。 <iniload:"C:\hoge.ini","moegi","w">;ENTER; ↓ ENTER;
iniファイルパス、セクション名、キー名には置換定数を使用できます。
# D:\mycmd\xevious.ini の内容が以下の場合 # [screen] # full=altdown;enter;altup # 更に起動した $image が E:\X1\xevious.d88 の場合 wait3000 <iniload:"D:\mycmd\$body_noext.ini","screen","full"> ↓ wait3000 altdown;enter;altup
<GOTO:> と <IF_〜>
<GOTO>と<IF_〜>を組み合わせて待機ループが作れます。
※ 永久ループ防止の為、ループ中90秒毎に継続確認のダイアログが表示されます。
<:LOOP> WAIT5000 <IF_APP:メモ帳><GOTO:JUMP></IF_APP> <GOTO:LOOP> <:JUMP>
<:LOOP2> WAIT5000 <IF_SCREENCHG:25%><GOTO:JUMP2></IF_SCREENCHG> <GOTO:LOOP2> <:JUMP2>
エミュレータ側の設定を変更してからエミュレータを起動します。
変更できるのは、INI形式のファイル、またはレジストリです。
!! これは危険な設定になり得ます !!
書き換えるファイルやレジストリは、それが重要なものであっても書き換えが行われます。
十分注意して自己責任で実行してください。
書き換えはコマンドで表記します。
コマンド | 動作 |
---|---|
INC:<FileName> | 外部ファイルをコマンド位置へインクルードします。 |
ini-OpenFile = <FilePath> | INIファイルを開く <FilePath> は書き換え対象ファイルのフルパスを指定します。 対象はINIファイル形式のみです。 例) ini-OpenFile = E:\aEmulator\Setting.ini |
ini-SetSection = <SectionName> | セクションを指定する <SectionName>は対象ファイル内のセクション名を指定します。 INIファイル内の [〜] で囲まれた部分がセクション名です。 例) ini-SetSection = Window |
ini-SetKey = <KeyName> | キーを指定する <KeyName> は対象セクション内のキー名を指定します。 INIファイル内の "hoo = bar" の "hoo" がキー名です。 例) ini-SetKey = FullScreen |
ini-ReWrite = <Value> | 指定値でINIファイルを書き換える <Value> の値で書き換えを行います。 文字列、数値は区別なく書き込まれます。 例) ini-ReWrite = true |
reg-OpenKey = <RegistryKey> | レジストリを開く <RegistryKey> は書き換え対象のレジストリキーを指定します。 例) reg-OpenKey = HKEY_CURRENT_USER\Software\aEmulator\Sound |
reg-SetValueName = <ValueName> | 値名を指定する <ValueName> は対象キー内の値名を指定します。 例) reg-SetValueName = MIDI-OUT |
reg-ReWrite = <Data> | 指定値でレジストリを書き換える <Data> の値で書き換えを行います。 REG_BINARY型、REG_MULTI_SZ型以外は、元の値と同じ型として書き込まれます。数値型の値に文字列を指定しても0が書き込まれます。 例 ) reg-ReWrite = UM-1 REG_BINARY型は、16進数で指定します。 例1) reg-ReWrite = 43 00 61 00 74 00 例2) reg-ReWrite = 430061007400 REG_MULTI_SZ型は、先頭1バイトにデリミタ(区切り文字)の指定、2バイト目以降からデータ群を指定します。 例1) reg-ReWrite = ,it's a,Wonderful,World 例2) reg-ReWrite = @Well,@but I am God too |
例)inc: D:\hoge\include.txt
インクルードファイルを <CatShanty2フォルダ>\emuconf\<機種名フォルダ>\ に置いた場合、パスの指定を省略できます。更に拡張子が .inc の場合、拡張子も省略できます。
例)inc:D:\catshanty2\emuconf\X1シリーズ\Set TAPE.inc ↓省略可 inc:Set TAPE
インクルードファイル内から、更にインクルードすることもできます。
但し、永久ループを引き起こす原因にもなります。
インクルード処理が100回を超えた場合メッセージを表示し、それ以降のインクルードは無視されます。
記述したコマンドを簡易チェックします。
これをチェックすると、設定の書き換え前にバックアップし、エミュレータ終了後にリストアします。
INIファイルはオリジナルと同じフォルダに
.catshanty_bak という拡張子でバックアップされます。
レジストリ はオリジナルと同じサブキーに
オリジナル値名_catshanty_bup_40643814bup という値名でバックアップされます。
それぞれのバックアップはリストア後に削除されます。
エミュレータ起動中(つまりCatShanty2復帰前)に、CatShanty2が落ちた、OSが落ちた、停電したなど、 正しくCatShanty2が復帰しなかった場合はバックアップが残ったままになっています。 上記の拡張子や値名から検索して手動でリストアして下さい。