LOTUSSCRIPT 言語


他のプログラムとの作業のための関数およびステートメント
LotusScript には、他のプログラムやオペレーティングシステムとの作業に使える関数およびステートメントがいくつか用意されています。
関数/ステートメント目的
Shell 関数別のプログラムを起動します。
Shellid 関数別のプログラムを起動し、そのタスク ID を返します。
ActivateApp 関数指定されたウィンドウをアクティブに (フォーカスを移動) します。
SendKeys ステートメントキーストロークをアクティブウィンドウに送ります。
Environ 関数環境変数の現在の値を返します。
Yield 関数/ステートメントスクリプト実行中に制御をオペレーティングシステムに移します。
Windows プラットフォームはこれらすべての関数とステートメントをサポートします。OS/2 と UNIX プラットフォーム、および Macintosh はこの一部をサポートします。また、クライアント製品によっては、特定の関数をサポートしていないものもあります。たとえば、Lotus Notes は SendKeys と Yield をサポートしていません。また、Yield は Win 16 環境でのみ有用です。詳しくは、「付録 B プラットフォームの違い」を参照してください。

次の例では、Windows のアクセサリプログラムの「メモ帳」と対話するために、これらすべての関数およびステートメントを使用しています。


2 つのモジュールレベルの変数と 4 つのサブルーチンがあります。

モジュールレベルの変数は String 型の変数です。

Dim startDir As String ' The current directory at startup.
Dim fileName As String ' The note file name.

4 つのサブルーチンは Initialize、CreateNote、ReadNote、および Terminate です。Initialize はモジュールがロードされると自動的に実行されます。次に、Initialize は CreateNote と ReadNote を呼び出します。Terminate はモジュールがアンロードされる前に実行されます。

Initialize サブルーチンは Windows の Temp ディレクトリを現在のディレクトリにし、_MYNOTE.EXE という名前のファイルが存在して empty であることを確認し、CreateNote サブルーチンを呼び出して、続いて ReadNote サブルーチンを呼び出します。

Sub Initialize
Dim tempDir As String, taskID As Integer
' Store the name of the current directory, then make the
' Windows Temp directory the current directory.
startDir$ = CurDir$
tempDir$ = Environ("Temp")
ChDir tempDir$
fileName$ = "_MYNOTE.TMP"
' Make sure the file exists and is empty before
' opening Notepad.
fileNum% = FreeFile
Open fileName$ For Output As fileNum%

Write #fileNum% ' The file now contains only an empty line.
Close fileNum% ' Open the file (guaranteed to exist) in Notepad. taskID% = Shell("notepad " & fileName$)
CreateNote ' Create the note.See the CreateNote sub below.
ReadNote ' Display the note.See the ReadNote sub below.
End Sub

CreateNote サブルーチンは、メモのヘッダーを現在の日付と時刻も含めて作成し、メッセージを表示し、(フォーカスの移った) メモ帳をアクティブにして、ヘッダーをメモ帳に送ります。続いて、ユーザーがメモ帳に入力できるように、制御を 10 秒間 Windows に移します。Yield の指定された 10 秒間の While ループを含めなければ、スクリプトの実行は一時停止することなく続行され、ユーザーがメモに入力する時間はありません。

10 秒後に、ActivateApp ステートメントはメモ帳がフォーカスを持っていることを確認し (ユーザーがフォーカスを別のウィンドウに移していた場合)、SendKey ステートメントは [ファイル] - [上書き保存] メニューコマンドとコントロールメニューの [最小化] コマンドにキーストロークを送ります。

[ファイル] - [上書き保存] のキーストロークは [Alt] + [F] + [S] で、[最小化] コマンドのキーストロークは [Alt] + [スペース] + [N] です。[Alt] + [スペース] + [C] はメモ帳のタイトルバーのコントロールメニューを開きます。SendKeys ステートメントでは、% は [Alt] キーを表します。

Sub CreateNote
Dim header As String, finish As Single
MessageBox "Write your note."
header$ = Format(Now, LongDate) &"~~Note:"
ActivateApp "notepad - " & fileName$
SendKeys "~" & header$, TRUE ' Send the note header
' to Notepad.
finish!= Timer + 10
While Timer < finish!
Yield
Wend
ActivateApp "notepad - " & fileName$
SendKeys "%fs% n",TRUE ' Save the file
' and minimize the window.
End Sub

ReadNote サブルーチンはメッセージボックスを表示し、保存されたばかりのファイルを開いて、ファイルの内容を String 型の変数に入れ、内容と共にメッセージを表示します。ファイル名はメッセージボックスのタイトルバーに表示されます。

Sub ReadNote
MessageBox "Read your note."
fileNum% = FreeFile
Open fileName$ For Input As #fileNum%
message$ = Input$(LOF(fileNum%), fileNum%)
Close fileNum%
MessageBox message$,, fileName$
End Sub

Terminate サブルーチンが実行されます。ActivateApp ステートメントは、ユーザーが別のウィンドウにフォーカスを移した場合に、フォーカスをメモ帳に移します。SendKeys ステートメントは [Alt] + [F4] をメモ帳に送り、メモ帳を閉じます。続いて起動時のディレクトリを再び現在のディレクトリにします。

Sub Terminate
ActivateApp "notepad - " & fileName$
SendKeys "%{f4}", TRUE
ChDir startDir$
End Sub

関連項目