既に Access が起動されているかを判断する方法 |
対象バージョン : 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 が起動している場合でも同一視されます。