HOME > 即効テクニック > AccessVBA > API > 手前ウィンドウのタイトルを取得する(API)

即効テクニック

API

手前ウィンドウのタイトルを取得する(API)

( - )
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文字をカットしています。