【VBA×WindowsAPI】CloseWindow関数の使い方
CloseWindow関数
CloseWindow関数は指定したウィンドウを最小化するための関数です。
関数名にCloseと付いているためウィンドウを”閉じる”関数のようにも見えますが、ウィンドウ自体を閉じることはなく最小化表示にするための関数です。
UserFormのような通常は最小化できないウィンドウに対しても最小化させることができますが、最大化のボタン等が存在しないため最小化の状態から元に戻すことが出来なくなるので注意しましょう。
ウィンドウを最小化する手段としてはSendMessage関数を使った方法もあります。
使用方法
CloseWindow関数を使用するにはあらかじめ関数の宣言しておく必要があります。
※宣言をしないと関数は使えずにエラーとなるので書き忘れに注意しましょう。
使用しているWindowsが32bitか64bitかによって宣言時に書く文言が違います。
環境に合わせて以下のいずれかをコードの一番初め(Option Explicitの次の行あたり)に書いておくことで、そのモジュール内で各関数を使うことができるようになります。
Declare PtrSafe Function CloseWindow Lib “user32” (ByVal hWnd As LongPtr) As Long
Declare Function CloseWindow Lib “user32” (ByVal hwnd As Long) As Long
上記のどちらを書けばいいかわからない場合は以下のコードをコピペして、モジュールの最上部に書いておきましょう。この構文を書いておくことで自動的に使うことのできる方の構文が使用されます。
VBE上では使えない方の構文が赤色で表示される場合がありますが、実行に影響はありません。
1 2 3 4 5 |
#If VBA7 Then Declare PtrSafe Function CloseWindow Lib "user32" (ByVal hWnd As LongPtr) As Long #Else Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long #End If |
各関数の宣言文は「Private/Public」を付けて各関数の有効範囲を指定することもできます。
・Public Declare PtrSafe Function~ :モジュール外で呼び出し有効
構文
CloseWindow関数の構文は下記のように書きます。
lRet = CloseWindow(hwnd)
引数
hwnd (64bit:LongPtr型 / 32bit:Long型)
最小化させたいウィンドウのハンドルを入力します。
ウィンドウハンドルを取得するための関数としてFindWindow関数やFindWindowEx関数、GetActiveWindow関数などがあります。開発(実行)環境によって変数の型が変わるので注意が必要です。
戻り値
lRet (Long型)
戻り値は関数が成功した場合は「0以外」です。
失敗した場合は「0」が返されます。
サンプルコード
以下はCloseWindow関数とFindWindow関数を使って、メモ帳ウィンドウを最小化させるサンプルコードです。メモ帳ウィンドウを1つ以上開いた状態で下記コードを実行すると、該当のウィンドウを最小化させることができます。
1 2 3 4 5 6 7 8 9 10 11 |
Declare PtrSafe Function CloseWindow Lib "user32" (ByVal hWnd As LongPtr) As Long Sub main() Dim hWnd As LongPtr Dim lRet As Long hWnd = FindWindow("notepad", vbNullString) lRet = CloseWindow(hWnd) End Sub |
VBA×WindowsAPIまとめページ
その他のWindowsAPI関数は下記ページにまとまっているので合わせて参照下さい。
参考
Microsoft公式:CloseWindow 関数 (winuser.h) – Win32 apps