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