即効テクニック |
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文字をカットしています。