● 概要 ●
宣言文 Declare Function FindWindow Lib "user32" Alias "FindWindowA"
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
設定項目 内容
pClassName ウィンドウが属するウィンドウクラス名を指定[省略不可]
lpWindowName ウィンドウのタイトルバーの文字列を指定[省略不可]
アプリケーションのウィンドウが属するウィンドウハンドルの取得に成功すればアプリケーションが起動されていることがわかります。失敗すれば起動されていないこととなります。FindWindow関数の戻り値を利用してアプリケーションの重複起動を回避することができます。
次のコードは、ペイントが起動されている場合には、フォアグラウンドウィンドウにしてアクティブにし、そうでなければ新たに起動するサンプルです。
● サンプル ●
Private Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String _
, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow _
Lib "user32" _
(ByVal hwnd As Long) As Long
Private Const ERROR_SUCCESS As Long = 0
'アプリケーションの重複起動を回避する
Sub Sample()
Dim myHwnd As Long
'ペイントのウィンドウハンドルの取得
myHwnd = FindWindow("MSPaintApp", vbNullString)
If myHwnd = ERROR_SUCCESS Then
'起動していない場合は起動
Shell "mspaint", vbNormalFocus
Else
'起動している場合はメッセージを表示
MsgBox "ペイントは既に起動しています。"
'フォアグラウンドウィンドウにする
SetForegroundWindow myHwnd
End If
End Sub
● 補足 ●
フォアグラウンドウィンドウとは、ユーザーが操作できるウィンドウ(アクティブウィンドウ)のことです。