Results 1 to 3 of 3

Thread: win shutdown

  1. #1

    Thread Starter
    Hyperactive Member The Dutch Dude's Avatar
    Join Date
    Nov 2001
    Location
    Holland. Land of the Dutch. Home for me.
    Posts
    261

    win shutdown

    Can I make windows shut down from vb... I want to put a sleep timer on my computer ..
    Obey the dragon thing. Or not. Or possibly just a bit.

  2. #2
    Hyperactive Member
    Join Date
    Feb 2001
    Location
    Belgium/Antwerp
    Posts
    275
    Private Type LUID
    LowPart As Long
    HighPart As Long
    End Type

    Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    LuidUDT As LUID
    Attributes As Long
    End Type

    Const TOKEN_ADJUST_PRIVILEGES = &H20
    Const TOKEN_QUERY = &H8
    Const SE_PRIVILEGE_ENABLED = &H2

    Const EWX_SHUTDOWN = 1
    Const EWX_REBOOT = 2
    Const EWX_FORCE = 4

    Private Declare Function GetVersion Lib "kernel32" () As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle _
    As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
    Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias _
    "LookupPrivilegeValueA" (ByVal lpSystemName As String, _
    ByVal lpName As String, lpLuid As LUID) As Long
    Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal _
    TokenHandle As Long, ByVal DisableAllPrivileges As Long, _
    NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _
    PreviousState As Any, ReturnLength As Any) As Long
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, _
    ByVal dwReserved As Long) As Long

    ' Shut down windows, and optional reboot it
    ' if the 2nd argument is True, no WM_QUERYENDSESSION and WM_ENDSESSION
    ' messages are sent to active applications

    Sub ShutDownWindows(ByVal Reboot As Boolean, Optional ByVal Force As Boolean)
    Dim hToken As Long
    Dim tp As TOKEN_PRIVILEGES
    Dim flags As Long

    ' Windows NT/2000 require a special treatment
    ' to ensure that the calling process has the
    ' privileges to shut down the system

    ' under NT the high-order bit (that is, the sign bit)
    ' of the value retured by GetVersion is cleared
    If GetVersion() >= 0 Then
    ' Open this process for adjusting its privileges
    OpenProcessToken GetCurrentProcess(), (TOKEN_ADJUST_PRIVILEGES Or _
    TOKEN_QUERY), hToken

    ' Get the LUID for shutdown privilege.
    ' retrieves the locally unique identifier (LUID) used
    ' to locally represent the specified privilege name
    ' (first argument = "" means the local system)
    LookupPrivilegeValue "", "SeShutdownPrivilege", tp.LuidUDT

    ' complete the TOKEN_PRIVILEGES structure with the # of
    ' privileges and the desired attribute
    tp.PrivilegeCount = 1
    tp.Attributes = SE_PRIVILEGE_ENABLED

    ' enables or disables privileges in the specified access token
    ' last 3 arguments are zero because we aren't interested
    ' in previous privilege attributes.
    AdjustTokenPrivileges hToken, False, tp, 0, ByVal 0&, ByVal 0&
    End If

    ' prepare shutdown flags
    flags = EWX_SHUTDOWN
    If Reboot Then flags = flags Or EWX_REBOOT
    If Force Then flags = flags Or EWX_FORCE

    ' finally, you can shut down Windows
    ExitWindowsEx flags, &HFFFF

    End Sub

    Greetz, Luc

  3. #3

    Thread Starter
    Hyperactive Member The Dutch Dude's Avatar
    Join Date
    Nov 2001
    Location
    Holland. Land of the Dutch. Home for me.
    Posts
    261
    tnx 4 the help
    Obey the dragon thing. Or not. Or possibly just a bit.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width