教えて!ExcelVBA!

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

【ExcelVBA API操作】ウィンドウのキャプションタイトルを取得(GetWindowText)する方法を教えて!

GetWindowText関数は、WindowsAPIの1つで、ウィンドウのキャプションタイトルを取得するために使用されます。

API宣言

ExcelVBAでは、GetWindowText関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。

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

解説

パラメータ 内容
Lib 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "user32.dll"となります。
Alias API関数名を指定します。ここでは"GetWindowTextA"という関数名が指定されています。

引数については以下の通りです。

引数 内容
hWnd ウィンドウのハンドルです。ウィンドウハンドルは、Windowsオペレーティングシステム上でウィンドウを一意に識別するための数値です。FindWindowや他のAPI関数を使用して、対象となるウィンドウのハンドルを取得します。
lpString キャプションタイトルが格納される文字列バッファです。この引数は、関数が呼び出されるときにキャプションタイトルがこの文字列にコピーされます。文字列バッファのサイズは次の引数cchで指定されます。
cch 文字列バッファlpStringのサイズを指定します。これは文字列バッファの最大サイズを表します。関数が呼び出されると、この引数で指定されたサイズまでのキャプションタイトルが取得されます。もし取得したいキャプションタイトルが指定したサイズよりも大きい場合は、途中で切り捨てられます。

使い方

具体的な使い方を紹介します。

1.ウィンドウハンドルの取得

ウィンドウのキャプションタイトルを取得するためには、対象となるウィンドウのハンドルを取得する必要があります。これは、FindWindowなどの関数を使って行います。

' ウィンドウクラス名とウィンドウタイトルを指定してウィンドウハンドルを取得
Dim hWnd As Long
hWnd = FindWindow("Notepad", "無題 - メモ帳")

2.文字列バッファの用意

ウィンドウのキャプションタイトルを格納するための文字列バッファを用意します。このバッファは、取得した文字列の格納に使用されます。

' キャプションの最大長を指定
Dim length As Long
length = 255
' バッファを初期化
Dim title As String
title = Space$(length)

3.GetWindowText関数の呼び出し

GetWindowText関数を呼び出して、ウィンドウのキャプションタイトルを取得します。

' GetWindowText関数の呼び出し
length = GetWindowText(hWnd, title, length)

この時、hWndは取得したいウィンドウのハンドルであり、titleは取得したキャプションが格納される文字列バッファです。lengthは取得した文字列の長さが格納されます。

4.取得した文字列の整形

GetWindowText関数が返す文字列には余分なスペースが含まれることがあります。それを取り除いて整形します。

' 不要な空白を取り除く
title = Left$(title, length)

プログラミング例

以下に、プログラミング例を紹介します。

Function GetWindowTitle(hWnd As Long) As String
    Dim title As String
    Dim length As Long
    ' キャプションの最大長を指定
    length = 255
    ' バッファを初期化
    title = Space$(length)
    ' GetWindowText関数の呼び出し
    length = GetWindowText(hWnd, title, length)
    ' 不要な空白を取り除く
    GetWindowTitle = Left$(title, length)
End Function

この関数は、ウィンドウのハンドルを受け取り、そのウィンドウのキャプションタイトルを文字列として返します。

おわりに

GetWindowText関数は、VBAを含むWindowsアプリケーション開発において、他のウィンドウとの連携や情報取得などの用途で広く利用されています。正しく使うことで、他のウィンドウの状態や情報を取得することが可能です。是非活用してください。