版权声明:本文内容由专业老师自互联网搜集整理而来,仅供本校校园网内用户学习参考和交流之用,任何人不得将本文用于其他用途。
需要提升进程权限的模块 Attribute VB_Name = "Exit_Windows" Option Explicit Option Base 0 Private Declare Function ExitWindowsEx()Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long Private Declare Function GetVersionEx()Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long Private Declare Function GetCurrentProcess()Function GetCurrentProcess Lib "kernel32" () As Long Private Const EWX_LOGOFF = 0 Private Const EWX_SHUTDOWN = 1 Private Const EWX_REBOOT = 2 Private Const EWX_FORCE = 4 Private Const VER_PLATFORM_WIN32_NT = 2 Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type ''Detect if the program is running under Windows NT Private Function IsWinNT()Function IsWinNT() As Boolean Dim myOS As OSVERSIONINFO myOS.dwOSVersionInfoSize = Len(myOS) GetVersionEx myOS IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT) End Function '' Shut Down NT Public Sub ShutDownNT()Sub ShutDownNT(Force As Boolean) Dim Ret As Long Dim Flags As Long Flags = EWX_SHUTDOWN If Force Then Flags = Flags + EWX_FORCE If IsWinNT Then Call EnablePrivileges(GetCurrentProcess(), SE_SHUTDOWN_NAME) ExitWindowsEx Flags, 0 End Sub ''Restart NT Public Sub RebootNT()Sub RebootNT(Force As Boolean) Dim Ret As Long Dim Flags As Long Flags = EWX_REBOOT If Force Then Flags = Flags + EWX_FORCE If IsWinNT Then Call EnablePrivileges(GetCurrentProcess(), SE_SHUTDOWN_NAME) ExitWindowsEx Flags, 0 End Sub ''Log off the current user Public Sub LogOffNT()Sub LogOffNT(Force As Boolean) Dim Ret As Long Dim Flags As Long Flags = EWX_LOGOFF If Force Then Flags = Flags + EWX_FORCE ExitWindowsEx Flags, 0 End Sub