教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelVBAでWindowsAPIを使いアプリケーションのウィンドウ名を取得する方法

API宣言

WindowsAPI(関数)を使うためには、事前に宣言が必要となります。

Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
    ByVal hWnd As LongPtr, _
    ByVal lpString As String, _
    ByVal cch As Long _
) As Long

解説

この宣言では、GetWindowText関数(アプリケーションのウィンドウ名を取得)が使用できる様になります。

プログラミング例

具体的なプログラミング例を紹介します。

Sub ウィンドウのタイトルを取得する()
    Dim クラス名 As String
    Dim ウィンドウ名 As String
    Dim ウィンドウハンドル As Long
    Dim ウィンドウタイトル As String
    Dim タイトルの長さ As Long
    ' クラス名を指定してウィンドウハンドルを取得(例としてExcelを使用)
    クラス名 = "XLMAIN"  ' 今回はクラス名をExcelにする
    ウィンドウ名 = vbNullString  ' ウィンドウ名は空にする
    ' FindWindow関数を呼び出して、ウィンドウハンドルを取得
    ウィンドウハンドル = FindWindow(クラス名, ウィンドウ名)
    ' タイトルを格納するための空の文字列を用意
    ウィンドウタイトル = String(256, vbNullChar)
    ' GetWindowText関数を呼び出してタイトルを取得
    タイトルの長さ = GetWindowText(ウィンドウハンドル, ウィンドウタイトル, Len(ウィンドウタイトル))
    ' 取得したタイトルをメッセージボックスに表示
    MsgBox "ウィンドウのタイトルは: " & Left(ウィンドウタイトル, タイトルの長さ)
End Sub

上記のプログラムは、Excelのウィンドウハンドルを取得し、取得したハンドルを元にウィンドウ名を表示する内容です。ウィンドウハンドルの取得方法については、こちらのサイトも参考にして下さい。

まとめ

WindowsAPI関数:GetWindowTextを使用し、アプリケーションのウィンドウ名を取得する方法について紹介しました。