实现方法:
      使用ExitWindowsEx 函数,定义如下:
     Private Declare Function ExitWindowsEx Lib "user32"
                   (ByVal uFlags As Long,ByVal dwReserved As Long) As Long
 ExitWindowsEx 函数根据不同的参数进行不同的操作:参数 EWX_LOGOFF将关闭当前所有进程,然后
注销当前用户;参数EWX_REBOOT将关闭当前系统,然后重新启动;参数EWX_SHUTDOWN将关闭计算机。步骤:在穿体中添加3个单选按纽和一个确定按纽~~~~~~~~~~~~~~~~~~程序代码~~~~~~~~~~~~~~~~~~~~
'字符常量
Pubic Opt As stringPrivate Sub Command1_Click()
     HandleOpt
End Sub'缺省选项
Private Form_Load()
  Opt="shutdown"
End Sub'选择
Private Sub Option1_Click()
     Opt="shutdown"
End Sub
Private Sub Option2_Click()
     Opt="restart"
End Sub
Private Sub Option3_Click()
     Opt="logoff"
End Sub'执行操作
Private Function HandleOpt()
     select Case Opt
        Case "shutdown":
              ExitWindowsEx EWX_SHUTDOWN,0          '关闭
        Case "restart":
              ExitWindowsEx EWX_REBOOT,0            '重启
        Case "logoff":
              ExitWindowsEx EWX_LOGOFF,0            '注销
     End select
End Function~~~~~~~~~~~~~~~~~~~~~~~~~~~~~END~~~~~~~~~~~~~~~~
注意::在WIN 2K,NT,XP下需要用户有相应的权限
呵呵,大家好,以后我会把我所有用过的API函数给贴出来,
但哪些需要贴的,哪些不需要的,希望大家留言支持~
我的目的不是得到多少个星星,这两裤衩子够换了 呵呵
只是希望能给大家一点有用的信息,哪怕一点点也好~~谢谢

解决方案 »

  1.   

    Private Sub Label1_Click(Index As Integer)
        Select Case Index
            Case 0
                AdjustToken
                Call ExitWindowsEx(EWX_LOGOFF, 0) '注销
            End
        Case 1
            AdjustToken
            Call ExitWindowsEx(EWX_POWEROFF, 0)
            Call ExitWindowsEx(EWX_SHUTDOWN, 0) '关机
        End
    Case 2
        AdjustToken
        Call ExitWindowsEx(EWX_REBOOT, 0) '重启
    End
    Case 3
    Unload Me
    '取消
    End SelectEnd Sub
      

  2.   

    Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _
        ByVal dwReserved As Long) As LongEnum HowExitConst
        EWX_FORCE = 4 ' 强制关机
        EWX_LOGOFF = 0 ' 登出
        EWX_REBOOT = 2 ' 重开机
        EWX_SHUTDOWN = 1 ' 关机
        EWX_POWEROFF = 8
    End EnumConst TOKEN_ADJUST_PRIVILEGES = &H20
    Const TOKEN_QUERY = &H8
    Const SE_PRIVILEGE_ENABLED = &H2
    Const ANYSIZE_ARRAY = 1Private Type LUID
        lowpart As Long
        highpart As Long
    End TypePrivate Type LUID_AND_ATTRIBUTES
        pLuid As LUID
        Attributes As Long
    End TypePrivate Type TOKEN_PRIVILEGES
        PrivilegeCount As Long
        Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES
    End TypePrivate Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias _
        "LookupPrivilegeValueA" (ByVal lpSystemName As String, _
        ByVal lpName As String, lpLuid As LUID) As Long
    Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" _
        (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
    Private Declare Function OpenProcessToken Lib "advapi32.dll" _
        (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, _
        TokenHandle As Long) As LongPrivate Sub AdjustToken()
    '因为 98以上的机器存在一个安全机制的问题  这个就是处理安全机制问题的代码
        Dim hdlProcessHandle As Long
        Dim hdlTokenHandle As Long
        Dim tmpLuid As LUID
        Dim tkp As TOKEN_PRIVILEGES
        Dim tkpNewButIgnored As TOKEN_PRIVILEGES
        Dim lBufferNeeded As Long
        hdlProcessHandle = GetCurrentProcess()
        OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), _
                                            hdlTokenHandle
        LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
        tkp.PrivilegeCount = 1
        tkp.Privileges(0).pLuid = tmpLuid
        tkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED    AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), _
                                                              tkpNewButIgnored, lBufferNeeded
    End Sub
    Private Sub Label1_Click(Index As Integer)
    '该代码可以关闭所以的windows系统 
        Select Case Index
            Case 0
                AdjustToken
                Call ExitWindowsEx(EWX_LOGOFF, 0) '注销
            End
        Case 1
            AdjustToken
            Call ExitWindowsEx(EWX_POWEROFF, 0)'对付98不能关机
            Call ExitWindowsEx(EWX_SHUTDOWN, 0) '关机
        End
    Case 2
        AdjustToken
        Call ExitWindowsEx(EWX_REBOOT, 0) '重启
    End
    Case 3
    Unload Me
    '取消
    End SelectEnd Sub