FindWindow関数は、WindowsAPIの1つで、アプリケーションが起動しているかを確認するために使用されます。FindWindowを使用する事でアプリケーションの重複起動を回避する事も可能です。
API宣言
ExcelVBAでは、FindWindow関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
解説
パラメータ | 内容 |
Lib | 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "user32.dll"となります。 |
Alias | API関数名を指定します。ここでは"FindWindowA"という関数名が指定されています。 |
引数については以下の通りです。
引数 | 内容 |
lpClassName | ウィンドウクラス名をセットします。以下に代表的なウィンドウクラス名を幾つか紹介します。 |
lpWindowName | ウィンドウ名を指定します。基本には「vbNullString」をセットします。 |
ウィンドウクラス名は以下の通りです。
ウィンドウ | クラス名 |
Access | OMain |
Excel | XLMAIN |
Word | OpusApp |
PowerPoint | PP10FrameClass |
Internet Explorer | IEFrame |
Visual Basic Editor | wndclass_desked_gsk |
エクスプローラ | ExploreWClass |
メモ帳 | Notepad |
ワードパッド | WordPadClass |
電卓 | SciCalc |
ペイント | MSPaintApp |
使い方
FindWindow関数を呼び出し、アプリケーションが起動しているかを確認します。
Dim hwnd As Long
hwnd = FindWindow("Notepad", vbNullString)
hwnd = FindWindow("Notepad", vbNullString)
APIの戻り値として、アプリケーション起動結果を示す数値が返されます。条件に一致するウィンドウが見つかった場合はそのウィンドウのハンドル(HWND型)を返します。もし条件に一致するウィンドウが見つからない場合は、NULLに相当する値である0が返されます。
プログラミング例
以下に、プログラミング例を紹介します。
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub CheckNotepadRunning()
Dim hwnd As Long
hwnd = FindWindow("Notepad", vbNullString)
If hwnd <> 0 Then
MsgBox "Notepadが起動しています。ウィンドウハンドル: " & hwnd
Else
MsgBox "Notepadは起動していません。"
End If
End Sub
Sub CheckNotepadRunning()
Dim hwnd As Long
hwnd = FindWindow("Notepad", vbNullString)
If hwnd <> 0 Then
MsgBox "Notepadが起動しています。ウィンドウハンドル: " & hwnd
Else
MsgBox "Notepadは起動していません。"
End If
End Sub
上記は、Notepad(メモ帳)が起動しているかを確認するサンプルコードです。
まとめ
FindWindow関数を利用することで、指定したウィンドウクラス名またはウィンドウ名を持つアプリケーションの存在を確認することができます。是非活用してください。