【VBA×WindowsAPI】SetWindowText関数の使い方

SetWindowText関数

SetWindowText関数は指定したウィンドウのタイトルバーの文字列(キャプション)を変更するための関数です。VBAでは「UserForm.Caption=”新しいウィンドウ名”」と書くことでUserFormのキャプションを変更することができます。SetWindowText関数を使うことで、これと同じように画面に表示されている任意のウィンドウのキャプションを指定した文字列に設定することが可能です。
※アプリケーションによってはSetWindowText関数でキャプションを変更できないものもあります。

ちなみにSetWindowText関数関数と関係性の深い関数として、指定ウィンドウのキャプションの文字数を取得するGetWindowTextLength関数や、対の存在となる指定したウィンドウのキャプションの文字列を取得するGetWindowText関数が存在します。

 

使用方法

SetWindowText関数を使用するにはあらかじめ関数の宣言しておく必要があります。
※宣言をしないと関数は使えずにエラーとなるので書き忘れに注意しましょう。

使用しているWindowsが32bitか64bitかによって宣言時に書く文言が違います。
環境に合わせて以下のいずれかをコードの一番初め(Option Explicitの次の行あたり)に書いておくことで、そのモジュール内で各関数を使うことができるようになります。

 icon-code  64bit  

Declare PtrSafe Function SetWindowText Lib “user32” Alias “SetWindowTextA” _
(ByVal hwnd As LongPtr, ByVal lpString As String) As Long

icon-code  32bit  

Declare Function SetWindowText Lib “user32” Alias “SetWindowTextA” _
(ByVal hwnd As Long, ByVal lpString As String) As Long

上記のどちらを書けばいいかわからない場合は以下のコードをコピペして、モジュールの最上部に書いておきましょう。この構文を書いておくことで自動的に使うことのできる方の構文が使用されます。
VBE上では使えない方の構文が赤色で表示される場合がありますが、実行に影響はありません。

 
各関数の宣言文は「Private/Public」を付けて各関数の有効範囲を指定することもできます。

Private Declare PtrSafe Function~ :モジュール内でのみ呼び出し有効
Public Declare PtrSafe Function~ :モジュール外で呼び出し有効

 
 

構文

SetWindowText関数の構文は下記のように書きます。

icon-code SetClassName関数 

lRet = SetWindowText(hWnd, lpString)

引数

 hWnd     (64bit:LongPtr型 / 32bit:Long型)

ウィンドウ名(キャプション)を設定したいウィンドウのハンドルを入力します。
ウィンドウハンドルを取得するための関数としてFindWindow関数GetActiveWindow関数GetNextWindow関数GetParent関数など様々なものがあります。
開発(実行)環境によって変数の型が変わるので注意が必要です。
 

 lpString    (String型) 

ウィンドウ名に設定したい文字列を入力します。
 

戻り値

 lRet    (Long型) 

戻り値は関数が成功した場合、0以外の値が返ります。
関数が失敗した場合は0が返されます。

 

サンプルコード

以下はFindWindow関数SetWindowText関数を使って、指定のウィンドウのキャプションを変更するサンプルコードです。下記コードではメモ帳ウィンドウのうち最前面にあるウィンドウのキャプションを取得することができます。ちなみに「Notepad」部分(クラス名)を書き換えることでメモ帳以外の任意のアプリケーションを指定することもできます。
詳しくはFindWindow関数/GetClassName関数ページを参照下さい。

 

 icon-share-square  VBA×WindowsAPIまとめページ

その他のWindowsAPI関数は下記ページにまとまっているので合わせて参照下さい。

 icon-share-square  参考

Microsoft公式:SetWindowTextA 関数 (winuser.h) – Win32 apps

2023年7月16日Excel, VBA, Windows API

Posted by Lic