定时关机
Option ExplicitDim mDattime     As DatePrivate Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As LongPrivate Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As Long, ReturnLength As Long) As Long
Private Declare Function GetTokenInformation Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal TokenInformationClass As Long, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LARGE_INTEGER) As LongPrivate Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Const EWX_LOGOFF = 0             '注销当前用户
Private Const EWX_POWEROFF = 8           '关闭系统并关闭电源
Private Const EWX_SHUTDOWN = 1           '关闭系统使之能安全关闭电源
Private Const EWX_REBOOT = 2             '关闭系统并重启
Private Const EWX_FORCE = 4              '应用程序强制关闭
Private Const EWX_FORCEIFHUNG = 16       '如果应用程序已挂起,强制关闭Private Const SE_PRIVILEGE_ENABLED = &H2
Private Const SE_PRIVILEGE_ENABLED_BY_DEFAULT = &H1
Private Const SE_PRIVILEGE_USED_FOR_ACCESS = &H80000000Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_QUERY_SOURCE = &H10
Private Const TOKEN_QUERY = &H8Private Const ANYSIZE_ARRAY = 1Private Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"Private Const PROCESS_SET_INFORMATION = &H200
Private Const PROCESS_QUERY_INFORMATION = &H400Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End TypePrivate Type LUID
    lowpart As Long
    highpart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(0) As LUID_AND_ATTRIBUTES
End TypePrivate Sub Command1_Click()
     mDattime = CDate(txtHour.Text & ":" & txtMinute.Text)
     Timer1.Interval = 1000
        Form1.WindowState = 1
End Sub
Private Sub Shutdown() Dim lAPIReturn As Long Dim tTOKPRI As TOKEN_PRIVILEGES
 Dim tLUID As LUID
 Dim tLarInt As LARGE_INTEGER
 Dim lRequired As Long
 Dim hTokHan As Long
 Dim hProcess As Long
 
  If LookupPrivilegeValue(vbNullString, SE_SHUTDOWN_NAME, tLarInt) = 0 Then
  MsgBox "Get LUID error!", vbOKOnly, "Error"
  Exit Sub
 End If tLUID.highpart = tLarInt.highpart
 tLUID.lowpart = tLarInt.lowpart tTOKPRI.PrivilegeCount = 1
 tTOKPRI.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
 tTOKPRI.Privileges(0).pLuid = tLUID hProcess = GetCurrentProcess()
 lAPIReturn = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hTokHan)
 lAPIReturn = AdjustTokenPrivileges(hTokHan, 0, tTOKPRI, Len(tTOKPRI), 0, 0)
' lAPIReturn = ExitWindowsEx(EWX_LOGOFF, 0)
' lAPIReturn = ExitWindowsEx(EWX_SHUTDOWN, 0)
 lAPIReturn = ExitWindowsEx(EWX_POWEROFF, 0)
' lAPIReturn = ExitWindowsEx(EWX_REBOOT, 0)
' lAPIReturn = ExitWindowsEx(EWX_FORCE, 0)
' lAPIReturn = ExitWindowsEx(EWX_FORCEIFHUNG, 0)
 If lAPIReturn = 0 Then
  MsgBox "Function calling error!", vbOKOnly, "错误"
 End If lAPIReturn = CloseHandle(hTokHan)End SubPrivate Sub Form_Load()
 
    Timer1.Enabled = True
   
End SubPrivate Sub Timer1_Timer()
    If Format(Time, "hh:mm:ss") = mDattime Then
'   If Minute(Time) = 0 Then
        Shutdown
    End If
End Sub