Newsgroup: it.comp.appl.access
Titolo: Messaggio se il DB è aperto

è possibile intercettare se un DB è gia aperto.
cioè io apro un Db e lo minimizzo mettendolo nella barra di windows
poi mi dimentico e lo riapro.
potrei intercettare che il Db è gia aperto e mandare un messaggio di
avvertimento.

 ha scritto nel messaggio
news:UcYca.17015$7y3.5...@twister1.libero.it...

Questa procedura l'ho presa in rete e modificata così:
In un modulo pubblico:
Option Compare Database
Option Explicit
      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
Function GetAppName(Lnghwnd As Long)
' 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 ("")
            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, "NomeTuaApplicazione") Then
                  LngICount = LngICount + 1
                  End If
            End If
            LngResult = GetWindow(LngResult, GW_HWNDNEXT)
         Loop
         GetCountOfWindows = LngICount
End Function
Function VerificaAperti() As Boolean
'procedura per verificare se è stata aperta un'altra applicazione con lo
stesso nome
      If GetCountOfWindows(hWndAccessApp, "NomeTuaApplicazione") > 1 Then
        'Cancel = True
        'MsgBox "E' possibile aprire una sola volta il programma." & Chr(13)
& _
        '        "Verificare sulla barra di stato. Esiste una" & Chr(13) & _
        '        "copia già aperta del programma."
       'DoCmd.Quit acQuitSaveNone
        VerificaAperti = True
        End If
End Function
Basta eseguire "VerificaAperti" all'apertura del db, magari da una maschera
di apertura o in una macro "AutoExec", se restituisce True allora un'altra
applicazione con lo stesso nome è aperta. A questo punto ti regoli di
conseguenza.
Unico inconveniente: se tenti di aprire l'applicativo mentre è
contemporaneamente aperto l'esplora risorse alla cartella del tuo
applicativo, la procedura crede sia aperto il programma e lo chiude. Basta
chiudere l'explorer.
Ciao, Carlo