关机的API函数是什么?谢谢!
在线等待!!!!!!!!!!

解决方案 »

  1.   

    Private 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 TypePrivate Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    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 RebootPC(YN)
      Const csProcName = "RebootPC"
       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)' Get the LUID for the shutdown privilege
      Call LookupPrivilegeValue("", "SeShutdownPrivilege", tmpLuid)  tkpNew.PrivilegeCount = 1 ' One privilege to set
      tkpNew.TheLuid = tmpLuid
      tkpNew.Attributes = SE_PRIVILEGE_ENABLED' Enable the shutdown privilege in the access token of this process.
      lBufferNeeded = 0
      Call AdjustTokenPrivileges(hTokenHandle, False, tkpNew, Len(tkpPrevious), tkpPrevious, lBufferNeeded)'
      If YN = 1 Then Call ExitWindowsEx(EWX_SHUTDOWN, &HFFFF) '关机
      If YN = 2 Then Call ExitWindowsEx(EWX_FORCE Or EWX_REBOOT, &HFFFF) '重启
     Exit Sub
    End Sub
      

  2.   

    Public Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
      

  3.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18622
      

  4.   

    ExitWindowsEx VB声明 
    Declare Function ExitWindowsEx Lib "user32" Alias "ExitWindowsEx" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long 
    说明 
    退出windows,并用特定的选项重新启动 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    uFlags Long,指定下述一个或多个标志(用OR运算符合并到一起) 
    EWX_FORCE 强迫中止没有响应的进程 
    EWX_LOGOFF 中止进程,然后注销 
    EWX_SHUTDOWN 关掉系统电源(如果可能的话,ATX电源就可以) 
    EWX_REBOOT 重新引导系统 
    EWX_SHUTDOWN 关闭系统 
    dwReserved Long,保留,设为零 
    注解 
    这个函数调用后会立刻返回,系统关闭过程是在后台进行的。注意先中止自己的应用程序,使关闭过程更显平顺。当然,您的进程必须有足够的优先权,否则也不能执行这种操作 
      

  5.   

    Shell "rundll.exe user.exe,exitwindows", vbHide ’就可以了
      

  6.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18622