自己做个关机程序,下
Public Const TOKEN_ADJUST_PRIVILEGES = &H20
Public Const TOKEN_QUERY = &H8
Public Const SE_PRIVILEGE_ENABLED = &H2
Public Const ANYSIZE_ARRAY = 1Public Type LUID
  lowpart As Long
  highpart As Long
End TypePublic Type LUID_AND_ATTRIBUTES
  pLuid As LUID
  Attributes As Long
End TypePublic Type TOKEN_PRIVILEGES
  PrivilegeCount As Long
  Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
End TypePublic 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
 
 
 '安全关机需调用的API函数
Global Const EWX_POWEROFF = 8
Global Const EWX_SHUTDOWN = 1 '终止所有进程并关闭计算机
Global Const EWX_FORCE = 4    '强迫进程终止
Global Const EWX_LOGOFF = 3   '关掉在进程安全描述表中运行的所有进程,重起计算机
Global Const EWX_REBOOT = 2   '终止所有运行的进程并关闭计算机
Global Const EWX_LOGIN = 0  '以其它用户名重新登录系统
Public Declare Function ExitWindowsEx Lib "user32" (ByVal fuOptions As Long, ByVal dwReserved As Long) As Integer '关闭系统函数
 
 Public Sub AdjustToken()
 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 command1_click()
AdjustToken
X = ExitWindowsEx(EWX_FORCE Or EWX_SHUTDOWN Or EWX_POWEROFF, 0)
      
end sub