Home > 即効テクニック > AccessVBA > Access設定 > アプリケーションの重複起動を回避する

即効テクニック

Access設定

アプリケーションの重複起動を回避する

(Access 2000/2002/2003)
● 概要 ●
宣言文 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


● 補足 ●
フォアグラウンドウィンドウとは、ユーザーが操作できるウィンドウ(アクティブウィンドウ)のことです。