Newsgroup: it.comp.appl.access
Titolo: Impedire la chiusura di Access

L' utente puo' premere la crocetta "chiudi" della finestra windows
che contiene l' applicazione.
In questo caso non c'e' verso di intercettare l' evento chiusura,
per cui non posso mettere in atto alcune registrazioni da fare
all' atto dell' uscita dell' utente dall' applicazione client.
So che e' possibile nascondere la crocetta di cui sopra con
qualche funzione API, ma non ho idea di come si possa fare.
Qualche suggerimento ?

 ha scritto nel messaggio 
news:3990e3d5-bfa7-436d...@t10g2000yqg.googlegroups.com...

Metti tutto questo in un modulo :
Public Const WM_NCPAINT = &H85
Public Const GWL_STYLE = (-16)
Public Const WS_SYSMENU = &H80000
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
                (ByVal hwnd As Long, _
                 ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
                (ByVal hwnd As Long, _
                 ByVal nIndex As Long, _
                 ByVal dwNewLong As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                (ByVal hwnd As Long, _
                 ByVal wMsg As Long, _
                 ByVal wParam As Long, _
                 lParam As Any) As Long
Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, _
                 ByVal bRevert As Long) As Long
Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, _
                 ByVal nPosition As Long, _
                 ByVal wFlags As Long) As Long
Public Function ShowAccessCloseBtn(ShowIt As Boolean)
    Dim mhWnd        As Long
    Dim lngOldStyle  As Long
    Dim lngNewStyle  As Long
    mhWnd = Application.hWndAccessApp
    ' Get the current window style of the form.
    lngOldStyle = GetWindowLong(mhWnd, GWL_STYLE)
    If ShowIt Then
        ' Turn on the bit that enables system menu.
        lngNewStyle = lngOldStyle Or WS_SYSMENU
    Else
        ' Turn off the bit the shows the system menu.
        lngNewStyle = lngOldStyle And Not WS_SYSMENU
    End If
    Call RemoveItem(mhWnd)
    ' Set the new window style.
    Call SetWindowLong(mhWnd, GWL_STYLE, lngNewStyle)
    ' The 1 as the third parameter tells
    ' the window to repaint its entire border.
    Call SendMessage(mhWnd, WM_NCPAINT, 1, 0)
ExitHere:
    Exit Function
HandleErrors:
    Select Case Err.Number
        Case Else
            MsgBox Err.Number & " " & Err.Description
    End Select
    Resume ExitHere
End Function
Private Sub RemoveItem(hwnd As Long)
      Dim hMnu, y, i
      Const MF_BYPOSITION As Long = 1024
      Const MF_GRAYED As Long = 1
      Const MF_DISABLED As Long = 2
      hMnu = GetSystemMenu(hwnd, 0)
      For i = 6 To 0 Step -1
         y = RemoveMenu(hMnu, i, MF_BYPOSITION)
      Next i
End Sub
Poi lo richiami cosě :
Call ShowAccessCloseBtn(False) 'False Rimuove - True Attiva...

 Call ShowAccessCloseBtn(False) 'False Rimuove - True Attiva...
OK !
1)
Mi consigli di farlo (con false) all' apertura del menu' principale ?
2)
Un' altra cosa importante, abbi pazienza :
*prima* di chiudere l' applicazione, devo sempre rimetterlo a True ?
Te lo chiedo perche' so per esperienza che le API possono talvolta
produrre cambiamenti irreversibili, se non danni. Una volta settando
un orologio, qualche anno fa, un altro po' sfascio la macchina perche'
avevo dimenticato di chiuderlo ... :-)
Ancora grazie.
L' altra volta ti chiesi di che ti occupi (intendevo grosso modo ...)
ma
non m' hai risposto. Sigh. :-)

non m' hai risposto. Sigh. :-)
Mi vuoi assumere? :D
(resp. edp a livello nazionale di una nota azienda)
Ciao 

 (resp. edp a livello nazionale di una nota azienda)
Complimenti sinceri.
Magari conosci il mio amico Fabrizio Palazzo. E' stato
a lungo responsabile EDP della FAO a Roma.
Veramente BRAVO.

a lungo responsabile EDP della FAO a Roma.
No mi spiace... a memoria, nessun Palazzo  ;) 

 No mi spiace... a memoria, nessun Palazzo  ;)
... Peccato.
Nel senso che sarebbe stato assai divertente avere una
conoscenza in comune.

 Metti tutto questo in un modulo :
Ho provato ma mi da un "piccolo" problema.
Se chiamo la funzione, mi fa sparire la crocetta. Ok.
Se la chiamo in true, me la fa riapparire. Ancora Ok.
Ma a quel punto, anche se e' visibile, non e' piu' operativa !
Cioe' non funziona se ci fai il click sopra.