機能: | 現行のマウスポインタの位置を取得します。 | ||
構文: | 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 を実行させておく必要があります。
(設定状態は問いません。「全機能休止」の状態でも構わない)
この関数を使用するにあたっての注意点を、以下に列挙します。
WIN-OS2 のウィンドウに対しては効果がありません。
(これは後述の ArxReplaceMouseButton も同様)
この関数を使用すると、物理的なマウス操作では不可能なマウスボタン操作
(例えば、「了解」「取消」両方のボタンをクリックするなど)を、仮想的に実現できます。
ただし、大抵のアプリケーションはそんな事を念頭にプログラムされていないと思われるので、
あまり無茶なマウスボタン操作は指定しないようにした方が賢明です。
REXX スクリプトが、「マウス操作拡張:REXXマクロ」の機能から呼び出されている場合、
模擬入力指定に、「REXXマクロ」の機能を呼び出すのと同じマウス操作割り当てを指定してこの関数を使用すると、
マクロ実行 → 模擬マウスボタン操作 → マクロ実行...の無限ループに陥る事になるので、
そういうプログラミングは行わないように、注意して下さい。
なお、この現象を発生させてしまった場合は、「Ctrl+ESC」の操作で
「このプログラムは,システムの要求に応答していません。」のウィンドウを出して、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ダウン」に置換する */ |