Newsgroup: it.comp.lang.visual-basic
Titolo: Chiusura del sistema operativo

Scusate,
    qualcuno saprebbe dirmi come posso fare a mettere un pulsante su
un'applicazione che permetta di chiudere la sessione di Windows?
Ciao,
            Andrea

un'applicazione che permetta di chiudere la sessione di Windows?
Credo ci sia qualcosa sul sito comune.
manuel 'fmf' ferrero

Esite un API ma non ricordo quale. Appena la trovo ti riscrivo.
Stefano

Sul sito di Cesare Rizzi dovrebbe esserci l'API per riavviare windows, basta
modificare il parametro passato (se non ricordo male l'API è la stessa).
http://members.xoom.it/CesareRizzi/

Grazie a tutti: ho trovato l'API e funziona, perň con Windows NT la cosa
diventa piů problematica... qualcuno ne na qualcosa?...

diventa piů problematica... qualcuno ne na qualcosa?...
Probabilmente avrai usato l'APE ExitWindowsEx:
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Dim r As Long
r = ExitWindowsEx(*, 0&)
dove per asterisco di intende una delle costanti sopra.
Se usi la costante 4 (EWX_FORCE) funziona anche sotto NT.
Per le altre devi ottenere il privilegio SE_SHUTDOWN_NAME
Per ottenerlo devi prima chiamare la funzione AdjustTokenPrivileges
Di piů non so dirti in quanto non ho NT.
Ciao,
Moreno
#sirri#@
morenosoft.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------

Sito Comune



Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const TOKEN_QUERY = &H8
Public Const TOKEN_ADJUST_PRIVILEGES = &H20
Public Const SE_PRIVILEGE_ENABLED = &H2
Public Type LUID
    UsedPart As Long
    IgnoredForNowHigh32BitPart As Long
End Type
Public Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    TheLuid As LUID
    Attributes As Long
End Type
Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal
dwReserved As Long) As Long
Declare Function LookupPrivilegeValue Lib "advapi32" Alias _
    "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As
String, _
    lpLuid As LUID) As Long
Declare Function GetCurrentProcess Lib "kernel32" () As Long
Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As
Long, _
    ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As
Long, _
    ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, _
    ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES,
ReturnLength As Long) As Long
'====================REBOOT=================================================
=
'
' Codice di esempio per il reboot, logoff e riavvio di un sistema Windows NT
'
Option Explicit
Private Sub Logoff_Click()
    AdjustToken
    Call ExitWindowsEx(EWX_LOGOFF Or EWX_FORCE, 0)
End Sub
Private Sub Reboot_Click()
    AdjustToken
    Call ExitWindowsEx(EWX_REBOOT Or EWX_FORCE, 0)
End Sub
Private Sub Shutdown_Click()
    AdjustToken
    Call ExitWindowsEx(EWX_SHUTDOWN Or EWX_FORCE, 0)
End Sub
'
'  Taken from MSDN
'
Private Sub AdjustToken()
    Dim hdlProcessHandle As Long
    Dim hdlTokenHandle As Long
    Dim lBufferNeeded As Long
    Dim tmpLuid As LUID
    Dim tkp As TOKEN_PRIVILEGES, tkpNewButIgnored As TOKEN_PRIVILEGES
    hdlProcessHandle = GetCurrentProcess()
    OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or
TOKEN_QUERY), hdlTokenHandle
    LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
    tkp.PrivilegeCount = 1
    tkp.TheLuid = tmpLuid
    tkp.Attributes = SE_PRIVILEGE_ENABLED
    AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored),
tkpNewButIgnored, lBufferNeeded
End Sub

 Di più non so dirti in quanto non ho NT.
