GetForegroundWindow API関数を使って、手前ウィンドウのハンドルを取得し、Get WindowText API関数を使って、そのウィンドウのタイトルバーのテキストを取得することができます。
以下のサンプル「ShowWindowTitle」プロシージャを実行した後、他のウィンドウをアクティブにすれば、約5秒後にそのウィンドウのタイトルバーテキストが表示されます。
(Accessを再びアクティブにするのに、別項にて説明した「指定画面をアクティブにする」SetForegroundWindow API関数を併用しました。)
● 準備 ●
(1)新規標準モジュールを用意し、以下の宣言文とSubプロシージャを記述して「Modu le1」の名前で保存します。
(2)VBEのメニューから、[表示]-[イミディエイトウィンドウ]([Ctrl]+[G])を選択し、 イミディエイトウィンドウを表示させておきます。
※Access97の場合はデバッグウィンドウになりますので、以後読み替えて下さい。
● サンプルプログラム ●
' フォアグラウンドウィンドウ取得関数(API)の宣言
Declare Function GetForegroundWindow Lib "user32" () As Long
' ウィンドウのタイトルバーテキスト取得関数(API)の宣言
Declare Function GetWindowText Lib "user32" _
Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, _
ByVal cch As Long) As Long
' フォーカス戻し関数(API)の宣言
Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long
Public Sub ShowWindowTitle()
Dim wkTime As Date
Dim wkHwnd As Long
Dim wkStr As String
' ダミー処理(約10秒間)
wkTime = Now
Do Until Now - wkTime > CDate("00:00:10")
Loop
' 現在フォアグラウンドになっているウィンドウハンドルを取得
wkHwnd = GetForegroundWindow
' wkStrへフォアグラウンドのタイトルバーテキストを格納
wkStr = String(100, Chr(0))
GetWindowText wkHwnd, wkStr, Len(wkStr)
' Accessを手前に戻す
SetForegroundWindow hWndAccessApp
' メッセージ
MsgBox "手前のウィンドウは " & _
Left(wkStr, InStr(1, wkStr, Chr(0)) - 1) & " です"
End Sub
● 動作確認 ●
「ShowWindowTitle」内にカーソルを置いた状態で、[F5]キーを押して実行開始した後、すぐに別の適当なウィンドウをアクティブにします。
約10秒後にAccess画面が一番手前に戻り、手前ウィンドウのタイトルバーテキストが表示されます。
例えば、Internet Explorerにて、プロジェクトAのページを開いていた場合は、「手前のウィンドウは PROJECT-A - Microsoft Internet Explorer です」とメッセージが出ます。
● 詳細 ●
[GetForegroundWindow API関数]
引数:なし
戻り値:フォアグラウンドウィンドウのハンドルが返ります。
[GetWindowText API関数]
引数:hWnd - ウィンドウ(またはテキストを持つコントロール)のハンドルを指定します。
nMaxCount - lpStringバッファのサイズを指定します。
戻り値:成功すると、取得されたタイトルバーテキストの文字数が返ります。
テキストがないときや失敗した場合は、0が返ります。
(エラー情報を取得するにはGetLastError API関数を使います。)
[SetForegroundWindow API関数]
別項「指定画面をアクティブにして一番手前に持ってくる(API)」を参照して下さい。
● 補足説明 ●
GetWindowText API関数を呼び出す前に
wkStr = String(100, Chr(0))のように、文字列バッファをNULL文字(Chr(0))で埋めておき、表示の際にはLeft(wkStr, InStr(1, wkStr, Chr(0)) - 1)のように、後方のNULL文字をカットしています。