| 既に 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 が起動している場合でも同一視されます。