第9章 エミュレーション・キー
第6部 マクロ編
19.2 制御文
制御文としては、以下のものがあります。
文 説明
IF 処理の分岐
WHILE ループ
GOTO ジャンプ
■IF文
IF文は条件文によって処理の流れを変える制御文です。条件文の演算結果がTRUE(真)、FALSE(偽)によって処理が分岐されます。
[構文]
構文1 : 基本形 IF(条件文)
文・・・条件文がTRUE(真)のときに実行されます ENDIF
構文2 : 条件文によって処理がそれぞれに分岐する場合 IF(条件文)
構文3 : 複数の条件文によって処理が分岐する場合 IF(条件文1)
文・・・条件文1がTRUE(真)のときに実行されます ELSEIF(条件文2)
文・・・条件文2がTRUE(真)のときに実行されます ELSEIF(条件文3)
文・・・条件文3がTRUE(真)のときに実行されます ENDIF
[補足]
・文は複数の文を記述することができます。
・IF文の中にIF文を入れ子にすることができます。
・条件文は1つだけ記述することができます。
(条件文どうしの演算結果を条件文とすることはできません)
[使用例]
次の例は"TSSX"という文字列を検索してその結果をMsgBox関数で表示しています。
IF(Scan("TSSX"))
MsgBox("ログオンが完了しました") ELSE
MsgBox("ログオンは完了していません") ENDIF
■WHILE文
WHILE文は条件文がTRUE(真)である間、処理を繰り返します。
[構文]
WHILE(条件文)
文1 文2 : ENDWHILE
[補足]
・文は複数の文を記述することができます。
・WHILE文の中にIF文やWHILE文を記述することができます。
・条件文は1つだけ記述することができます。
(条件文どうしの演算結果を条件文とすることはできません)
・WHILE文から強制的に抜けるときはBREAKWHILE文を使います。
・WHILE文の先頭へ強制的に処理を移すときはCONTINUE文を使います。
[使用例]
次の例はWHILE文で無限ループを行い"TSSX"という文字列が見つかるとWHILEから抜けます。見つからなかったらキー入力可
能になるのを待ってWHILE文の先頭に戻ります。
WHILE(TRUE)
IF(Scan("TSSX"))
MsgBox("ログオンが完了しました") BREAKWHILE
ELSE
Wait() CONTINUE ENDIF
ENDWHILE IF(Scan("TSSX"))
■GOTO文
GOTO文は指定ラベル位置の処理へジャンプします。
[構文]
GOTO(ラベル)
文1 文2 : ラベル:
文x1 文x2 : [補足]
・ラベルには任意の文字列を記述することができます。
・ラベルはGOTO文の前後いずれにも記述することができます。
・マクロ内に同一文字列のラベルを複数記述することはできません。
・DLGTEMPLATEからENDDLGTEMPLATEの範囲を超えてGOTO文は使用できません。
[使用例]
次の例では、現在キーボードロック状態の場合ERR_KEYLOCKラベルへジャンプします。
IF(IsKeyboardLock())
GOTO(ERR_KEYLOCK)
ENDIF
[その他の処理]
ERR_KEYLOCK:
MsgBox("キー入力できない状態です.")
関数名 機能 Bye ディスプレイエミュレータの終了
CmpText 文字列の比較
CopyLn クリップボードへの複写(行範囲)
CopyScreen クリップボードへの複写(全画面)
Dialog ダイアログボックスの表示
EndDialog ダイアログボックスの終了
Exec コマンドの実行 Exit マクロの実行中止
Equ 比較
GetError エラー番号の取り出し
GetResult 結果コードの取り出し
IsKeyboardLock キーボードロック状態の確認
IsProtectPos 入力禁止位置の確認
IsFieldTopPos フィールド先頭位置の確認
IsFieldEndPos フィールド最終位置の確認
MsgBox メッセージボックスの表示
Not 論理反転
Paste クリップボードからの貼り付け
Scan 文字列検索
SetCursorPos カーソル位置の設定
SetKeyUnlockTime キーアンロックタイムの設定
SetWaitTime 最大待ち時間の設定
Sleep 指定時間実行を停止
Type キーの入力
TypeKey キーの1文字即時入力
Wait ホストからの文字列待ち合わせ
パラメータを省略するときは、うしろのパラメータから順番に省略できます。途中のパラメータを省略することはできません。
例
Type("ABC",20,10) ;省略なし
Type("ABC",20) ;桁を省略
Type("ABC") ;行と桁を省略
■Bye ディスプレイエミュレータの終了
ディスプレイエミュレータを終了させます。セッションが起動されている場合はセッションを強制終了してから終了します。
[呼び出し形式]
Bye(ResultCode) [パラメータ]
パラメータ 説明 省略時のデフォルト値
ResultCode 意味をもちません 省略できません
■CmpText 文字列の比較
ホスト画面受信バッファの指定位置と指定文字列を比較します。比較結果はリターン値で確認できます。
[呼び出し形式]
CmpText(Text,Row,Col) [パラメータ]
パラメータ 説明 省略時のデフォルト値
Text 比較する文字列 省略できません
Row 比較開始行位置(1~24) カーソル位置 Col 比較開始桁位置(1~80) カーソル位置 [リターン値]
関数の呼び出しに成功するとTRUEを返します。文字列の比較に失敗した場合やエラーが発生した場合はFALSEを返します。リ ターン値がFALSEの場合はGetError関数を使ってエラー番号を調べることができます。
[使用例]
IF(CmpText("A"))
MsgBox("現在カーソルはAの上にあります") ELSE
MsgBox("現在カーソルはA以外の上にあります") ENDIF
■
CopyLnクリップボードへの複写
(行範囲
)指定位置で囲まれる行範囲をクリップボードへ複写します。クリップボードには、CF_TEXT形式のデータが置かれます。
[呼び出し形式]
CopyLn(Row1,Col1,Row2,Col2) [パラメータ]
パラメータ 説明 省略時のデフォルト値
Row1 複写範囲開始行位置(1~24) 1 Col1 複写範囲開始桁位置(1~80) 1 Row2 複写範囲終了行位置(1~24) 24 Col2 複写範囲終了桁位置(1~80) 80 [リターン値]
関数の呼び出しに成功するとTRUEを返します。エラーが発生した場合はFALSEを返します。リターン値がFALSEの場合はGetError 関数を使ってエラー番号を調べることができます。
[パラメータ]
ありません [リターン値]
関数の呼び出しに成功するとTRUEを返します。エラーが発生した場合はFALSEを返します。リターン値がFALSEの場合はGetError 関数を使ってエラー番号を調べることができます。
■Dialog ダイアログボックスの表示
ダイアログテンプレートに従ってダイアログボックスを表示します。ダイアログボックスが終了するまでこの関数は制御を戻しません。ダ イアログボックスを終了するには[メニュー]+[F4]キーを押すか、EndDialog関数を呼び出します。
[呼び出し形式]
Dialog(Template) [パラメータ]
パラメータ 説明 省略時のデフォルト値
Template ダイアログテンプレート名 省略できません
[リターン値]
関数の呼び出しに成功するとTRUEを返します。エラーが発生した場合はFALSEを返します。リターン値がTRUEの場合はGetResult 関数を使ってダイアログボックス処理結果を調べることができます。[メニュー]+[F4]キーを押して終了した場合、ダイアログボックス 処理結果は0になります。リターン値がFALSEの場合はGetError関数を使ってエラー番号を調べることができます。
■EndDialog ダイアログボックスの終了
表示中のダイアログボックスを終了させます。パラメータを1つ持ちダイアログボックスの処理結果を表します。この値はダイアログボック スを終了後にGetResult関数を使って調べることができます。
[呼び出し形式]
EndDialog(ResultCode) [パラメータ]
パラメータ 説明 省略時のデフォルト値
ResultCode 処理結果コード(0~255) 0
[リターン値]
関数の呼び出しに成功するとTRUEを返します。エラーが発生した場合はFALSEを返します。リターン値がFALSEの場合はGetError 関数を使ってエラー番号を調べることができます。
■Exec コマンドの実行(子プロセスの起動)
プログラムを呼び出します。呼び出したプログラムの終了を待たずにこの関数は制御を戻します。プログラムの起動結果はGetResult関 数で調べることができます。
[呼び出し形式]
Exec(CmdLine) [パラメータ]
パラメータ 説明 省略時のデフォルト値
CmdLine コマンドライン 省略できません
[リターン値]
関数の呼び出しに成功するとTRUEを返します。エラーが発生した場合はFALSEを返します。リターン値がFALSEの場合はGetError 関数を使ってエラー番号を調べることができます。
[使用例]
Exec("COMMAND.COM/c copy import.txt a:")
■Exit マクロの実行中止
実行中のマクロを中止します。[呼び出し形式]
Exit() [パラメータ]
ありません [リターン値]
関数の呼び出しに成功するとTRUEを返します。エラーが発生した場合はFALSEを返します。リターン値がFALSEの場合はGetError 関数を使ってエラー番号を調べることができます。
■Equ 比較
2つのパラメータの値を比較します。
[呼び出し形式]
Equ(Param1,Param2) [パラメータ]
パラメータ 説明 省略時のデフォルト値
Param1 比較する第一パラメータ 省略できません
Param2 比較する第二パラメータ 省略できません
[リターン値]
2つのパラメータが等しい場合はTRUEを、等しくない場合はFALSEを返します。
[使用例]
キー入力でキー入力禁止エラーだった場合に、リセットキーで入力禁止状態を解除しています。
Type("ABC")
IF(Equ(GetError(),ERROR_DNYKEY)) Type("[RESET]") ENDIF
■GetError エラー番号の取得
関数がエラー終了したときのエラー番号を取得します。エラーが発生していない場合はERROR_NONEを返します。
[呼び出し形式]
GetError() [パラメータ]
ありません
値 意 味
ERROR_NOMEMORY メモリ不足が発生しました。
ERROR_NOTCNCT ホストと接続されていません。
ERROR_TIMEOUT タイムアウトが発生しました。
ERROR_DNYKEY キー入力禁止でした。
ERROR_NOSCAN Scan関数で文字列が見つかりませんでした。
ERROR_INVPARAM パラメータが不正です。
ERROR_INVKEY Type関数で無効なキーが指定されました。
ERROR_ABORT セッションが異常終了しました。
ERROR_INVPATHNAME 接続パス名が不正です。
ERROR_FILENOTEXIST Exec関数で指定されたプログラムが見つかりません。
ERROR_NOEXEC Exec関数で指定されたプログラムが実行できませんでした。
ERROR_NOTSTART セッションが未起動です。
ERROR_NOSUPPORT 未サポート関数が呼び出されました。
■GetResult 結果コードの取得
EndDialogで返された値、またはExec関数によって実行されたコマンドの起動結果を取得します。
[呼び出し形式]
GetResult() [パラメータ]
ありません [リターン値]
結果コードを表します。
■
IsKeyboardLockキーボードロック状態の確認
現在キー入力禁止状態か確認します。[呼び出し形式]
IsKeyboardLock() [パラメータ]
ありません [リターン値]
関数を呼び出したときにキー入力禁止だったらTRUEを返します。キー入力可能ならばFALSEを返します。
[使用例]
IF(IsKeyboardLock())
MsgBox("キー入力できない状態です") ENDIF
■IsProtectPos 入力禁止位置の確認
指定位置がキー入力禁止位置か確認します。[呼び出し形式]
IsProtectPos(Row,Col)
[パラメータ]
パラメータ 説明 省略時のデフォルト値
Row 確認行位置(1~24) カーソル位置
Col 確認桁位置(1~80) カーソル位置
[リターン値]
関数を呼び出したときに指定位置がキー入力禁止位置だったらTRUEを返します。キー入力可能位置ならばFALSEを返します。
[使用例]
IF(IsProtectPos(2,10))
MsgBox("2行10桁目は、キー入力禁止位置です") ENDIF
■
IsFieldTopPosフィールド先頭位置の確認
指定位置がフィールドの先頭位置か確認します。[呼び出し形式]
IsFieldTopPos(Row,Col) [パラメータ]
パラメータ 説明 省略時のデフォルト値
Row 確認行位置(1~24) カーソル位置
Col 確認桁位置(1~80) カーソル位置
[リターン値]
関数を呼び出したときに指定位置がフィールドの先頭位置だったらTRUEを返します。
それ以外の位置、またはアトリビュート文字位置ならばFALSEを返します。
不定様式画面のときは、1行1桁目がフィールドの先頭位置として扱われます。
[使用例]
IF(Not(IsFieldTopPos()))
TypeKey("[BACKTAB]");;フィールドの先頭へカーソルを移動 ENDIF
■
IsFieldEndPosフィールド最終位置の確認
指定位置がフィールドの最終位置か確認します。[呼び出し形式]
IsFieldEndPos(Row,Col) [パラメータ]
パラメータ 説明 省略時のデフォルト値
Row 確認行位置(1~24) カーソル位置