Newsgroup: it.comp.appl.access
Titolo: intercettare servizio msaccess.exe e attribuirgli il nome dell'applicazione

Ciao a tutti,
sto cercando (un pò per diletto) di tentare di intercettare il servizio 
msaccess.exe che viene avviato all'apertura di un db e associargli il nome 
dell'applicazione...
Mi spiego meglio, ora come ora riesco ad intercettare il servizio ma vorrei 
che all'apertura del db avesse il nome specifico dell'applicazione aperta.E' 
possibile??
Al momento se si aprono più db access questi vengono segnati nella lista dei 
servizi sempre con il nome MSACCESS.EXE.
Qualcuno  ha già sperimentato qualcosa?
X Carlo Costarella:
Ho visto l'esempio che hai riportato con l'uso dei WMI, interessantissimo e 
validissimo! :-)
Ho già provveduto a fare qualche modifica e da access riesco in parte ad 
ottenere quello che voglio...
Tu credi sia possibile intervenire direttamente sui servizi del Task??
Ciao
-- 
Roberto da Parma 

 ha scritto nel messaggio 
news:482db575$0$40216$4faf...@reader5.news.tin.it...

Ciao Roberto
per quanto riguarda il task manager hai la possibilità di "manipolarlo" 
anche con le WMI nel senso di farti restituire per esempio l'elenco dei 
processi.
Sinceramente non credo si possa ricavare il nome dell'applicazione che gira 
dal task manager.
Certamente puoi ricavare il PID dell'applicativo che unico e questo farlo 
appena avvii il programma: msaccess.exe PID = 2345, un'altra apertura 
restituisce un PID diverso. Questi vari PID potresti accodarli ad una 
tabella temporanea a farci quello che vuoi...
Personalmente per sapere se un determinato applicativo è aperto e quante 
istanze sono in funzione adotto questo modulo che ti scrivo in basso. 
L'importante è dare un nome ad ogni applicativo e indicare tale nome dal DB: 
"Strumenti"... "Avvio"..."Titolo applicazione":
Il nome della funzione è "VerificaAperti"
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
      ' Questa funzione conta tutte le istanze aperte di una applicazione,
      ' incluse le finestre non visibili.
      ' Argomenti: LngHwnd  = qualsiasi handle di finestra valido.
      ' StrAppCaption  = il titolo dell'applicazione da cercare.
      ' Esempio:   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, "PSWIN ver. 8.0") 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, "NOME APPLICAZIONE") > 1 Then
        'segue un esempio di utilizzo:
        '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
Ciao, Carlo 

 ha scritto nel 
messaggio news:g0p9vu$e87$1...@tdi.cu.mi.it...

Si dal punto di vista del nome non c'è problema...
Comunque da quanto ho capito non è possibile inviare al task manager un nome 
diverso da msaccess.exe...
In ogni caso grazie mille del codice...provvederò ad usarlo!
