教えて!ExcelVBA!

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

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

f:id:m_kbou:20210523070626p:plain

ウィンドウのキャプションタイトルを取得するWindowsAPI関数(GetWindowText)について紹介します。

 

 

構文

記述方法は以下の通りとなります。

(API定義)

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

----------------------------------------

 (VBA記述)

GetWindowText(hWnd, lpString, cch)

[説明]:

ウィンドウのキャプションタイトルを取得するAPI関数はGetWindowText関数となります。VBAから呼び出して使用する場合には、

---------------------------------

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

---------------------------------

をプロシージャ外で宣言します。

引数であるhWndにはウィンドウハンドルを指定し、lpStringにはタイトルを格納する変数を指定し、cchにはタイトルのバイト数を指定します。GetWindowText関数を実行すると戻り値として「0」又は「0以外」が返ります。「0」の場合はタイトル取得に失敗した状態となり、「0以外」の場合は成功した状態(タイトルのバイト数を取得)となります。

 

使い方

使用方法について説明します。 

[プログラミング例]:

'*------------------------------------------
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'*------------------------------------------
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long
'*------------------------------------------

Sub ウィンドウのキャプションを取得する()

  '↓処理①
  Dim ウィンドウ As Long
  Dim バイト数 As Long
  Dim タイトル As String * 80

  '↓処理②
  ウィンドウ = FindWindow("Notepad", vbNullString)
  If (ウィンドウ = 0) Then
    MsgBox "メモ帳は起動されていません。"
    Exit Sub
  Else
    バイト数 = GetWindowText(ウィンドウ, タイトル, Len(タイトル))
    If (バイト数 = 0) Then
      MsgBox "取得に失敗しました。"
    Else
      MsgBox "タイトル:" & タイトル
    End If
  End If

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
ウィンドウとバイト数とタイトルを格納する変数定義となります。

[処理②]:GetWindowTextによるキャプションタイトルを取得
WindowsAPI関数であるGetWindowTextを使用したウィンドウのキャプションタイトルを取得する方法となります。各引数には以下の内容をセットして処理を実行します。
・hWnd・・・ウィンドウハンドルをセットします。
   ※今回はFindWindow関数の戻り値である変数:ウィンドウをセットします。
・lpString・・・タイトルを格納する変数をセットします。
   ※今回は[処理①]で定義した変数:タイトルをセットします。
・cch・・・タイトルのバイト数をセットします。
   ※今回は変数:タイトルの桁数をセットします。
実行すると戻り値として「0」又は「0以外」が返されます。「0」の場合はタイトル取得に失敗した状態(MsgBoxで”取得に失敗しました。”を表示)となり、「0以外」の場合は成功した状態(MsgBoxでタイトル表示)となります。

f:id:m_kbou:20210523070704p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

(事前準備)

事前にメモ帳を開きます。(※タスクバーを確認するとメモ帳が起動している事がわかります。)

f:id:m_kbou:20210516170748p:plain

①<実行>ボタンをクリックします。<実行>ボタンには上記のプログラミング例のプログラムが登録されています。(※ボタンの作り方やボタンにプログラムを割り当てるにはこちらを参考にして下さい。)

f:id:m_kbou:20210523070717p:plain

②MsgBoxで「タイトル:無題 - メモ帳」が表示されます。

f:id:m_kbou:20210523070728p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

ウィンドウのキャプションタイトルを取得する方法についての説明は以上です。

 

おわりに

今回はWindowsAPI関数によるウィンドウのキャプションタイトルを取得する方法について説明しました。是非参考にして下さい。