既に Access が起動されているかを判断する方法 Hit Counter

対象バージョン : 97, 2000, 2002, 2003
最終更新日 : 2005/04/25 (オリジナル作成日 : 1999/10/05)


概 要 

起動した Access 以前に、既に Access が起動していたかを判断するユーザー定義関数です。

 

構 文

AlreadyAccessStarted()

 

解 説

AlreadyAccessStarted 関数の戻り値はブール型 (Boolean)です。

既に、Access が起動されていれば True を、起動されていなければ False を返します。

AlreadyAccessStarted  関数では引数を使用しません。

 

ユーザー定義関数

'【Declarations】
Public Declare Function GetWindow Lib "user32" _
    (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
    (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function GetModuleFileName Lib "kernel32" Alias "GetModuleFileNameA" _
    (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long

Public Const GW_CHILD = 5
Public Const GW_HWNDNEXT = 2
Public Const GWL_HINSTANCE = (-6)

'【ユーザー定義関数】
Public Function AlreadyAccessStarted() As Boolean
Dim hwnd As Long
Dim hwndo As Long
Dim strClassName As String
Dim strModName As String
Dim lngClassNameLen As Long
Dim lngModNameLen As Long

hwnd = GetDesktopWindow()
strClassName = Space(127)
strModName = Space(255)

hwnd = GetWindow(hwnd, GW_CHILD)
Do While hwnd <> 0
    lngClassNameLen = GetClassName(hwnd, strClassName, 127)
    If Left(strClassName, lngClassNameLen) = "OMain" Then
        hwndo = GetWindowLong(hwnd, GWL_HINSTANCE)
        lngModNameLen = GetModuleFileName(hwndo, strModName, 255)
        If InStr(strModName, "MSACCESS.EXE") > 0 And hwnd <> hWndAccessApp Then
            AlreadyAccessStarted = True
            Exit Do
        End If
    End If
    hwnd = GetWindow(hwnd, GW_HWNDNEXT)
Loop
End Function
 

使用例

プロシージャでの使用例です。

If AlreadyAccessStarted() Then
    MsgBox "既に Access が起動しています"
Else
    MsgBox "他に Access は起動していません"
End If

 

補 足

ここで紹介している方法は、実行中のモジュールファイル名の中に "MSACCESS.EXE" が含まれるかで既に起動しているか否かを判断しています。このためバージョンが異なる Access が起動している場合でも同一視されます。


目次へ戻る