機能: | 模擬的にキー入力または文字列入力を行います。 | ||
構文: | rc = ArxPutKey( key , shift ) | ||
rc = ArxPutString( string ) | |||
key | ··· | 押し下げ対象キー | |
shift | ··· | 押し下げ状態にする制御キー(省略可) | |
string | ··· | 入力対象文字列 |
「押し下げ対象キー」は、英数字等の1字か、以下の文字列のどれか1つを指定します。
「押し下げ対象キー」に、上記以外の2字以上の長さの文字列を指定した場合、エラーになります。複数の入力を連続して行いたい場合は、ArxPutKey を複数回呼び出すか、または ArxPutString を使います。
BREAK CTRL PAGEDOWN DOWN F1 F7 BACKSPACE ALT END PRINTSCRN F2 F8 TAB PAUSE HOME INSERT F3 F9 BACKTAB ESC LEFT DELETE F4 F10 NEWLINE SPACE UP ENTER F5 F11 SHIFT PAGEUP RIGHT SYSRQ F6 F12
「制御キー」は、「ALT」「CTRL」「SHIFT」の文字列の組み合わせで指定します。その文字列の中に 「A」「C」「S」の字が含まれているかどうかで、押し下げ対象にするかどうかを決めるので、先頭の1字以外は省略可能です。
これらの関数を使用するにあたっての注意点を、以下に列挙します。
PC-DOS(VDM) のウィンドウ、及び WIN-OS2 のウィンドウに対しては、効果がありません。
(これは後述の ArxReplaceKey も同様)
指定されたキー操作が、アプリケーション特有のキーボードアクセラレータとして定義されている場合は、
正しくキー入力状態をエミュレートできません。
(例えば、「OS/2 システム・エディター」の「F3→クローズ」など)
(後述の ArxReplaceKey であれば可能)
関数の引数に指定された制御キーと、実際に押し下げられている制御キーの状態が一致しない場合に、期待したように動作しない事があります。
(ArxSetACSKeyState を参照して下さい)
1回のスクリプト実行で模擬入力可能な字数に、ある程度制限があります。
(筆者の環境では200字強。キー入力及びマウス入力はスクリプト終了後に一括処理する、というマクロの仕様に起因する)
この関数で生成される WM_CHAR メッセージ・パラメータは、106型(または109型)キーボードを前提とした値になります。
他の種類のキーボードを接続している環境で実行させた場合の動作は保証できません。
REXX スクリプトが、「キー操作拡張:REXXマクロ」の機能から呼び出されている場合、
模擬入力指定に、「REXXマクロ」の機能を呼び出すのと同じキー割り当てを指定してこの関数を使用すると、
マクロ実行 → 模擬キー入力 → マクロ実行...の無限ループに陥る事になるので、
そういうプログラミングは行わないように、注意して下さい。
なお、この現象を発生させてしまった場合は、「Ctrl+ESC」の操作で「このプログラムは,システムの要求に応答していません。」のウィンドウを出して、ALWALTFX を強制終了させて下さい。
これらの関数は、キーまたはマウスによる操作が可能なフォーカス・ウィンドウが存在する場合のみ使用可能です。
「キー操作拡張:REXXマクロ」の機能、または「マウス操作拡張:REXXマクロ」の機能から呼び出されている場合は、
ほぼ問題無く使用できますが、「ウィンドウ制御:REXXマクロ」の機能からの場合、トリガであるメッセージの種類如何では、
関数呼び出しが失敗する可能性があります(戻り値=0)。
例: | ||
CALL ArxPutKey 'A' | /* 「A」の1字を模擬入力 */ | |
CALL ArxPutKey 'C','Ctrl' | /* 「Ctrl+C」の操作を模擬入力 */ | |
CALL ArxPutString DATE() TIME() | /* 日付/時刻の文字列を入力 */ |
機能: | REXX スクリプトを呼び出した、現行のキー入力を置換します。 | ||
構文: | rc = ArxReplaceKey( key , shift ) | ||
key | ··· | 押し下げ対象キー、または置換の取り消し指示 | |
shift | ··· | 押し下げ状態のする制御キー(省略可) |
各々の引数の指定方法は、ArxPutKey と同じです。
ArxPutKey 及び ArxReplaceKey の違いは、
ArxPutKey の場合、マクロ終了後に新しくキー入力状態を作り出すのに対し、
ArxReplaceKey では、マクロを呼び出した現行キー入力そのものを、新しいキー入力に置換し、
アプリケーションに渡します。
また、ArxReplaceKey で指定された新しいキー入力は、「REXXマクロ」の機能を呼び出すのと同じキー割り当てを指定しても、
「REXXマクロ」の機能の(再度の)呼び出し対象にはなりません。また、そのアプリケーション特有のキーボードアクセラレータとして定義されている操作に該当する場合でも、それも含めてキー入力をエミュレートします。
(例えば、「OS/2 システム・エディター」の「F3→クローズ」など)
そのため、ArxPutKey よりも高いキーレスポンス、及び実際のキー入力との互換性を期待できます。
ただし、この関数で行われる処理は、あくまでも現行のキー入力の置換ですので、ArxReplaceKey を複数回呼び出しても、
結果が有効なのは最後の1回のみです。
「押し下げ対象キー」に「DEFAULT」を指定すると、REXXマクロを呼び出したキー入力を、そのままアプリケーションに渡すようにします。
(通常、REXXマクロを呼び出したキー入力は、アプリケーションには届きません)
これは、「特定のシチュエーションでのみマクロ実行/それ以外の場合はそのままのキー入力」という処理を実装する場合に便利です。
同じく、「CANCEL」を指定すると、それまでに ArxReplaceKey で指定したキー入力置換を取り消します。
なお、同一スクリプト内で ArxPutKey(ArxPutString) 及び ArxReplaceKey を使用した場合は、
記述順序に関係無く、スクリプト終了後に ArxReplaceKey → ArxPutKey(ArxPutString) の順番で入力処理が行われます。
この関数は、「キー操作拡張:REXXマクロ」の機能から呼び出されている場合のみ、使用可能です。
(それ以外の場合、何も処理を行わず 0 を返す)
例: | ||
CALL ArxReplaceKey 'DEFAULT' | /* 現行キー入力を有効にする */ | |
CALL ArxReplaceKey 'CANCEL' | /* 現行キー入力を無効に戻す */ | |
CALL ArxReplaceKey 'TAB','Shift' | /* 現行キー入力を「Shift+TAB」に置換する */ |
機能: | 入力フィールドに対して特殊操作を行います。 | ||
構文: | rc = ArxEditFunc( func , ... ) | ||
func | ··· | 入力フィールドに対して行う操作(複数指定可) |
操作に指定できる文字列は、以下の通りです。
UP ··· 上へ1つカーソル移動 DOWN ··· 下へ1つカーソル移動 LEFT ··· 左へ1つカーソル移動 RIGHT ··· 右へ1つカーソル移動 LINETOP ··· 行頭へカーソル移動 LINEBTM ··· 行末へカーソル移動 WINDOWTOP ··· 表示先頭行へカーソル移動 WINDOWBTM ··· 表示最終行へカーソル移動 NEXTWORD ··· 次の単語へカーソル移動 PREVWORD ··· 前の単語へカーソル移動 PAGEUP ··· ページアップ PAGEDOWN ··· ページダウン SELECTWORD ··· 単語選択 SELECTLINE ··· 行選択 SELECTALL ··· 全選択 CLRSELECT ··· 選択解除 TOUPPER ··· 選択範囲を大文字化 TOLOWER ··· 選択範囲を小文字化 CUT ··· 切り取り COPY ··· コピー PASTE ··· 貼り付け INSERTMODE ··· 挿入モード OVERWRITEMODE ··· 上書きモード
カーソル移動など、制御キーの押し下げ状態如何で動作が変化する機能は、デフォルトでは押し下げ無しとして処理が行われます。
(スクリプト実行時に実際に押し下げられていたとしても、仮想的に、そう処理される)
制御キーを押し下げた状態での動作を所望する場合は、ArxSetACSKeyState を使って、仮想的に押し下げ状態に設定します。
因みに、入力フィールドが現在、挿入モードか上書きモードのどちらであるかは、システム値を参照すれば確認できます。
(具体的には、ArxQuerySysValue('INSERTMODE') の戻り値が真か偽かで判断する)
この関数は、入力フィールド(単一行または複数行)にフォーカスが当たっている場合、且つ ALWALTFX の「入力フィールド キー操作拡張」の機能、または「入力フィールド マウス操作拡張」の機能がオンになっている場合のみ、使用可能です。
(それ以外の場合、何も処理を行わず 0 を返す)
単一行入力フィールドに対して無効な操作の指定があった場合も、何も処理を行わず 0 を返します。
(具体的には、「UP」「DOWN」「WINDOWTOP」「WINDOWBTM」「PAGEUP」「PAGEDOWN」の操作)
READONLY の属性を持つ入力フィールドに対して「CUT」「PASTE」の指定があった場合も、何も処理を行わず 0 を返します。
例: | ||
CALL ArxEditFunc 'LINESELECT','COPY' | /* 行選択&コピーを連続実行 */ |
機能: | 入力フィールドの選択範囲内のテキストを、取得または置換します。 | ||
構文: | rc = ArxQueryEditSelText( name ) | ||
rc = ArxReplaceEditSelText( string , cursor ) | |||
name | ··· | 文字列が入る変数の名前 | |
string | ··· | 範囲選択部に代わりに挿入する文字列 | |
cursor | ··· | 挿入後のカーソル位置(省略可) |
「挿入後のカーソル位置」には、以下の文字列の何れかを指定します。
TOP ··· 挿入した文字列の先頭にカーソルを移動 BOTTOM ··· 挿入した文字列の末尾にカーソルを移動(省略時値)
範囲選択がされていない場合、ArxQueryEditSelText は、長さ 0 の文字列を返し、ArxReplaceEditSelText は、カーソル位置に文字列を挿入します。
また、入力フィールドのカーソルが上書きモードの場合、(反転表示になっている)カーソル位置の文字が取得/置換対象になります。
この関数は、入力フィールド(単一行または複数行)にフォーカスが当たっている場合のみ使用可能です。
(それ以外の場合、何も処理を行わず 0 を返す)
例: | ||
OPTIONS EXMODE | ||
CALL ArxQueryEditSelText 'text' | ||
CALL ArxReplaceEditSelText TRANSLATE(text) | ||
/* 選択範囲内のアルファベット文字を全て大文字に置換する */ |
機能: | 入力フィールドのカーソル位置を取得します。 | ||
構文: | rc = ArxQueryEditCursorPos( stem , rad ) | ||
stem | ··· | 情報が入る変数(ステム)の名前 | |
rad | ··· | 戻り値の形式(省略可) |
「戻り値の形式」には、戻り値に16進数を希望する場合に「HEX」を指定します。
その文字列の中に 「H」の字が含まれているかどうかで、
「戻り値の形式」を何れにするかを決めるので、先頭の1字以外は省略可能です。
(省略時は10進数)
関数が正常に終了すると、変数 stem に、以下の値が設定されます。
stem.ANCHOR ··· 選択開始位置 stem.CURSOR ··· 選択終了位置 stem.FIRST ··· 表示先頭位置
入力フィールドにおいて範囲選択が行われていない場合、選択開始位置と選択終了位置は、同じ値になります。
また、入力フィールドのカーソルが上書きモード/挿入モードの何れの場合でも、戻す値は同一です(挿入モードの時の値を帰す)。
この関数は、入力フィールド(単一行または複数行)にフォーカスが当たっている場合のみ使用可能です。
(それ以外の場合、何も処理を行わず 0 を返す)
例: | ||
CALL ArxQueryEditCursorPos 'sel' | ||
IF sel.ANCHOR\=sel.CURSOR THEN DO | ||
/* 以下、範囲選択されている場合のみ処理を続行 */ |
機能: | 入力フィールドのカーソル位置を設定します。 | ||
構文: | rc = ArxSetEditCursorPos( anchor , cursor , first ) | ||
anchor | ··· | 選択開始位置(省略可) | |
cursor | ··· | 選択終了位置(省略可) | |
first | ··· | 表示先頭位置(省略可) |
この関数は、任意の位置にカーソルをセットするためのものではなく、
前述のArxQueryEditCursorPos 関数で取得しておいたカーソル情報を復元するために用意されています。
各引数に任意の値を指定する事について、特に制限はありません(省略された値は、現行の値を保持する)が、その場合の結果は保証されません。
この関数は、入力フィールド(単一行または複数行)にフォーカスが当たっている場合のみ使用可能です。
(それ以外の場合、何も処理を行わず 0 を返す)
例: | ||
CALL ArxQueryEditCursorPos 'sel' | ||
CALL ArxEditFunc 'SELECTWORD','COPY' | ||
CALL ArxSetEditCursorPos sel.ANCHOR,sel.CURSOR,sel.FIRST | ||
/* 単語選択&コピー後、カーソル位置を元に戻す */ |
機能: | キー操作の記録または再生を行います。 | ||
構文: | rc = ArxKeyRecord( func ) | ||
func | ··· | 記録または再生の操作 |
「記録または再生の操作」に指定できる文字列は、以下の通りです。
START ··· 記録開始 STARTEX ··· 拡張記録開始 END ··· 記録終了 REPLAY ··· 再生 REPLAYDL ··· 遅延再生 BREAK ··· 記録強制中断 BUSY? ··· 記録中かどうかの確認
記録中かどうかの確認は、真の時に 1、偽の時に 0 を返します。
「キー入力記録/キー入力再生」の機能については、ALWALTFX.DOC の「PM(Alt+Fn)キー操作拡張」を参照して下さい。
この関数は、キーまたはマウスによる操作が可能なフォーカス・ウィンドウが存在する場合のみ使用可能です。
「キー操作拡張:REXXマクロ」の機能、または「マウス操作拡張:REXXマクロ」の機能から呼び出されている場合は、
ほぼ問題無く使用できますが、「ウィンドウ制御:REXXマクロ」の機能からの場合、
トリガであるメッセージの種類如何では、関数呼び出しが失敗する可能性があります(戻り値=0)。
例: | ||
IF \ArxKeyRecord('BUSY?') THEN CALL ArxKeyRecord 'START' | ||
ELSE CALL ArxKeyRecord 'END' | ||
/* キー操作の記録の開始と終了を切り替える */ |
機能: | 制御キー(Alt,Ctrl,Shift)の押し下げ状態を取得します。 | ||
構文: | rc = ArxQueryACSKeyState( flg ) | ||
flg | ··· | 取得フラグ(省略可) |
押し下げ状態は、「ALT」「CTRL」「SHIFT」の文字列の組み合わせで返されます。
(複数の制御キーが押されている場合は、空白キャラで区切られる)
(1つも押されていない場合は、長さ 0 の文字列を返す)
REXXマクロが呼び出された直後から、REXXマクロによって作り出される模擬入力の処理中は、仮想的に制御キー押し下げ無しの状態に設定されます。
(後述の ArxSetACSKeyState 関数を用いて、押し下げ状態を変更する事もできる)
ArxQueryACSKeyState を「取得フラグ」無しで呼び出した場合、戻されるのは REXX マクロ実行中の仮想的な制御キー押し下げ状態です。
REXXマクロが呼び出される直前の、現実の制御キーの押し下げ状態を取得したい場合は、「取得フラグ」に「ORIGINAL」を指定します。
その文字列の中に 「O」の字が含まれているかどうかで、どちらの状態を返すかを決めるので、先頭の1字以外は省略可能です。
(他のセッションからの呼び出しである場合は、「取得フラグ」は設定できません)
例: | ||
IF POS('SHIFT',ArxQueryACSKeyState('Org')) THEN DO | ||
/* 以下、「Shift」のキーが押し下げられている場合の処理 */ |
機能: | 模擬的に制御キー(Alt,Ctrl,Shift)の押し下げ状態を設定します。 | ||
構文: | rc = ArxSetACSKeyState( shift ) | ||
shift | ··· | 押し下げ状態にする制御キー(省略可) |
「制御キー」は、「ALT」「CTRL」「SHIFT」の文字列の組み合わせで指定します。
その文字列の中に 「A」「C」「S」の字が含まれているかどうかで、
押し下げ対象にするかどうかを決めるので、先頭の1字以外は省略可能です。
REXXマクロが呼び出された直後から、REXXマクロによって作り出される模擬入力の処理中は、
仮想的に制御キー押し下げ無しの状態に設定されます。
例えば、ArxPutMouseButton によって「制御キー+クリック」の操作を実現したい場合や、
ArxPutKey によって「制御キー+任意キー」の操作を指示したが、
アプリケーション上でうまく動作しない場合などに、本関数を使用してみて下さい。
REXXマクロの仕様により、キー及びマウス入力はスクリプト終了後に一括処理されます。
そのため、ArxSetACSKeyState で設定された制御キーの押し下げ状態は、スクリプトの何処に記述されていようとも、
マクロ実行時に作り出されるキー入力及びマウス入力の全てに影響を及ぼす可能性があります。
また、ArxSetACSKeyStateを複数回呼び出しても、結果が有効なのは最後の1回のみです。
この関数は、キーまたはマウスによる操作が可能なフォーカス・ウィンドウが存在する場合のみ使用可能です。
「キー操作拡張:REXXマクロ」の機能、または「マウス操作拡張:REXXマクロ」の機能から呼び出されている場合は、
ほぼ問題無く使用できますが、「ウィンドウ制御:REXXマクロ」の機能からの場合、トリガであるメッセージの種類如何では、
関数呼び出しが失敗する可能性があります(戻り値=0)。
例: | ||
CALL ArxSetACSKeyState 'Alt' | /* 「Alt」のキーを押し下げ状態にする */ |