'关闭计算机
'        Case 0  '关闭计算机
'                If IsFalse ExitWindowsEx(%EWX_FORCE Or %EWX_SHUTDOWN, 0) Then
'                    MsgBox "关机失败。"
'                End If   
'        Case 1  ' 重新启动计算机
'                If IsFalse ExitWindowsEx(%EWX_FORCE Or %EWX_REBOOT, 0) Then
'                    MsgBox "重新启动计算机失败。"
'                End If   
'        Case 2 ' 注销计算机
Function PowerOff(A as Long) as Long
   Dim tOsVersion as OSVERSIONINFOA
   Dim B as Long
   Dim hToken as HANDLE
   Dim tokenProcess as TOKEN_PRIVILEGES
   
   tOsVersion.dwOSVersionInfoSize = SizeOf(tOsVersion)
   If GetVersionExA(@tOsVersion) Then
      b = (tOsVersion.dwPlatformId = VER_PLATFORM_WIN32_NT)
   End If
   If b Then
      '获取此进程的特权令牌。
      If OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, @hToken) = 0 Then
         'Print "获取此进程的特权令牌。失败"
         Exit Function
      End If
      
      '获取值的关机特权。
      Dim P As ZString *20 = "SeShutdownPrivilege" 
      If LookupPrivilegeValueA(Null, @P, @(tokenProcess.Privileges(0).Luid)) Then
         'Print "启用关机特权为这一进程。"
         '启用关机特权为这一进程。
         tokenProcess.PrivilegeCount = 1
         tokenProcess.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
         
         b = AdjustTokenPrivileges(hToken, False, @tokenProcess, 0, Null, Null)
         'Print "b=" & b
         
      End If
      
      CloseHandle hToken
      
      If b Then
      Else
         'Print  "无法获取关机特权。"
         Exit Function
      End If
   End If
   
   '如果您使用的 Windows XP 或晚些时候，你可能想要提供在第二个参数中的关机原因代码。请参阅代码的 Reason.inc 文件。主要原因代码应该或次要原因代码。
   Select Case a
      Case 0  '关闭计算机
         If ExitWindowsEx(EWX_FORCE Or EWX_SHUTDOWN, 0) = 0 Then
            'Print  "关机失败。"
            Exit Function
         End If
      Case 1  ' 重新启动计算机
         If ExitWindowsEx(EWX_FORCE Or EWX_REBOOT, 0) = 0 Then
            'Print "重新启动计算机失败。"
            Exit Function
         End If
      Case 2 ' 注销计算机
         If ExitWindowsEx(EWX_FORCE Or EWX_LOGOFF, 0) = 0 Then
            'Print "注销计算机失败。"
            Exit Function
         End If
   End Select
   Function = 1
End Function