REXXMAC.HTM ... このファイル SPLITTAG.CMD ... 〃 をプレーンテキストに変換するREXXスクリプト AAFXSUSP.CMD ... REXXマクロサンプル ALEXTSRT.CMD ... 〃 CENTERMP.CMD ... 〃 CLICK.CMD ... 〃 CLOSE.CMD ... 〃 ENTERKEY.CMD ... 〃 MENUSPY.CMD ... 〃 PRESSMAX.CMD ... 〃 PTRMOVE.CMD ... 〃 QRYSHUTD.CMD ... 〃 SYSMENU.CMD ... 〃 TASKSW.CMD ... 〃 TOFOCUS.CMD ... 〃 WPSETUP.CMD ... 〃
サンプルファイルの使い方は、各ファイル先頭のコメントを参照して下さい。
なお、このドキュメントは、REXX言語を一通り把握されている(標準関数及びユーティリティ関数を用いて、独自の CMD ファイルが書ける)方を対象に記述されています。
REXX言語そのものについての詳しい解説は、オンラインドキュメントの「REXX情報」を参照して下さい。
以下のような関数が用意されています。
ArxAlarm ... 警告音 ArxBeep ... Beep音
ArxPutKey ... キー入力 ArxPutString ... 文字列入力 ArxReplaceKey ... キー入力置換 ArxEditFunc ... 入力フィールド特殊操作 ArxQueryEditSelText ... 入力フィールド選択範囲内テキスト取得 ArxReplaceEditSelText ... 入力フィールド選択範囲内テキスト置換 ArxQueryEditCursorPos ... 入力フィールドカーソル位置取得 ArxSetEditCursorPos ... 入力フィールドカーソル位置設定 ArxKeyRecord ... キー操作記録/再生 ArxQueryACSKeyState ... Alt,Ctrl,Shift押し下げ状態取得 ArxSetACSKeyState ... Alt,Ctrl,Shift押し下げ状態設定
ArxQueryPointerPos ... マウスカーソル位置取得 ArxSetPointerPos ... マウスカーソル位置設定 ArxQueryMouseButton ... マウスボタン状態取得 ArxPutMouseButton ... マウスボタン操作 ArxReplaceMouseButton ... マウスボタン操作置換
ArxQueryScreenSize ... スクリーンサイズ取得 ArxQueryWindowInfo ... ウィンドウ位置/サイズ等の情報取得 ArxSetWindowPos ... ウィンドウ位置/サイズ設定 ArxQueryWindowString ... ウィンドウ文字列取得 ArxSetWindowString ... ウィンドウ文字列設定 ArxInvalidateRect ... ウィンドウ再描画 ArxQueryWindowHandle ... ウィンドウ・ハンドル値取得 ArxEnumWindowHandle ... 子ウィンドウ・ハンドル値取得 ArxIsWindow ... ウィンドウの存在確認
ArxSysCommand ... システムメニューコマンド実行 ArxReplaceCommand ... コマンド置換 ArxSendMessage ... メッセージ送信 ArxPostMessage ... メッセージ通知 ArxQueryMsgParam ... メッセージパラメータ参照 ArxAllocTempMem ... 作業用メモリ割り当て ArxQueryTempMemImage ... 作業用メモリ参照
ArxQuerySysInfo ... システム情報取得 ArxQuerySysValue ... システム値取得 ArxSetSysValue ... システム値設定
ArxMPFROM2SHORT ... メッセージパラメタ値作成 ArxMPFROMSH2CH ... 〃 ArxCHAR1FROMMP ... メッセージパラメタ値分解 ArxCHAR2FROMMP ... 〃 ArxCHAR3FROMMP ... 〃 ArxCHAR4FROMMP ... 〃 ArxSHORT1FROMMP ... 〃 ArxSHORT2FROMMP ... 〃 ArxSHORT1FROMMR ... メッセージリザルト値分解 ArxSHORT2FROMMR ... 〃 ArxD2X ... 10進値→16進値変換 ArxX2D ... 16進値→10進値変換 ArxC2X ... 文字列→16進値変換 ArxX2C ... 16進値→文字列変換 ArxNOT ... 論理演算(NOT) ArxAND ... 〃 (AND) ArxOR ... 〃 (OR) ArxXOR ... 〃 (XOR) ArxNAND ... 〃 (NAND) ArxNOR ... 〃 (NOR)
ArxQueryAlwaltfxStatus ... ALWALTFX の実行状態確認 ArxLoadFuncs ... 関数一括ロード ArxDropFuncs ... 関数一括アンロード ArxVersion ... バージョン取得
例:'HFFFF' ... 16進数の FFFF = 10進数の 65535 と同じ扱いになる
機能:PM標準の警告音を鳴らします
構文:rc = ArxAlarm( type )
type ... 警告音タイプ
警告音タイプに指定できる文字列は、以下の通りです。
WARNING ... 「警告」音 NOTE ... 「情報」音 ERROR ... 「エラー」音
例:
CALL ArxAlarm 'ERROR' /* 「エラー」音を鳴らす */
機能:内蔵スピーカーを用いたBeep音を鳴らします
構文:rc = ArxBeep( freq , dur )
freq ... 周波数(ヘルツ単位) dur ... 鳴動時間(ミリ秒単位、省略可)
鳴動時間の省略時値は 100 です。
例:
CALL ArxBeep 880,40 /* 「警告」音 */ CALL ArxBeep 1760,100 /* 「情報」音 */ CALL ArxBeep 440,120 /* 「エラー」音 */
機能:模擬的にキー入力/文字列入力を行います
構文:rc = ArxPutKey( key , shift )
rc = ArxPutString( string )
key ... 押し下げ対象キー shift ... 押し下げ状態とする制御キー(省略可) string ... 入力対象文字列
押し下げ対象キーは、英数字等の1字か、以下の文字列のどれか1つを指定します。
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
押し下げ対象キーに、上記以外の2字以上の長さの文字列を指定した場合、エラーになります。複数の入力を連続して行いたい場合は、ArxPutKey を複数回呼び出すか、ArxPutString を用います。
制御キーは、「ALT」「CTRL」「SHIFT」の文字列の組み合わせで指定します。その文字列の中に 'A' 'C' 'S' の字が含まれているかどうかで、押し下げ対象とするかどうかを決めるので、先頭の1字以外は省略可能です。
これらの関数を使用するにあたっての注意点を、以下に列挙します。
CALL ArxPutKey 'あ' /* 「あ」の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 ... 上書きモード
カーソル移動系など、Shiftキーの押し下げ状態如何で動作が変化する機能は、デフォルトでは(スクリプト実行時に実際に押し下げられていたとしても、仮想的に)押し下げ無しとして処理が行われます。
Shiftキー押し下げ状態での動作を所望される場合は、ArxSetACSKeyState を用いて、仮想的に押し下げ状態に設定します(後述)。
因みに、入力フィールドが現在、挿入モードか上書きモードのどちらであるかは、後述のシステム値参照関数により確認することができます。
(具体的には、ArxQuerySysValue('INSERTMODE') の戻り値が真か偽かで判断)
この関数は、入力フィールド(単一行または複数行)にフォーカスが当たっている場合、且つ ALWALTFX の「入力フィールドキー操作拡張」機能、または「入力フィールドマウス操作拡張」機能が有効になっている場合のみ、使用可能です。
(それ以外の場合、何も処理を行わず 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 ... 戻り値形式(省略可)
戻り値形式には、戻り値(省略時は10進数)に16進数を希望する場合に「HEX」を指定します。その文字列の中に 'H' の字が含まれているかどうかで、戻り値形式を何れにするかを決めるので、先頭の1字以外は省略可能です。
関数が正常に終了すると、変数 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+Function)キー操作拡張」を参照して下さい。
この関数は、(キーまたはマウスによる操作が可能な)フォーカス・ウィンドウが存在する場合のみ使用可能です。
「キー操作拡張: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キーを押し下げ状態とする */
機能:現行のマウスポインタの位置を取得します
構文:rc = ArxQueryPointerPos()
この関数は、スクリーン左下を原点としたX/Y座標の値が、1スペース区切りで繋がった文字列を戻します。
例:
PARSE VALUE ArxQueryPointerPos() WITH px py /* 変数 px にX座標の、py にY座標の値が入る */
機能:マウスポインタの位置を設定します
構文:rc = ArxSetPointerPos( px , py )
px ... 左下を原点としたX座標 py ... 左下を原点としたY座標
例:
CALL ArxSetPointerPos 640,480 /* (640,480)にポインタを移動 */
機能:現行のマウスボタンの状態を取得します
構文:rc = ArxQueryMouseButton()
この関数は、マウスのボタン数及びそのON/OFF状態を表す数値(0=OFF,1=ON)が、1スペース区切りで繋がった文字列を戻します。
例:
rc = ArxQueryMouseButton() /* 3ボタンマウスで、ボタン3のみが押し下げられている 場合、戻り値は「3 0 0 1」となる */
機能:模擬的にマウスボタン操作を行います
構文:rc = ArxPutMouseButton( button , action )
button ... 操作対象ボタン(1-3の数値) action ... 操作内容(省略可、複数指定可)
操作内容に指定できる文字列は、以下の通りです。
DOWN ... 押し下げ UP ... 押し下げ状態解除 CLICK ... シングルクリック DBLCLK ... ダブルクリック CLICKPROCESS ... シングルクリック工程 DBLCLKPROCESS ... ダブルクリック工程
マウスボタン操作は、現行のマウスポインタ位置(の下にあるウィンドウ)に対して行われます。
厳密に「シングルクリック」や「ダブルクリック」操作をシミュレートする場合は、
シングルクリック ... DOWN → UP → CLICK ダブルクリック ... DOWN → UP → CLICK → DBLCLK → UP
と、操作内容を複数指定する必要があります。
「CLICKPROCESS」「DBLCLKPROCESS」を指定すると、それぞれ上記「シングルクリック」「ダブルクリック」の一連の操作を自動的に行います。
なお、操作内容を指定せずに ArxPutMouseButton を呼び出した場合、「CLICKPROCESS」(シングルクリック)処理を行います。
ArxQueryMouseButton を他のセッションから呼び出す場合、あらかじめ ALWALTFX を実行させておく必要があります。
(設定状態は問いません...「全機能休止」状態でも構わない)
この関数を使用するにあたっての注意点を、以下に列挙します。
例:
CALL ArxPutMouseButton 1 /* ボタン1のシングルクリックを行う */ CALL ArxPutMouseButton 2,'DBLCLKPROCESS' /* ボタン2のダブルクリックを行う */
機能:REXXスクリプトを呼び出した、現行のマウスボタン操作を置換します
構文:rc = ArxReplaceMouseButton( button , action )
button ... 操作対象ボタン(1-3の数値)、または置換の無効指示 action ... 操作内容
各引数の指定方法は、ArxPutMouseButton とほぼ同じです。
(ただし、操作対象ボタンを指定した場合、操作内容を必ず1つ指定する必要があります)
(あと、操作内容に「CLICKPROCESS」及び「DBLCLKPROCESS」は指定できません)
ArxPutMouseButton と ArxReplaceMouseButton の違いですが、ArxPutMouseButton の場合、(マクロ終了後に)新しくマウスボタン操作状態を作り出すのに対し、ArxReplaceMouseButton では、(マクロを呼び出した)現行マウスボタン操作そのものを、新しいマウスボタン操作に置換し、アプリケーションに渡します。
また、ArxReplaceMouseButton で指定された新しいマウスボタン操作は、REXXマクロ機能を呼び出すのと同じマウスボタン割り当てを指定しても、REXXマクロ機能の(再)呼び出し対象にはなりません。
この関数で行われる処理は、あくまでも現行マウスボタン操作の置換ですので、ArxReplaceMouseButton を複数回呼び出しても、結果が有効であるのは最後の1回のみです。
置換コマンドに「DROP」を指定すると、REXXマクロを呼び出したマウスボタン操作を破棄...つまり、そのマウスボタン操作が行われなかったように処理を行います。
同じく、「CANCEL」を指定すると、それまでに ArxReplaceMouseButton で指定したマウスボタン操作置換を取り消します。
なお、同一スクリプト内で ArxPutMouseButton と ArxReplaceMouseButton の両方を使用した場合は、記述順序に関係無く、スクリプト終了後にArxReplaceMouseButton → ArxPutMouseButton の順序でマウスボタン操作処理が行われます。
この関数は、「マウス操作拡張:REXXマクロ」機能から呼び出されている場合のみ、使用可能です。
(それ以外の場合、何も処理を行わず 0 を返す)
蘊蓄:
マウスボタン操作は、例えば「クリック」と一口に言っても、ボタン「ダウン」→「アップ」→「クリック」、という過程を経て生成されます。
そのため、何らかのマウス操作を直接「クリック」に置換しても、実際にクリック操作を行った時と同じ結果が得られるとは限りません。
(と言うか、かなりの確立で誤動作します
また、その置換された元のメッセージの種類如何では、その直後の(実際の)マウスボタン操作に、何らかの影響が出る可能性があります。例えば、「クリック」という操作は本来、「ダウン」と「アップ」の操作がペアになって初めて発生する操作ですので、そのどちらかが、ArxReplaceMouseButton によって別の操作に置換されてしまうと、「クリック」操作が発生しなくなったり、変なタイミングで発生したりもしますので、注意して使用するようにして下さい。
例:
CALL ArxReplaceMouseButton 'DROP' /* 現行マウスボタン操作を無効にする */ CALL ArxReplaceMouseButton 'CANCEL' /* 現行マウスボタン操作を有効に戻す */ CALL ArxReplaceMouseButton 1,'DOWN' /* 現行マウスボタン操作を「ボタン1ダウン」に置換する */
機能:画面解像度を取得します
構文:rc = ArxQueryScreenSize()
この関数は、X方向/Y方向の値が、1スペース区切りで繋がった文字列を戻し
ます。
例:
PARSE VALUE ArxQueryScreenSize() WITH cx cy /* 変数 cx にX方向の、 cy にY方向の値が入る */
機能:ウィンドウの情報を取得します。
構文:rc = ArxQueryWindowInfo( type , stem )
type ... 取得対象ウィンドウ stem ... 情報が入る変数(ステム)名
取得対象ウィンドウには、大きく分けて2種類の指定方法があります。
1つの方法は、(REXXスクリプトが呼び出された際にアクティブになっている)メイン・ウィンドウを基準とした間接的な指定です。
'ID:' の接頭文字列に続いて、以下の文字列の何れかか、アクティブ・ウィンドウ(メイン・ウィンドウ)直下の子ウィンドウのID値を追記します。
SYSMENU ... システムメニュー・ウィンドウ TITLEBAR ... タイトルバー・ウィンドウ MINMAX ... 最大/最小化ボタン・ウィンドウ MENU ... メニュー・ウィンドウ VERTSCROLL ... 縦スクロールバー・ウィンドウ HORZSCROLL ... 横スクロールバー・ウィンドウ CLIENT ... クライアント・ウィンドウ 注:ArxQueryWindowInfo を他のセッションから呼び出す場合、 この 'ID:' による指定は行えません。
もう1つの方法は、ウィンドウ・ハンドル値の直接指定です。
'HWND:' の接頭文字列に続いて、以下の文字列の何れかか、ウィンドウ・ハンドル値を追記します。
HERE ... REXXスクリプトを呼び出したウィンドウ MAIN ... メイン・ウィンドウ CURRENTFRAME ... フレーム・ウィンドウ PARENT ... フレーム・ウィンドウ(もしくはメイン・ウィンドウ)の親ウィンドウ FOCUS ... フォーカス・ウィンドウ ACTIVE ... アクティブ・ウィンドウ DESKTOP ... デスクトップ・ウィンドウ 注:ArxQueryWindowInfo を他のセッションから呼び出す場合、 'FOCUS' 'ACTIVE' 'DESKTOP' のみ指定可能です。 注:'DESKTOP' 以外の文字列は、接頭文字列が 'HWND:' ではなく 'ID:' で も、正常に動作します(旧バージョンとの互換性維持のため)。
接頭文字列 'ID:' 'HWND:' は省略可能です。
省略された場合、指定された数値(または文字列)から、ウィンドウID値か、ウィンドウ・ハンドル値のどちらとして取り扱うか、自動判別を行います。
(数値指定の場合、1 以上且つ 65536 未満でウィンドウID値、65536 以上でウィンドウ・ハンドル値だと見なす)
※例外として、ウィンドウID値 0 を引数として指定する場合に限り、接頭文 字列 'ID:' を必ず明記する必要があります。なお、上記の仕様に矛盾する引数指定(例えば、接頭文字列 'ID:' を指定しながら、ウィンドウ・ハンドル値に相当する値(65536以上)を指定した場合など)を行った場合、関数は何も処理を行わず、0 を返します。
メイン・ウィンドウとフレーム・ウィンドウの違いですが、前者は、ウィンドウ階層上で、デスクトップ・ウィンドウ直下にあたるウィンドウの事を指し、後者は、フォーカス・ウィンドウからウィンドウ階層を遡り、最初にたどり着いたフレーム・ウィンドウの事を指します。
後者の場合、多重のフレーム・ウィンドウから構成されるアプリケーション(例えば、オンラインヘルプの VIEW.EXE や、各種設定ノートブック)において、フォーカスが当たっている最も内側のフレームを、処理対象に指定する事が可能です。
(因みに、唯一のフレーム・ウィンドウから構成される(シンプルな)アプリケーションの場合、双方が戻す値は同一になります)
なお、フレーム・ウィンドウ指定時に、そのウィンドウ階層上でフレーム属性を持つウィンドウが存在しない(例えば WarpCenter)場合は、ArxQueryWindowInfo呼び出しは失敗に終わります(戻り値=0)。
REXXスクリプトが「ウィンドウ制御:REXXマクロ」機能から呼び出されている場合、取得対象ウィンドウに、フォーカス・ウィンドウ(FOCUS)を指定できない可能性があります(戻り値=0)。
例えば、「WM_ACTIVATE(TRUE)」がトリガである場合、アクティブ・ウィンドウが切り替わったばかりで、そのウィンドウの何処にフォーカスが当たるのか、まだ決定していない(つまり、フォーカスウィンドウが存在しない)、などが考えられます。
関数が正常に終了すると、変数 stem に以下の値が設定されます。
stem.HWND ... ウィンドウ・ハンドル(32bit16進) stem.X ... X座標(親ウィンドウからの相対位置) stem.Y ... Y座標(同上) stem.GX ... X座標(画面上での絶対位置) stem.GY ... Y座標(同上) stem.CX ... X方向サイズ stem.CY ... Y方向サイズ stem.FL ... ウィンドウ・フラグ(32bit16進) stem.ID ... ウィンドウ・ID値(32bit16進) stem.STYLE ... ウィンドウ・スタイル(32bit16進) stem.TITLE ... タイトルバー文字列 stem.CLASS ... ウィンドウ・クラス名 stem.MODULE ... ウィンドウ作成者(実行ファイル名) stem.PID ... 〃 (プロセスID) stem.TID ... 〃 (スレッドID)
フラグ/スタイルは、PM アプリケーション開発に精通されている方のために用意してあります。
(FL は構造体 SWP のメンバ fl の値)
(STYLE は PM-API の WinQueryWindowULong(hwnd,QWL_STYLE) の戻り値)
タイトルバー文字列は、そのウィンドウにタイトルバーが存在する場合のみ設定されます。
(その他の場合は、長さ 0 の文字列になる)
また、他のセッションから呼び出す場合、タイトルバー文字列を取得するためには、あらかじめ ALWALTFX を実行させておく必要があります。
(設定状態は問いません...「全機能休止」状態でも構わない)
クラス名は、そのウィンドウの種類の分別するのに役立ちます。
例えば、PM 標準コントロール(部品)のクラス名は、以下の通りです。
#1 ... フレーム #2 ... コンボボックス #3 ... ボタン #4 ... メニュー #5 ... 静的制御 #6 ... 単一行入力フィールド #7 ... リストボックス #8 ... スクロールバー #9 ... タイトルバー #10 ... 複数行入力フィールド #32 ... スピンボタン #37 ... コンテナー #38 ... スライダー #39 ... バリューセット #40 ... ノートブック
ウィンドウ作成者(実行ファイル名)は、そのウィンドウが、REXXスクリプトを呼び出したウィンドウと同一プロセスの場合のみ、文字列が設定されます。
(別プロセス/別セッションの場合は、長さ 0 の文字列になる)
例:
CALL ArxQueryWindowInfo 'FOCUS','info' IF info.CLASS='#6' | info.CLASS='#10' THEN DO /* 以下、入力フィールドにフォーカスが当たっている場合のみ 処理を続行 */
機能:ウィンドウ位置/サイズの設定を行います。
構文:rc = ArxSetWindowPos( type , x , y , cx , cy , z )
type ... 設定対象ウィンドウ x ... X座標(省略可) y ... Y座標(省略可) cx ... X方向サイズ(省略可) cy ... Y方向サイズ(省略可) z ... Z順配列位置(省略可)
設定対象ウィンドウの指定法は、前述 ArxQueryWindowInfo と同じです。
Z順配列位置には、以下の文字列の何れかを指定します。
TOP ... 最前列にウィンドウを移動する BOTTOM ... 最後列にウィンドウを移動する
各引数を省略した場合は、現在の位置/サイズを保持します。
なお、PM-API の WinSetWindowPos と引数の順序が異なるので、PM プログラマの方は注意して下さい。
あと、PM における座標指定は、左下が原点となっていますので、(左上が原点である)MS-Windows プログラマ等の方は注意して下さい。
例:
CALL ArxSetWindowPos 'MAIN',0,0,640,480 /* VGA画面一杯の位置へウィンドウを移動する */ CALL ArxSetWindowPos 'MAIN',,,,,'BOTTOM' /* 最後列へウィンドウを移動する */
機能:ウィンドウの文字列の取得/設定を行います。
構文:rc = ArxQueryWindowString( type , name )
rc = ArxSetWindowString( type , string )
type ... 取得/設定対象ウィンドウ name ... 文字列が入る変数名 string ... 設定する文字列
取得/設定対象ウィンドウの指定法は、前述 ArxQueryWindowInfo と同じです。
これらの関数を他のセッションから呼び出す場合、あらかじめ ALWALTFX を実行させておく必要があります。
(設定状態は問いません...「全機能休止」状態でも構わない)
例:
CALL ArxQueryWindowString 'TITLEBAR','str' /* 変数 str にタイトルバー・ウィンドウの文字列を取得する */ CALL ArxSetWindowString 'FOCUS','' /* フォーカス・ウィンドウの文字列をクリアする */
機能:ウィンドウの再描画を行います。
構文:rc = ArxInvalidateRect( type )
type ... 再描画対象ウィンドウ(省略可)
再描画対象ウィンドウの指定法は、前述 ArxQueryWindowInfo と同じです。
省略された場合は、現行のアクティブ・ウィンドウのみを再描画します。
例:
CALL ArxInvalidateRect 'DESKTOP' /* デスクトップを再描画する */
機能:ウィンドウ・ハンドル値を取得します。
構文:rc = ArxQueryWindowHandle( qrywin )
rc = ArxQueryWindowHandle( 'POINT' , x , y )
qrywin ... 取得対象ウィンドウ(複数指定可) x ... X座標(省略可) y ... Y座標(省略可)
この関数は、引数に指定された条件に合致するウィンドウが存在すれば、そのハンドル値(32bit16進値)を戻します。
(該当するウィンドウが存在しない場合、'H00000000' を返す)
取得対象ウィンドウの指定法は、前述 ArxQueryWindowInfo と同じです。
取得対象ウィンドウを連ねて指定すると、最初に指定された引数に合致するウィンドウを基準にして、次々と引数に指定されたウィンドウを検索していきます。
また、連ねて指定する取得対象ウィンドウの指定には、前述 ArxQueryWindowInfo と同様の指定以外に、PM-API である WinQueryWindow() の引数のシンボルの接頭部(QW_)を除いた文字列も指定可能です。
1つめの引数に、文字列「POINT」が指定されると、スクリーン上の特定の座標(座標指定が省略された場合は、マウスカーソル位置)下のウィンドウ・ハンドル値を返します。
また、他のセッションからの呼び出しで「POINT」指定を用いる場合、あらかじめ ALWALTFX を実行させておく必要があります。
(設定状態は問いません...「全機能休止」状態でも構わない)
※そのウィンドウが、マウスボタン入力に対して「透過」の指定が成されて いる場合、そのウィンドウの下(後ろ)のウィンドウ・ハンドル値を返し ます。
例:
hwparent = ArxQueryWindowHandle('HWND:H80001234','PARENT') /* ハンドル 80001234 のウィンドウの親ウィンドウ */ hwgparent = ArxQueryWindowHandle('HERE','PARENT','PARENT') /* REXXスクリプト呼び出しウィンドウの、親ウィンドウ の親ウィンドウ */ hwpointer = ArxQueryWindowHandle('POINT') /* マウスカーソル位置の直下のウィンドウ */
機能:子ウィンドウ・ハンドル値を取得します。
構文:rc = ArxEnumWindowHandle( parent , stem )
parent ... 取得対象親ウィンドウ stem ... 情報が入る変数(ステム)名
取得対象親ウィンドウの指定法は、前述 ArxQueryWindowInfo と同じです。
関数が正常に終了すると、変数 stem.0 に子ウィンドウの数が、以降 stem.1、stem.2、stem.3 ...に、全ての子ウィンドウ・ハンドル値(32bit16進)が設定されます。
例:
CALL ArxEnumWindowHandle 'MAIN','enum' /* メイン・ウィンドウの子ウィンドウ・ハンドルを取得 */ CALL ArxEnumWindowHandle 'DESKTOP','enum' /* デスクトップ・ウィンドウの子ウィンドウ・ハンドルを取得 */
機能:指定されたウィンドウが存在するかどうかをチェックします。
構文:rc = ArxIsWindow( type )
type ... 調査対象ウィンドウ
調査対象ウィンドウの指定法は、前述 ArxQueryWindowInfo と同じです。
この関数は、指定されたウィンドウが存在すると 1 を、存在しないか、引数に不正な文字列(または数値)の指定を行うと 0 を返します。
(引数の個数(必ず1つ)の誤りは、他の関数と同様にエラーになります)
例:
IF ArxIsWindow('MENU') THEN DO /* 以下、メニュー・ウィンドウが存在する場合のみ処理続行 */ exist = ArxIsWindow(ArxQueryWindowHandle('MAIN','ID:123')) /* メイン・ウィンドウの、ID値が 123 の子ウィンドウの存在を チェック */
機能:システムメニューのコマンドを実行します。
構文:rc = ArxSysCommand( command )
command ... 実行コマンド
実行コマンドには、コマンドID値(1〜65535)か、以下の文字列のどれか1つを指定します。
CLOSE ... クローズ RESTORE ... 復元 MOVE ... 移動 SIZE ... サイズ変更 MINIMIZE ... 最大化 MAXIMIZE ... 最小化 HIDE ... 隠す OPENICON ... オープン.アイコン表示 OPENTREE ... オープン.ツリー表示 OPENDETAILS ... オープン.詳細表示 SETTINGS ... プロパティー OPENPARENT ... 親ウィンドウのオープン PASTE ... 貼り付け FIND ... 検索 VIEWICON ... 表示.アイコン表示 VIEWTREE ... 表示.ツリー表示 VIEWDETAILS ... 表示.詳細表示 VIEWRENEW ... 表示.最新表示 SORTOBJNAME ... 分類.名前 SORTEXT ... 分類.拡張子 SORTOBJTYPE ... 分類.タイプ SORTREALNAME ... 分類.実名 SORTSIZE ... 分類.サイズ SORTWRITEDATE ... 分類.最終書き込み日付 SORTACCESSDATE ... 分類.最終アクセス日付 SORTCREATEDATE ... 分類.作成日付 ROLLUP ... ロールアップ ROLLDOWN ... ロールダウン ROLLUP? ... ロールアップ状態確認 WPSWIN? ... WorkplaceShellのウィンドウか否か確認 FOLDER? ... フォルダか否か確認
各種状態確認コマンドは、REXXスクリプト実行時にアクティブなウィンドウを対象に、真の時に 1、偽の時に 0 を返します。
WorkplaceShellのウィンドウやフォルダに依存したコマンドは、アクティブウィンドウがそれらのウィンドウである場合のみ、使用可能です。
ロールアップ/ダウンの指定は、ALWALTFX の設定でロールアップ/ダウン機能の(キー操作/マウス操作/システムメニューのうち)どれか1つを有効にしている場合のみ、使用可能です。
REXXスクリプトが、「ウィンドウ制御:REXXマクロ」機能の「WM_COMMAND」または「WM_SYSCOMMAND」をトリガとして呼び出されている場合、コマンドIDに、REXXマクロ機能を呼び出すのと同じIDを指定してこの関数を使用すると、マクロ実行 → コマンド通知 → マクロ実行...の無限ループに陥る事になるので、そういうプログラミングは行わないように、注意して下さい。
なお、この現象を発生させてしまった場合は、「Ctrl+ESC」操作で「このプログラムは,システムの要求に応答していません。」ウィンドウを出して、ALWALTFXを強制終了させて下さい。
例:
IF ArxSysCommand('FOLDER?') THEN /* フォルダであれば、 */ CALL ArxSysCommand 'VIEWRENEW' /* 「最新表示」を行う */
機能:REXXスクリプトを呼び出した、コマンド・メッセージを置換します。
構文:rc = ArxReplaceCommand( command )
command ... 置換コマンド、または置換の無効指示
置換コマンドに指定できる文字列は、前述 ArxSysCommand とほぼ同じです。
(ただし、各種状態確認コマンドは、使用できません)
ArxSysCommand と ArxReplaceCommand の違いですが、ArxSysCommand の場合、(マクロ終了後に)新しくコマンド・メッセージを作り出すのに対し、ArxReplaceCommand では、(マクロを呼び出した)現行コマンド・メッセージそのものを、新しいコマンド・メッセージに置換し、アプリケーションに渡します。
また、ArxReplaceCommand で指定された新しいコマンド・メッセージは、REXXマクロ機能を呼び出すのと同じコマンド・メッセージを指定しても、REXXマクロ機能の(再)呼び出し対象にはなりません。
この関数で行われる処理は、あくまでも現行コマンド・メッセージの置換ですので、ArxReplaceCommand を複数回呼び出しても、結果が有効であるのは最後の1回のみです。
置換コマンドに「DROP」を指定すると、REXXマクロを呼び出したコマンド・メッセージを破棄...つまり、そのコマンド・メッセージ操作が行われなかったように処理を行います。
同じく、「CANCEL」を指定すると、それまでに ArxReplaceCommand で指定したコマンド・メッセージ置換を取り消します。
なお、同一スクリプト内で ArxSysCommand と ArxReplaceCommand の両方を使用した場合は、記述順序に関係無く、スクリプト終了後に ArxReplaceCommand→ ArxSysCommand の順序でコマンド・メッセージ処理が行われます。
この関数は、「ウィンドウ制御:REXXマクロ」機能の「WM_COMMAND」または「WM_SYSCOMMAND」をトリガとして呼び出されている場合のみ、使用可能です。
(それ以外の場合、何も処理を行わず 0 を返す)
例:
CALL ArxReplaceCommand 'DROP' /* 現行コマンド・メッセージを無効にする */ CALL ArxReplaceCommand 'CANCEL' /* 現行コマンド・メッセージを有効に戻す */ CALL ArxReplaceCommand 'MAXIMIZE' /* 現行コマンド・メッセージを「最大化」に置換する */
機能:ウィンドウに対して直接メッセージを送信/通知します。
構文:rc = ArxSendMessage( type , msg , mp1 , mp2 )
rc = ArxPostMessage( type , msg , mp1 , mp2 )
type ... 送信/通知対象ウィンドウ msg ... メッセージID mp1,mp2 ... メッセージパラメータ
取得対象ウィンドウの指定法は、前述 ArxQueryWindowInfo と同じです。
メッセージパラメータに、作業用メモリ(後述の ArxAllocTempMem で割り当て可能)のポインターを指定したい場合は、'TEMPMEM' を指定します。 (他のセッションからの呼び出しでない ArxSendMessage のみ指定可能)
関数が正常に終了すると、それぞれ PM-API の WinSendMsg()、WinPostMsg() の戻り値をそのまま返します。
(ArxSendMessage は32bit16進値、ArxPostMessage は 0 または 1)
ArxSendMessage を他のセッションから呼び出す場合、あらかじめ ALWALTFX を実行させておく必要があります。
(設定状態は問いません...「全機能休止」状態でも構わない)
これらの関数は、PM アプリケーション開発に精通されている方以外は、使用しないで下さい。
また、ArxSendMessage を使用される場合は、メッセージ送信中に(ダイアログが表示される等の)キー入力を要求する処理が行われないのが確実である場面でのみ使用されるよう、特にご注意下さい。
例:
WM_QUIT = 'H002A' CALL ArxPostMessage 'MAIN',WM_QUIT,0,0 /* アプリケーション終了要求(WM_QUIT)を通知する */
機能:REXXマクロが呼び出されるきっかけになった、ALWALTFXの機能及びPMメッセージパラメータを参照します。
構文:rc = ArxQueryMsgParam( stem )
stem ... 情報が入る変数(ステム)名
関数が正常に終了すると、変数 stem に以下の値が設定されます。
stem.TRIGTYPE ... 呼び出した機能 stem.HWND ... ウィンドウ・ハンドル(32bit16進) stem.MSG ... メッセージID(32bit16進) stem.MP1 ... メッセージパラメータ1(32bit16進) stem.MP2 ... メッセージパラメータ2(32bit16進)
呼び出した機能は、ALWALTFX の機能である「キー操作拡張」「マウス操作拡張」「ウィンドウ制御」の、どの「REXXマクロ」機能から呼び出されたかを判別するための文字列('KEY' 'MOU' 'WIN' の何れか)です。
例:
CALL ArxQueryMsgParam 'msg' SELECT WHEN msg.TRIGTYPE='KEY' THEN /* 以下、キー操作で呼ばれた場合の処理 */ WHEN msg.TRIGTYPE='MOU' THEN /* 以下、マウス操作で呼ばれた場合の処理 */
機能:作業用メモリを要求するメッセージのための作業用メモリの割り当て及び参照を行います。
構文:rc = ArxAllocTempMem( size , aimage )
rc = ArxQueryTempMemImage( qimage )
size ... 確保するメモリのサイズ(省略可) aimage ... 作業用メモリにコピーされるバイナリデータ(省略可) qimage ... 作業用メモリのバイナリデータが入る変数名
ArxAllocTempMem において、確保するメモリのサイズか、作業用メモリにコピーされるバイナリデータの何れかは省略可能です。
(両方省略はできない)
確保するメモリのサイズのみが指定された場合、確保されたメモリは初期化されません。また、作業用メモリにコピーされるバイナリデータのみが指定された場合、そのデータの長さ分のメモリが確保されます。
具体的な使い方は、ArxSendMessage を用いて、作業用メモリ(へのポインタ)を要求するメッセージを送付する際に、前もって ArxAllocTempMem でメモリを割り当て、後で ArxQueryTempMemImage でその結果を参照する、という流れになります。
確保できる作業用メモリは1つのみで、ArxAllocTempMem を呼び出す度に、前に確保した作業用メモリは破棄されます。
(因みに、REXXスクリプト終了時にも自動的に破棄される)
これらの関数は、PM アプリケーション開発に精通されている方以外は、使用しないで下さい。
また、呼び出された ArxSendMessage に対して、割り当てられたその作業用メモリ量で十分かどうかのチェックは行われません(不足すると、アクセス違反で ALWALTFX が落ちます)ので、特にご注意下さい。
例:
/* メイン・ウィンドウのボーダー(枠線)の太さを調べる */ WM_QUERYBORDERSIZE = 'H004D' CALL ArxAllocTempMem 8 /* 必要サイズのメモリを割り当て */ CALL ArxSendMessage 'MAIN',WM_QUERYBORDERSIZE,'TEMPMEM',0 CALL ArxQueryTempMemImage 'image' /* メモリ内容を参照 */ binx = SUBSTR(image,1,4) /* 幅のバイナリデータ */ biny = SUBSTR(image,5,4) /* 高さのバイナリデータ */
機能:システム情報/システム値の取得/設定を行います。
構文:rc = ArxQuerySysInfo( num , rad )
rc = ArxQuerySysValue( num , rad )
rc = ArxSetSysValue( num , val )
num ... システム変数ID、システム値ID rad ... 戻り値形式(省略可) val ... システム値に設定する数値
IDには、それぞれ DOS/PM-API の DosQuerySysInfo()、WinQuerySysValue()、WinSetSysValue()で指定する引数と同じ値(または、シンボルの接頭部(QSV_,SV_)を除いた文字列)を指定します。
戻り値形式には、戻り値(省略時は10進数)に16進数を希望する場合に「HEX」を指定します。その文字列の中に 'H' の字が含まれているかどうかで、戻り値形式を何れにするかを決めるので、先頭の1字以外は省略可能です。
関数が正常に終了すると、それぞれ DosQuerySysInfo()、WinQuerySysValue()、WinSetSysValue() 関数の戻り値をそのまま返します。
これらの関数は、PM アプリケーション開発に精通されている方以外は、使用しないで下さい。
例:
rc = ArxQuerySysInfo('MS_COUNT','Hex') /* システム起動後の経過時間を16進数で取得 */ rc = ArxQuerySysValue('INSERTMODE') /* 入力フィールドが挿入モードかどうか確認 */
機能:メッセージパラメタ値を作成します。
構文:rc = ArxMPFROM2SHORT( s1 , s2 , rad )
rc = ArxMPFROMSH2CH( s , c1 , c2 , rad )
s1,s2,s ... short(16bit)値 c1,c2 ... char(8bit)値 rad ... 戻り値形式(省略可)
OS/2ツールキット(開発環境)で定義されているマクロ、MPFROM2SHORT / MPFROMSH2CH と同じ機能を提供します。ArxSendMessage 等と併用して下さい。
戻り値形式には、戻り値(省略時は10進数)に16進数を希望する場合に「HEX」を指定します。その文字列の中に 'H' の字が含まれているかどうかで、戻り値形式を何れにするかを決めるので、先頭の1字以外は省略可能です。
なお、MPFROMLONG / MPFROMHWND 等に対応する関数は、用意されていません。
例:
msg = 'H007A' /* WM_CHAR */ mp1 = ArxMPFROMSH2CH('H0006',1,1) /* KC_VIRTUALKEY|KC_SCANCODE */ mp2 = ArxMPFROM2SHORT(0,'H0F') /* VK_ESC */ rc = ArxPostMessage('FOCUS',msg,mp1,mp2)
機能:メッセージパラメタ値もしくはリザルト値を分解します。
構文:rc = ArxCHAR1FROMMP( mp , rad )
rc = ArxCHAR2FROMMP( mp , rad )
rc = ArxCHAR3FROMMP( mp , rad )
rc = ArxCHAR4FROMMP( mp , rad )
rc = ArxSHORT1FROMMP( mp , rad )
rc = ArxSHORT2FROMMP( mp , rad )
rc = ArxSHORT1FROMMR( mr , rad )
rc = ArxSHORT2FROMMR( mr , rad )
mp ... メッセージパラメタ値 mr ... メッセージリザルト値 rad ... 戻り値形式(省略可)
OS/2ツールキット(開発環境)で定義されているマクロ、SHORT1FROMMP / CHAR1FROMMP 等と同じ機能を提供します。ArxQueryMsgParam 等と併用して下さい。
(ArxSHORT1FROMMR / ArxSHORT2FROMMR は、それぞれ ArxSHORT1FROMMP / ArxSHORT2FROMMP と全く同じ動作をします...精神衛生上使い分けたい、という方のために用意してあります(笑))
戻り値形式には、戻り値(省略時は10進数)に16進数を希望する場合に「HEX」を指定します。その文字列の中に 'H' の字が含まれているかどうかで、戻り値形式を何れにするかを決めるので、先頭の1字以外は省略可能です。
なお、LONGFROMMP / HWNDFROMMP 等に対応する関数は、用意されていません。
例:
call ArxQueryMsgParam 'msg' if msg.MSG='H0000007A' then do /* WM_CHAR */ fs = ArxSHORT1FROMMP(msg.MP1) crepeat = ArxCHAR3FROMMP(msg.MP1) scancode = ArxCHAR4FROMMP(msg.MP1) chr = ArxSHORT1FROMMP(msg.MP2) vkey = ArxSHORT2FROMMP(msg.MP2)
機能:10進値→16進値変換を行います。
構文:rc = ArxD2X( dec , n )
dec ... 変換対象10進値 n ... 変換対象桁数(1以上、省略可)
この関数は、10進値を、先頭に 'H' の字が付加された16進表記に変換します。
(REXX の関数 D2X() に相当...詳細は「REXX情報」を参照)
変換対象桁数が省略されると、8桁(32bit)の値を返します。
変換対象桁数が指定されると、変換後の値が、下の桁から数えて変換対象桁数に切り詰められ、また必要に応じて、符号拡張も行われます。
例:
say ArxD2X(9) /* H00000009 ← 出力される文字列 */ say ArxD2X(129) /* H00000081 */ say ArxD2X(129,1) /* H1 */ say ArxD2X(129,2) /* H81 */ say ArxD2X(129,4) /* H0081 */ say ArxD2X(257,2) /* H01 */ say ArxD2X(-127,2) /* H81 */ say ArxD2X(-127,4) /* HFF81 */ say ArxD2X(12,0) /* ← エラー */
機能:16進値→10進値変換を行います。
構文:rc = ArxX2D( hex , n )
hex ... 変換対象16進値 n ... 変換対象桁数(1以上、省略可)
この関数は、先頭に 'H' の字が付加された16進表記の文字列を、10進値に変換します。
(REXX の関数 X2D() に相当...詳細は「REXX情報」を参照)
変換対象桁数が指定されると、変換前の値を、下の桁から数えて変換対象桁数に切り詰め、また必要に応じて、符号拡張を行ってから、変換します。
変換対象桁数が省略されると、符号無し16進値として変換します。
何れの場合でも、変換後の値が符号有り32bit値の限界(0x7FFFFFFF)を越えた場合は、負の値を返します。
例:
say ArxX2D('H0E') /* 14 ← 出力される文字列 */ say ArxX2D('H81') /* 129 */ say ArxX2D('HF81') /* 3969 */ say ArxX2D('HFF81') /* 65409 */ say ArxX2D('H81',2) /* -127 */ say ArxX2D('H81',4) /* 129 */ say ArxX2D('HF081',4) /* -3967 */ say ArxX2D('HF081',3) /* 129 */ say ArxX2D('HF081',2) /* -127 */ say ArxX2D('HF081',1) /* 1 */ say ArxX2D('HF081',0) /* ← エラー */
機能:文字列→16進値変換を行います。
構文:rc = ArxC2X( chr )
chr ... 変換対象文字列
この関数は、文字列を、先頭に 'H' の字が付加された16進表記に変換します。
(REXX の関数 C2X() に相当...詳細は「REXX情報」を参照)
なお、変換文字列に指定可能な最大長は、128字です。
例:
say ArxC2X('0123'x) /* H0123 ← 出力される文字列 */ say ArxC2X('ZD8') /* H5A4438 */ say ArxC2X('あ') /* H82A0 */
機能:16進値→文字列変換を行います。
構文:rc = ArxX2C( hex )
hex ... 変換対象16進値
この関数は、先頭に 'H' の字が付加された16進表記の文字列を、文字列に変換します。
(REXX の関数 X2C() に相当...詳細は「REXX情報」を参照)
なお、変換文字列に指定可能な最大長は、512字です。
例:
say ArxX2C('H48656C6C6F') /* Hello ← 出力される文字列 */ say ArxX2C('H373273') /* 72s */ say ArxX2C('H9') /* ← TABを出力 */
機能:32bit論理演算を行います。
構文:rc = ArxNOT( val1 , rad )
rc = ArxAND( val1 , val2 ... , rad )
rc = ArxOR( val1 , val2 ... , rad )
rc = ArxXOR( val1 , val2 ... , rad )
rc = ArxNAND( val1 , val2 ... , rad )
rc = ArxNOR( val1 , val2 ... , rad )
val1,val2 ... 演算対象値 rad ... 戻り値形式(省略可)
これらの関数は、与えられた数値を符号無し32bit値に展開して論理演算を行い、その結果を(符号有り32bit値で)返します。
ArxNOT は、演算対象値を1つだけ指定し、それ以外の関数は、演算対象値を2つ以上指定します。
戻り値形式には、戻り値(省略時は10進数)に16進数を希望する場合に「HEX」を指定します。その文字列の中に 'H' の字が含まれているかどうかで、戻り値形式を何れにするかを決めるので、先頭の1字以外は省略可能です。
例:
say ArxNOT(1) /* -2 ← 出力される文字列 */ say ArxAND(65535,1) /* 1 */ say ArxOR(7,8,'H') /* 'H0000000F' */ say ArxXOR('H1234','H8888','HFFFF0000','H') /* 'HFFFF9ABC' */
機能:ALWALTFX及びREXXスクリプトの実行状態の確認を行います。
構文:rc = ArxQueryAlwaltfxStatus( status )
status ... 確認対象
確認対象には、以下の文字列のどれか1つを指定します。
EXEC? ... ALWALTFXが実行中か否か確認 OTHER? ... 他セッションからの呼び出し(後述)か否か確認 HWND ... ALWALTFXのメイン・ウィンドウ・ハンドル
ALWALTFXのメイン・ウィンドウ・ハンドルは、32bit16進値で返され、それ以外は、真の時に 1、偽の時に 0 を返します。
例えば、他セッションからの呼び出し(後述)が可能な関数の中には、ALWALTFX が実行中でないと正しく動作しない関数があります。
(具体的には、ArxPutMouseButton、ArxQueryWindowInfo、ArxQueryWindowString、ArxSetWindowString、ArxQueryWindowHandle、ArxSendMessage)
それらの関数を用いる場合、この関数を用いて、前もって ALWALTFX が実行中であるか否か等の確認を行う事が出来ます。
例:
IF \ArxQueryAlwaltfxStatus('EXEC?') THEN EXIT /* ALWALTFX が実行中でない → 中断 */
機能:REXXマクロ関数の一括ロード/アンロードを行います。
構文:rc = ArxLoadFuncs()
rc = ArxDropFuncs()
他セッションからの呼び出し(後述)が可能な関数を全て一括ロード/アンロードします。
この関数は、ALWALTFX の各「REXXマクロ」機能で実行されるスクリプトファイルからは呼び出せません。
(各関数のロード/アンロード処理は自動で行われるため、呼び出す必要は無い)
「RXFUNCADD」で登録すれば呼び出せますが、その場合は何の処理も行わず、0 を返します。
例:
CALL RxFuncAdd 'ArxLoadFuncs','ALWAREXX','ArxLoadFuncs' CALL ArxLoadFuncs /* ここに処理内容を記述 */ CALL ArxDropFuncs
機能:REXXマクロ関数のバージョンを取得します。
構文:rc = ArxVersion()
バージョンは、下位2桁がマイナーバージョン、それより上位の桁がメジャーバージョンである10進数で返されます。
(例えば、バージョンが 3.4 の場合は '340' が返る)
例:
IF RXFUNCQUERY('ArxVersion') THEN EXIT IF ArxVersion()=340 THEN DO /* バージョン固有の処理内容を記述 */ END
これまでに説明した「REXXマクロ」機能用の関数のうち、幾つか...具体的には以下に列挙するとおり...は、ALWALTFX 以外のセッションでも使用できます。
ArxAlarm ArxBeep ArxQueryACSKeyState ArxQueryPointerPos ArxSetPointerPos ArxQueryMouseButton ArxPutMouseButton ArxQueryScreenSize ArxQueryWindowInfo ArxSetWindowPos ArxQueryWindowString ArxSetWindowString ArxInvalidateRect ArxQueryWindowHandle ArxEnumWindowHandle ArxIsWindow ArxSendMessage ArxPostMessage ArxQuerySysInfo ArxQuerySysValue ArxSetSysValue ArxMPFROM2SHORT ArxMPFROMSH2CH ArxCHAR1FROMMP ArxCHAR2FROMMP ArxCHAR3FROMMP ArxCHAR4FROMMP ArxSHORT1FROMMP ArxSHORT2FROMMP ArxSHORT1FROMMR ArxSHORT2FROMMR ArxD2X ArxX2D ArxC2X ArxX2C ArxNOT ArxAND ArxOR ArxXOR ArxNAND ArxNOR ArxQueryAlwaltfxStatus ArxLoadFuncs ArxDropFuncs ArxVersion
使用するためには、(ユーティリティー関数などと同じように)スクリプトファイルの先頭で「RXFUNCADD」で別途ロードする必要があります。
(ALWAREXX.DLL 及び ALWALTFX.DLL が、LIBPATH= の通ったディレクトリに存在する必要がある)
=== ファイルのトップ === /* 例 */ CALL RxFuncAdd 'ArxQueryScreenSize','ALWAREXX','ArxQueryScreenSize' PARSE VALUE ArxQueryScreenSize() WITH cx cy SAY '画面の解像度:横 =' cx '縦 =' cy === ファイルのボトム ===
また、ユーティリティー関数における「SysLoadFuncs」のように、一括登録を行う関数(ArxLoadFuncs)も用意してあります。
なお、上に列挙した以外の関数を他のセッションから呼び出すと、無条件でエラーになります。
※このファイル及び各サンプルファイルの取り扱いについては、ALWALTFX.DOC の 「その他」の内容に準ずるものとします。
[EOF]