Drew Wutka
DWUTKA at marlow.com
Thu Mar 13 21:19:00 CST 2003
You're looking for the window's text. You should have it look for the class
name, which for an Access window is OMain.
Drew
-----Original Message-----
From: Bob Gajewski
To: 'AccessD at databaseadvisors.com'
Sent: 3/13/03 7:58 AM
Subject: [AccessD] (A97) Prevent multiple instances of Access
Dear Fellow Listers:
I am in over my head (again)! I am trying to prevent users from opening
a
second instance of Microsoft Access (A97). The code below was taken
directly from Microsoft's Knowledge Base (A97=167843, A2K=197593). It
works
*perfectly* - if the other instance is windowed; it doesn't work at all
if
the other instance is either minimized or maximized. I need it to work
no
matter what the state of the currently running instance.
I placed the CBF in the Switchboard, as my AutoExec macro loads the
switchboard when the database is opened.
Any suggestions, of course, are greatly appreciated!
TIA,
Bob Gajewski
*** SWITCHBOARD CBF ***
===============================================
Private Sub Form_Open(Cancel As Integer)
' Check for instance of Access already running.
If GetCountOfWindows(hWndAccessApp, "Microsoft Access") > 2 Then
' I changed the original value of 1 to 2, as the error condition
occurred _
on every initial open when the value was 1.
Cancel = True
MsgBox "Please use the instance of Microsoft Access that is " _
& "already open."
DoCmd.Quit acQuitSaveNone
End If
End Sub
===============================================
*** MODULE "modStartup" ***
===============================================
Option Compare Database
Option Explicit
'------------------------------------------
' Global Declarations Section Of The Module
'------------------------------------------
Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal CCh As Long) _
As Long
Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) _
As Long
Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDLAST = 1
Public Const GW_HWNDNEXT = 2
Public Const GW_HWNDPREV = 3
' This function returns the Caption Text of each window passed to
' it. If a window does not have a Caption bar, then this function
' returns a zero-length string ("")
Function GetAppName(Lnghwnd As Long)
Dim LngResult As Long
Dim StrWinText As String * 255
Dim LngCCh As Long
LngResult = GetWindowText(Lnghwnd, StrWinText, 255)
GetAppName = Left(StrWinText, LngResult)
End Function
' This function counts all instances of an application that are open,
' including any windows that are not visible.
' Arguments: LngHwnd = Any valid window handle.
' StrAppCaption = The window caption to search for.
' Example: GetCountOfWindows(hWndAccessApp,"Microsoft Access")
Function GetCountOfWindows(Lnghwnd, StrAppCaption)
Dim LngResult As Long
Dim LngICount As Long
Dim StrAppName As String
LngResult = GetWindow(Lnghwnd, GW_HWNDFIRST)
Do Until LngResult = 0
If IsWindowVisible(LngResult) Then
StrAppName = GetAppName(LngResult)
If InStr(1, StrAppName, StrAppCaption) Then
LngICount = LngICount + 1
End If
End If
LngResult = GetWindow(LngResult, GW_HWNDNEXT)
Loop
GetCountOfWindows = LngICount
End Function
===============================================
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com