スクリーンセーバーを作るときなんかはこれかな。
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 ってな感じになる。 |