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
Local tOsVersion As OSVERSIONINFO
Local B As Long
Local hToken As Dword
Local tokenProcess As TOKEN_PRIVILEGES
tOsVersion.dwOSVersionInfoSize = SizeOf(tOsVersion)
If GetVersionEx(tOsVersion) Then
b = (tOsVersion.dwPlatformId = %VER_PLATFORM_WIN32_NT)
End If
If b Then
' 获取此进程的特权令牌。
If IsFalse OpenProcessToken(GetCurrentProcess(), _
%TOKEN_ADJUST_PRIVILEGES Or %TOKEN_QUERY, hToken) Then
Exit Function
End If
'获取值的关机特权。
If LookupPrivilegeValue(ByVal %Null, "SeShutdownPrivilege", _
tokenProcess.Privileges(0).Luid) Then
' 启用关机特权为这一进程。
tokenProcess.PrivilegeCount = 1
tokenProcess.Privileges(0).Attributes = %SE_PRIVILEGE_ENABLED
b = AdjustTokenPrivileges(hToken, %FALSE, ByVal VarPtr(tokenProcess), 0, _
ByVal %Null, ByVal %Null)
End If
CloseHandle hToken
If IsFalse b Then
' MsgBox "无法获取关机特权。"
Exit Function
End If
End If
'如果您使用的 Windows XP 或晚些时候,你可能想要提供在第二个参数中的关机原因代码。请参阅代码的 Reason.inc 文件。主要原因代码应该或次要原因代码。
Select Case a
Case 0 '关闭计算机
If IsFalse ExitWindowsEx(%EWX_FORCE Or %EWX_SHUTDOWN, 0) Then
' MsgBox "关机失败。"
Exit Function
End If
Case 1 ' 重新启动计算机
If IsFalse ExitWindowsEx(%EWX_FORCE Or %EWX_REBOOT, 0) Then
' MsgBox "重新启动计算机失败。"
Exit Function
End If
Case 2 ' 注销计算机
If IsFalse ExitWindowsEx(%EWX_FORCE Or %EWX_LOGOFF, 0) Then
' MsgBox "注销计算机失败。"
Exit Function
End If
End Select
Function=1
End Function