機能: | システムメニューのコマンドを実行します。 | ||
構文: | 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 ··· 分類.名前 SORTOBJNAME_1 ··· 分類.名前:1 SORTEXT ··· 分類.拡張子 SORTEXT_1 ··· 分類.拡張子:1 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 = ArxSendMsg( type , msg , mp1 , mp2 ) | |||
rc = ArxPostMessage( type , msg , mp1 , mp2 ) | |||
rc = ArxPostMsg( type , msg , mp1 , mp2 ) | |||
type | ··· | 送信/通知対象ウィンドウ | |
msg | ··· | メッセージ・IDまたはメッセージシンボル | |
mp1,mp2 | ··· | メッセージ・パラメータ |
「送信/通知対象ウィンドウ」の指定法は、前述 ArxQueryWindowInfo と同じです。
ArxSendMessage 及び ArxSendMsg、ArxPostMessage 及び ArxPostMsg は、それぞれ同じ機能の関数です。好みのスペルの方をご使用下さい。
「メッセージシンボル」は、OS/2ツールキット(開発環境)で定義されているものの殆どをそのまま指定できます。
(WM_CHAR,WM_CLOSE,WM_QUIT など)
ただし、WM_USER など、間接的な指定に使われるシンボルは指定できません。その場合は、明示的にメッセージ・IDの値を指定して下さい。
「メッセージ・パラメータ」に、作業用メモリ(後述の ArxAllocTempMem で割り当て可能)のポインターを指定したい場合は、「TEMPMEM」を指定します。 (他のセッションからの呼び出しでない ArxSendMessage/ArxSendMsg のみ指定可能)
関数が正常に終了すると、それぞれ PM-API の WinSendMsg()、WinPostMsg() の戻り値をそのまま返します。
(ArxSendMessage/ArxSendMsg は32bit 16進数の値、ArxPostMessage/ArxPostMsg は 0 または 1)
ArxSendMessage/ArxSendMsg を他のセッションから呼び出す場合、あらかじめ ALWALTFX を実行させておく必要があります。
(設定状態は問いません。「全機能休止」の状態でも構わない)
これらの関数は、PM アプリケーション開発に精通されている方以外は、使用しないで下さい。
また、ArxSendMessage/ArxSendMsg を使用する場合は、メッセージ送信中に
(ダイアログ・ウィンドウが表示される等の)キー入力を要求する処理が行われないのが確実である場面でのみ使用するよう、特にご注意下さい。
例: | ||
CALL ArxPostMessage 'MAIN','WM_QUIT',0,0 | ||
/* アプリケーション終了要求(WM_QUIT)を通知する */ |
機能: | REXXマクロが呼び出されるきっかけになった、ALWALTFX の機能及び PM のメッセージ・パラメータを参照します。 | ||
構文: | rc = ArxQueryMsgParam( stem ) | ||
stem | ··· | 情報が入る変数(ステム)の名前 |
関数が正常に終了すると、変数 stem に、以下の値が設定されます。
stem.TRIGTYPE ··· 呼び出した機能 stem.HWND ··· ウィンドウ・ハンドル(32bit 16進数) stem.MSG ··· メッセージ・ID(32bit 16進数) stem.MSGS ··· メッセージシンボル stem.MP1 ··· メッセージ・パラメータ1(32bit 16進数) stem.MP2 ··· メッセージ・パラメータ2(32bit 16進数)
「呼び出した機能」は、ALWALTFX の機能である「キー操作拡張」「マウス操作拡張」「ウィンドウ制御」の、どの「REXXマクロ」の機能から呼び出されたかを判別するための文字列(「KEY」「MOU」「WIN」の何れか)です。
「メッセージシンボル」には、メッセージ・IDの値と合致する、OS/2ツールキット(開発環境)で定義されている文字列が設定されます。
(WM_CHAR,WM_BUTTON1CLICK など)
例: | ||
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/ArxSendMsg を使って、
作業用メモリのポインタを要求するメッセージを送付する際に、前もって ArxAllocTempMem でメモリを割り当て、
後で ArxQueryTempMemImage でその結果を参照する、という流れになります。
確保できる作業用メモリは1つのみで、ArxAllocTempMem を呼び出す度に、前に確保した作業用メモリは破棄されます。
(因みに、REXX スクリプト終了時にも自動的に破棄される)
これらの関数は、PM アプリケーション開発に精通されている方以外は、使用しないで下さい。
また、呼び出された ArxSendMessage/ArxSendMsg に対して、割り当てられたその作業用メモリ量で十分であるかのチェックは行われないので、特にご注意下さい。
(不足すると、アクセス違反で ALWALTFX が落ちます)
例: | ||
/* メイン・ウィンドウのボーダー(フレーム)の太さを調べる */ | ||
CALL ArxAllocTempMem 8 | /* 必要サイズのメモリを割り当て */ | |
CALL ArxSendMessage 'MAIN','WM_QUERYBORDERSIZE','TEMPMEM',0 | ||
CALL ArxQueryTempMemImage 'image' | /* メモリ内容を参照 */ | |
binx = SUBSTR(image,1,4) | /* 幅のバイナリデータ */ | |
biny = SUBSTR(image,5,4) | /* 高さのバイナリデータ */ |