API宣言
WindowsAPI(関数)を使うためには、事前に宣言が必要となります。
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
解説
この宣言では、FindWindow関数(アプリケーション起動を確認)が使用できる様になります。この関数ではアプリケーションのクラス名やウィンドウ名を指定する必要があります。以下に幾つか代表的なアプリケーションの情報を紹介しておきます。
アプリケーション名 | クラス名 | ウィンドウ名(例) |
メモ帳 | Notepad | 無題 - メモ帳 |
電卓 | CalcFrame | 電卓 |
Microsoft Word | OpusApp | 文書1 - Word |
Microsoft Excel | XLMAIN | Book1 - Excel |
Microsoft PowerPoint | PPTFrameClass | プレゼンテーション1 - PowerPoint |
Microsoft Access | OMain | 無題 - Access |
IE | IEFrame | 無題 - インターネット エクスプローラー |
Google Chrome | Chrome_WidgetWin_1 | 無題 - Google Chrome |
エクスプローラー | CabinetWClass | デスクトップ |
Adobe Acrobat Reader | AcrobatSDIWindow | 無題 - Adobe Acrobat Reader |
Oracle SQL Developer | SunAwtFrame | Oracle SQL Developer |
SAP GUI for Windows | SAP_FRONTEND_SESSION | SAP Easy Access |
プログラミング例
具体的なプログラミング例を紹介します。
Sub ウィンドウを探す()
' 変数の宣言
Dim クラス名 As String
Dim ウィンドウ名 As String
Dim ウィンドウハンドル As Long
' クラス名とウィンドウ名を設定
クラス名 = "Notepad" ' 今回はクラス名をメモ帳にする
ウィンドウ名 = vbNullString ' ウィンドウ名は空にする
' FindWindow関数を呼び出して、ウィンドウハンドルを取得
ウィンドウハンドル = FindWindow(クラス名, ウィンドウ名)
' 結果を表示
If ウィンドウハンドル <> 0 Then
MsgBox "メモ帳のウィンドウが見つかりました。ハンドル:" & ウィンドウハンドル
Else
MsgBox "メモ帳のウィンドウが見つかりませんでした。"
End If
End Sub
' 変数の宣言
Dim クラス名 As String
Dim ウィンドウ名 As String
Dim ウィンドウハンドル As Long
' クラス名とウィンドウ名を設定
クラス名 = "Notepad" ' 今回はクラス名をメモ帳にする
ウィンドウ名 = vbNullString ' ウィンドウ名は空にする
' FindWindow関数を呼び出して、ウィンドウハンドルを取得
ウィンドウハンドル = FindWindow(クラス名, ウィンドウ名)
' 結果を表示
If ウィンドウハンドル <> 0 Then
MsgBox "メモ帳のウィンドウが見つかりました。ハンドル:" & ウィンドウハンドル
Else
MsgBox "メモ帳のウィンドウが見つかりませんでした。"
End If
End Sub
上記のプログラムは、メモ帳が既にを開いているか確認し、結果を表示する内容です。既に開いている場合には、任意の番号をウィンドウハンドルに返します。
まとめ
WindowsAPI関数:FindWindowを使用し、アプリケーションの重複起動を確認する方法について紹介しました。