● 二重起動を禁止する - その2 ●

スクリーンセーバーを作るときなんかはこれかな。

FindWindow API関数を使用する方法。この関数は、ウインドウのタイトルバーの文字、クラス名を指定することにより、これらに該当するウインドウのハンドルを返してくれる。ただし、対象となるウインドウは親ウインドウのみで子ウインドウは対象にならないよ。子ウインドウ検索には FindWindowEx というAPI関数があるよ。これについては自分で調べてね。さて、関数を書いてみよう。

'-------------------------------------------------------------------
' 関数名 : IsFindWindow
' 機能   : 指定のウインドウが存在しているか調べる
' 引数   : (in)pForm … 親フォーム
' 返り値 : True:見つかった   False:見つからなかった
'-------------------------------------------------------------------
Public Function IsFindWindow(Optional ByVal AppCaption As String = vbNullString, _
                                        Optional ByVal AppClassName As String = vbNullString) As Boolean

    IsFindWindow = CBool(FindWindow(AppClassName, AppCaption))

End Function

例えばメインウインドウのキャプションが "MyAppName" とすると、

    If IsFindWindow("MyAppName", "ThunderRT5Form") Then
        Call MsgBox("2重起動です")
        End
    End If

ってな感じになる。

戻る