GetWindowText関数は、WindowsAPIの1つで、ウィンドウのキャプションタイトルを取得するために使用されます。
API宣言
ExcelVBAでは、GetWindowText関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。
解説
パラメータ | 内容 |
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関数を呼び出して、ウィンドウのキャプションタイトルを取得します。
length = GetWindowText(hWnd, title, length)
この時、hWndは取得したいウィンドウのハンドルであり、titleは取得したキャプションが格納される文字列バッファです。lengthは取得した文字列の長さが格納されます。
4.取得した文字列の整形
GetWindowText関数が返す文字列には余分なスペースが含まれることがあります。それを取り除いて整形します。
title = Left$(title, length)
プログラミング例
以下に、プログラミング例を紹介します。
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アプリケーション開発において、他のウィンドウとの連携や情報取得などの用途で広く利用されています。正しく使うことで、他のウィンドウの状態や情報を取得することが可能です。是非活用してください。