LOTUSSCRIPT 言語
文字列が値渡しされる場合、LotusScript は、null で終わる文字列 (C 関数で想定されます) に 4 バイトのポインタを渡します。C 関数はこの文字列を変更できますが、その長さを伸ばすことはできません。文字列への変更は、関数からの戻り値としてスクリプトの変数に反映されます。文字列以外へのポインタを渡す場合は、パラメータを参照渡しします。
キーワード LMBCS と Unicode を使うと、プラットフォーム固有でない文字を引数やリターンコードとして使うように指定できます。
ここに、Windows の C 関数 GetActiveWindow と SetWindowText を使ってアクティブウィンドウ (フォーカスのあるウィンドウ) のタイトルを設定するサブルーチンがあります。
Sub Initialize Dim activeWin As Long, winTitle As String, _ winLength as Long winTitle = Stringe(255,0) activeWin = GetActiveWin winLength = GetWindowText(activeWin, winTitle, 255) winTitle = Left(winTitle, winlength) Messagebox winTitle, "Window title" End Sub
実行時にウィンドウのタイトルを取得するには、GetWindowText 関数を使います。GetWindowText には 1 個の入力パラメータ (ウィンドウハンドルで Long 型)、および String 型の変数とバッファサイズ (文字列の最大長) の 2 個の出力パラメータがあります。戻り値は、関数が String 型の変数に入れた文字列の実際の長さです。
Declare Function GetWindowText Lib "User32" Alias _ "GetWindowTextA" __ (ByVal hWnd As Long, __ ByVal lpString As Long _ ByVal chMax As Long) As Long
メモ C 関数によって値を与えられた String 型の変数を処理する際は注意する必要があります。C 関数によって割り当てられた値の長さが文字列にすでに割り当てられている長さより長いと、文字列に割り当てられていないメモリを上書きします。予期できない結果が発生し、コンピュータがクラッシュする原因になる場合があります。
次の 2 つの方法のいずれかを使って、String 型の変数が文字列を入れるのに十分な長さを持つことを必ず確認してください。
winTitle$ = String(255, 0)
または、固定長の String 型変数として winTitle を宣言できます。
Dim winTitle As String * 255
GetWindowText は、文字列の実際の長さを返します。可変長の String 型変数を使用する場合、戻り値を使って文字列の末尾にある余分なものを除去できます。次に例を示します。
Dim winTitle As String, winLength As Long winTitle = String(255, 0) activeWin% = GetActiveWindow() winTitleLength% = GetWindowText(activeWin%, winTitle$, 255) winTitle$ = Left(winTitle$, winTitleLength%)
メモ 文字列の長さを返さない C 関数を使用する場合は、次のようにして文字列の左の部分を最初の NULL 文字まで取り出せます。
stringFromC$ = Left(stringFromC$, Instr(stringFromC$,_ Chr$(0)) -1)
関連項目