Newsgroup: it.comp.lang.visual-basic
Titolo: intercettre chiusura sessione xp

 
          ho trovato questo codice per intercettare la chiusura della sessione, lho
provato in vb , e funziona egregiamnete.
ora pero' vorrei capire bene come funziona, qualcuno sarebbe cosi gentile da
spiegarmelo?
Attribute VB_Name = "Module1"
Public Const GWL_WNDPROC = (-4)
Public Const WM_ENDSESSION = &H16
Public Const WM_QUERYENDSESSION = &H11
Public WndProc As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal
lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam
As Long, ByVal lParam 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
'call this from your form
Public Sub Hook(Lwnd As Long)
Dim uProcess As Long
WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal
wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_QUERYENDSESSION Then
   'MsgBox "hw:" + CStr(hw) + " uMsg:" + CStr(uMsg) + " wParam:" + CStr(wParam)
   WindowProc = False 'send don't shut down
   'run code do what you want, then call ExitWindowsEx etc up to you
  MsgBox ("prova1")
 
   Exit Function
ElseIf uMsg = WM_ENDSESSION Then
   'MsgBox "hw:" + CStr(hw) + " uMsg:" + CStr(uMsg) + " wParam:" + CStr(wParam)
   WindowProc = False
 
 
Dim SourceFile, DestinationFile
Dim MyDate
Dim Buffer
Dim datview
Dim inputfile As String, outputfile As String
inputfile = xxxxxxxxxxxxx
outputfile = xxxxxxxxxxxxxx
FileCopy inputfile, outputfile
Kill inputfile
MsgBox ("ho copiato il file,controlla - ora possochiudere il sistema")
 
  spegni = Shell("c:\windows\system32\shutdown.exe")
 
  'run code
   Exit Function
End If
WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam)
End Function
in particolare non capisco bene la differena tre wm_queryendsession e
wm_endsession
come mai il codice fa un confronto con tutti e due?
quali sono i valori corretti che assume wm_queryendsession e wm_endsession
per capire se e' una chiusura sistema o un logoff?
grazie mille
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 spiegarmelo?
Perche' non mi spieghi invece tu perche' tutte quelle righe di codice, 
quando hai gia' nella Form_QueryUnload tutto il necessario? :-)))
Cerca l'evento QueryUnload nell'help del VB, troverai tutto. Con il 
parametro UnloadMode potrai distinguere i vari casi di chiusura, ad 
esempio io uso questa Select:
     Case vbFormControlMenu
         ' È stato scelto il comando Chiudi dal menu di controllo del form.
     Case vbFormCode
         ' L'istruzione Unload viene richiamata dal codice.
     Case vbAppWindows
         ' La sessione corrente dell'ambiente operativo Microsoft 
Windows è conclusa.
     Case vbAppTaskManager
         ' L'applicazione è stata chiusa tramite Task Manager di 
Microsoft Windows.
     Case vbFormMDIForm
         ' Il form secondario MDI viene chiuso in quanto viene chiuso il 
form MDI principale.
     Case vbFormOwner
         ' Il form viene chiuso in quanto viene chiuso il proprietario.
     End Select
-- 
Ciao!
    -DocDoc-
--- Per scrivermi: docdoc()
sertel.net
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE!     
http://www.spamterminator.it/


 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ancora capita?
Non so dirtelo perche' non uso il metodo che hai usato tu (IMHO molto 
piu' complicato...;-)).


 annullare la chiusura?


 shutdown o un logoff
Lo fai guardando il valore di UnloadMode. Ma ha provato a leggere bene 
la guida del VB, in particolare la descrizione dell'evento QueryUnload 
che ti avevo anche consigliato?
In ogni caso, per favore inizia a imparare a quotare come si deve:
http://tinyurl.com/2gtns
