请各位大虾,代码中怎么样实现自动关机和自动重启

解决方案 »

  1.   

    2000下关机
    Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
    Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Public Declare Function LookupPrivilegevalue Lib "advapi32.dll" Alias "LookupPrivilegevalueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
    Public Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (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
    Public Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
    Public Const ANYSIZE_ARRAY = 1
    Public Const TOKEN_ADJUST_PRIVILEGES = &H20
    Public Const TOKEN_QUERY = &H8
    Public Const SE_PRIVILEGE_ENABLED = &H2
    Public Type LUID
     LowPart As Long
     HighPart As Long
    End Type
    Public Type LUID_AND_ATTRIBUTES
     pLuid As LUID
     Attributes As Long
    End Type
    Public Type TOKEN_PRIVILEGES
     PrivilegeCount As Long
     Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End Type
    Type LARGE_INTEGER
     LowPart As Long
     HighPart As Long
    End Type
    Sub AdjustTokenPrivilegesForNT() '使NT关机的副程序
     Dim hdlProcessHandle As Long
     Dim hdlTokenHandle As Long
     Dim tmpLuid As LUID
     Dim tkp As TOKEN_PRIVILEGES
     Dim tkpNewButIgnored As TOKEN_PRIVILEGES
     Dim lBufferNeeded As Long
     hdlProcessHandle = GetCurrentProcess()
     OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle
     LookupPrivilegevalue "", "SeShutdownPrivilege", tmpLuid
     tkp.PrivilegeCount = 1
     tkp.Privileges(0).pLuid = tmpLuid
     tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
     AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
    End Sub
    Private Sub cmdCancel_Click()
     AdjustTokenPrivilegesForNT
     ExitWindowsEx 1, 0'关机
    End Sub
      

  2.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=179556
      

  3.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18622
      

  4.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=166814