他のプログラムとの作業のための関数とステートメント

LotusScript® には、他のプログラムやオペレーティングシステムとの作業に使用できる関数とステートメントがいくつか用意されています。

Function/Statement

目的

Shell 関数

別のプログラムを起動します。

Shellid 関数

別のプログラムを起動し、そのタスク ID を返します。

ActivateApp 関数

指定されたウィンドウをアクティブに (フォーカスを移動) します。

SendKeys ステートメント

キーストロークをアクティブウィンドウに送信します。

Environ 関数

環境変数の現在の値を返します。

Yield 関数/ステートメント

スクリプト実行中に制御をオペレーティングシステムに移動します。

Windows プラットフォームはこれらすべての関数とステートメントをサポートします。OS/2 と UNIX プラットフォーム、Macintosh はこの一部をサポートします。また、クライアント製品によっては、特定の関数をサポートしていないものもあります。例えば、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