在winodws2000中实现关闭计算机的VB代码是什么?

解决方案 »

  1.   

    用这个api 
    ExitWindowsEx
    试试
      

  2.   

    ExitWindowsEx(EWX_SHUTDOWN, 0&)
      

  3.   

    用API函数ExitWindowsEx 用API浏览器把那N长声名贴下来
      

  4.   

    private Declare Function ExitWindows Lib "User32" Alias "ExitWindowsEx" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
    Const EWX_REBOOT = 2
    Const EWX_SHUTDOWN = 1使用:
    call ExitWindowsEx(EWX_SHUTDOWN, 0&) '关闭计算机
    call  ExitWindowsEx(EWX_REBOOT, 0&) '重新启动计算机
      

  5.   

    Option ExplicitPrivate Const TOKEN_ADJUST_PRIVILEGES = &H20
    Private Const TOKEN_QUERY = &H8
    Private Const SE_PRIVILEGE_ENABLED = &H2
    Private Const EWX_SHUTDOWN As Long = 1
    Private Const EWX_FORCE As Long = 4
    Private Const EWX_REBOOT = 2
    Private Type LUID
      UsedPart As Long
      IgnoredForNowHigh32BitPart As Long
    End TypePrivate Type TOKEN_PRIVILEGES
      PrivilegeCount As Long
      TheLuid As LUID
      Attributes As Long
    End Type'关闭系统的API
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, _
                                                         ByVal dwReserved As Long) As Long
    '获取当前进程的一个伪句柄
    '只要当前进程需要一个进程句柄,就可以使用这个伪句柄。该句柄可以复制,但不可继承。不必调用CloseHandle函数来关闭这个句柄
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long'以下为NT/2000中和权限相关的函数
    '如果函数执行成功,返回非零。
    Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, _
                                                              ByVal DesiredAccess As Long, _
                                                              TokenHandle As Long) As Long
    '查看权限的函数
    Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" _
                                                 (ByVal lpSystemName As String, _
                                                  ByVal lpName As String, lpLuid As LUID) As Long
    '设置权限的函数
    Private Declare Function AdjustTokenPrivileges Lib "advapi32" (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
    Sub ExitSystem()  Dim hProcessHandle As Long
      Dim hTokenHandle As Long
      Dim tmpLuid As LUID
      Dim tkpNew As TOKEN_PRIVILEGES
      Dim tkpPrevious As TOKEN_PRIVILEGES
      Dim lBufferNeeded As Long  hProcessHandle = GetCurrentProcess()
      Call OpenProcessToken(hProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hTokenHandle)  Call LookupPrivilegeValue("", "SeShutdownPrivilege", tmpLuid)  tkpNew.PrivilegeCount = 1
      tkpNew.TheLuid = tmpLuid
      tkpNew.Attributes = SE_PRIVILEGE_ENABLED  lBufferNeeded = 0
      Call AdjustTokenPrivileges(hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, lBufferNeeded)  Call ExitWindowsEx(EWX_SHUTDOWN, &O0)End Sub